Mgmtclassgen.exe (Gerador de Classe Fortemente Tipada de Gerenciamento)
A ferramenta Gerador de Classes Fortemente Tipadas de Gerenciamento permite gerar rapidamente uma classe gerenciada Early Bound para uma classe WMI (Instrumentação de Gerenciamento do Windows) especificada. A classe gerada simplifica o código que você deve gravar para acessar uma instância da classe WMI.
Syntax
mgmtclassgen
WMIClass [options]
Argumento | Descrição |
---|---|
WMIClass | A classe WMI para a qual uma classe gerenciada Early Bound deve ser gerada. |
Opção | Descrição |
---|---|
/l idioma | Especifica a linguagem na qual gerar a classe gerenciada Early Bound. É possível especificar CS (C#, padrão), VB (Visual Basic), MC (C++) ou JS (JScript) como o argumento da linguagem. |
/m máquina | Especifica o computador ao qual se conectar, em que a classe WMI reside. O padrão é o computador local. |
/n caminho | Especifica o caminho para o namespace WMI que contém a classe WMI. Se você não especificar essa opção, a ferramenta gerará o código para WMIClass no namespace Root\cimv2 padrão. |
/o classnamespace | Especifica o namespace do .NET no qual gerar a classe de código gerenciada. Se você não especificar essa opção, a ferramenta gerará o namespace usando o namespace WMI e o prefixo do esquema. O prefixo do esquema é a parte do nome da classe que antecede o caractere de sublinhado. Por exemplo, para a classe Win32_OperatingSystem no namespace Root\cimv2, a ferramenta geraria a classe em ROOT.CIMV2.Win32. |
/p caminho do arquivo | Especifica o caminho para o arquivo no qual o código gerado deve ser salvo. Se você não especificar essa opção, a ferramenta criará o arquivo no diretório atual. Ela nomeia a classe e o arquivo em que gera a classe que usa o argumento WMIClass. O nome da classe e do arquivo são iguais ao nome do WMIClass. Se o WMIClass contiver um caractere sublinhado, a ferramenta usará a parte do nome da classe após o caractere sublinhado. Por exemplo, se o nome WMIClass estiver no formato Win32_LogicalDisk, a classe e o arquivo gerados serão chamados de "logicaldisk". Se já existir um arquivo, a ferramenta substituirá o arquivo existente. |
/pw senha | Especifica a senha a ser usada durante o logon em um computador especificado pela opção /m. |
/u nome de usuário | Especifica o nome de usuário a ser usado durante o logon em um computador especificado pela opção /m. |
/? | Exibe sintaxe de comando e opções para a ferramenta. |
Comentários
Mgmtclassgen.exe usa o método ManagementClass.GetStronglyTypedClassCode. Por isso, é possível usar qualquer provedor de código personalizado para gerar código em linguagens gerenciadas que não sejam C#, Visual Basic e JScript.
As classes geradas são associadas ao esquema para o qual são geradas. Se o esquema subjacente mudar, você deverá gerar novamente a classe se quiser refletir alterações no esquema.
A seguinte tabela mostra como tipos CIM (Common Information Model) são mapeados para tipos de dados em uma classe gerada:
Tipo CIM | Tipo de dados na classe gerada |
---|---|
CIM_SINT8 | SByte |
CIM_UINT8 | Byte |
CIM_SINT16 | Int16 |
CIM_UINT16 | UInt16 |
CIM_SINT32 | Int32 |
SIM_UINT32 | UInt32 |
CIM_SINT64 | Int64 |
CIM_UINT64 | UInt64 |
CIM_REAL32 | Single |
CIM_REAL64 | Double |
CIM_BOOLEAN | Booliano |
CIM_String | Cadeia de caracteres |
CIM_DATETIME | DateTime ou TimeSpan |
CIM_REFERENCE | ManagementPath |
CIM_CHAR16 | Char |
CIM_OBJECT | ManagementBaseObject |
CIM_IUNKNOWN | Objeto |
CIM_ARRAY | Matriz dos objetos mencionados acima |
Observer os seguintes comportamentos quando você gera uma classe WMI:
É possível que uma propriedade ou um método público padrão tenha o mesmo nome de uma propriedade ou um método existente. Se isso ocorrer, a ferramenta alterará o nome da propriedade ou do método na classe gerada para evitar conflitos de nomenclatura.
É possível que o nome de uma propriedade ou de um método em uma classe gerada seja uma palavra-chave na linguagem de programação de destino. Se isso ocorrer, a ferramenta alterará o nome da propriedade ou do método na classe gerada para evitar conflitos de nomenclatura.
No WMI, os qualificadores são os modificadores que contêm informações para descrever uma classe, uma instância, uma propriedade ou um método. O WMI usa qualificadores padrão como Leitura, Gravação e Chave para descrever uma propriedade em uma classe gerada. Por exemplo, uma propriedade modificada com um qualificador Leitura é definida apenas com um acessador get da propriedade na classe gerada. Como uma propriedade marcada com o qualificador Leitura deve ser somente leitura, um acessador set não é definido.
Uma propriedade numérica pode ser modificada pelos qualificadores Values e ValueMaps para indicar que a propriedade pode ser definida somente como valores permitidos especificados. Uma enumeração é gerada com Values e ValueMaps e a propriedade é mapeada para a enumeração.
O WMI usa o termo singleton para descrever uma classe que só pode ter uma instância. Por isso, o construtor sem parâmetros de uma classe singleton inicializará a classe com a única instância da classe.
Uma classe WMI pode ter as propriedades que são objetos. Ao gerar uma classe fortemente tipada para esse tipo de classe WMI, você deve levar em consideração a geração de classes fortemente tipadas para os tipos das propriedades de objeto inseridas. Isso permitirá acessar os objetos inseridos de maneira fortemente tipada. Observe que o código gerado talvez não seja capaz de detectar o tipo de objeto inserido. Nesse caso, um comentário será criado no código gerado para notificar você desse problema. Em seguida, é possível modificar o código gerado para tipar a propriedade para a outra classe gerada.
No WMI, o valor de dados do tipo de dados CIM_DATETIME pode representar uma data e hora específicas ou um intervalo de tempo. Se o valor de dados representar uma data e hora, o tipo de dados na classe gerada será DateTime. Se o valor de dados representar um intervalo de tempo, o tipo de dados na classe gerada será TimeSpan.
Também é possível gerar uma classe fortemente tipada usando-se a Extensão de Gerenciamento do Gerenciador de Servidores no Visual Studio .NET.
Para obter mais informações sobre WMI, consulte o tópico Instrumentação de Gerenciamento do Windows na documentação do SDK da Plataforma.
Exemplos
O comando a seguir gera uma classe gerenciada no código do C# para a classe WMI Win32_LogicalDisk no namespace Root\cimv2. A ferramenta grava a classe gerenciada no arquivo de origem em c:\disk.cs no namespace ROOT.CIMV2.Win32.
mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs
O código a seguir mostra como usar uma classe gerada programaticamente. Primeiro, uma instância da classe é enumerada e o caminho é impresso. Em seguida, uma instância da classe gerada a ser inicializada é criada com uma instância de WMI. Process
é a classe gerada para Win32_Process e LogicalDisk
é a classe gerada para Win32_LogicalDisk no namespace Root\cimv2.
Imports System
Imports System.Management
Imports ROOT.CIMV2.Win32
Public Class App
Public Shared Sub Main()
' Enumerate instances of the Win32_process.
' Print the Name property of the instance.
Dim ps As Process
For Each ps In Process.GetInstances()
Console.WriteLine(ps.Name)
Next ps
' Initialize the instance of LogicalDisk with
' the WMI instance pointing to logical drive d:.
Dim dskD As New LogicalDisk(New _
ManagementPath("win32_LogicalDisk.DeviceId=""d:"""))
Console.WriteLine(dskD.Caption)
End Sub
End Class
using System;
using System.Management;
using ROOT.CIMV2.Win32;
public class App
{
public static void Main()
{
// Enumerate instances of the Win32_process.
// Print the Name property of the instance.
foreach(Process ps in Process.GetInstances())
{
Console.WriteLine(ps.Name);
}
// Initialize the instance of LogicalDisk with
// the WMI instance pointing to logical drive d:.
LogicalDisk dskD = new LogicalDisk(new ManagementPath(
"win32_LogicalDisk.DeviceId=\"d:\""));
Console.WriteLine(dskD.Caption);
}
}