Mgmtclassgen.exe (Gerador de classe fortemente tipado de gerenciamento)
A ferramenta Gerador de Classes de Gerenciamento Fortemente Tipado permite gerar rapidamente uma classe gerenciada de ligação antecipada para uma classe WMI (Instrumentação de Gerenciamento do Windows) especificada. A classe gerada simplifica o código que você deve escrever para acessar uma instância da classe WMI.
Sintaxe
mgmtclassgen
WMIClass [options]
Argumento | Description |
---|---|
WMIClass | A classe Instrumentação de Gerenciamento do Windows para a qual gerar uma classe gerenciada vinculada antecipadamente. |
Opção | Description |
---|---|
/l língua | Especifica o idioma no qual gerar a classe gerenciada de associação antecipada. Você pode 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, onde a classe WMI reside. A predefiniçã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á código para WMIClass no namespace Root\cimv2 padrão. |
/o classnamespace | Especifica o namespace .NET no qual gerar a classe de código gerenciado. 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 precede 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 salvar o código gerado. Se você não especificar essa opção, a ferramenta criará o arquivo no diretório atual. Ele nomeia a classe e o arquivo no qual gera a classe usando o argumento WMIClass . O nome da classe e do arquivo são os mesmos que o nome do WMIClass. Se WMIClass contiver um caractere de sublinhado, a ferramenta usará a parte do nome da classe após o caractere de 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 ficheiro, a ferramenta substitui o ficheiro existente. |
/pw senha | Especifica a senha a ser usada ao fazer logon em um computador especificado pela opção /m . |
/u nome de usuário | Especifica o nome de usuário a ser usado ao fazer logon em um computador especificado pela opção /m . |
/? | Exibe a sintaxe do comando e as opções da ferramenta. |
Observações
Mgmtclassgen.exe usa o ManagementClass.GetStronglyTypedClassCode método. Portanto, você pode usar qualquer provedor de código personalizado para gerar código em linguagens gerenciadas diferentes de C#, Visual Basic e JScript.
Observe que as classes geradas estão vinculadas ao esquema para o qual são geradas. Se o esquema subjacente for alterado, você deverá gerar novamente a classe se quiser que ela reflita as alterações no esquema.
A tabela a seguir mostra como os tipos de CIM (Common Information Model) do WMI 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 | Solteiro |
CIM_REAL64 | Duplo |
CIM_BOOLEAN | Booleano |
CIM_String | Cadeia |
CIM_DATETIME | DateTime ou TimeSpan |
CIM_REFERENCE | ManagementPath |
CIM_CHAR16 | Char |
CIM_OBJECT | ManagementBaseObject |
CIM_IUNKNOWN | Objeto |
CIM_ARRAY | Matriz dos objetos acima mencionados |
Observe os seguintes comportamentos quando você gera uma classe WMI:
É possível que uma propriedade ou método público padrão tenha o mesmo nome que uma propriedade ou método existente. Se isso ocorrer, a ferramenta alterará o nome da propriedade ou método na classe gerada para evitar conflitos de nomenclatura.
É possível que o nome de uma propriedade ou 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 método na classe gerada para evitar conflitos de nomenclatura.
No WMI, qualificadores são modificadores que contêm informações para descrever uma classe, instância, propriedade ou 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 que é modificada com um qualificador Read é definida apenas com uma propriedade get accessor na classe gerada. Como uma propriedade marcada com o qualificador Read se destina a ser somente leitura, um acessador definido não é definido.
Uma propriedade numérica pode ser modificada pelos qualificadores Values e ValueMaps para indicar que a propriedade pode ser definida apenas para valores permitidos especificados. Uma enumeração é gerada com esses Values e ValueMaps e a propriedade é mapeada para a enumeração.
O WMI usa o termo singleton para descrever uma classe que pode ter apenas uma instância. Portanto, o construtor sem parâmetros para uma classe singleton inicializará a classe para a única instância da classe.
Uma classe WMI pode ter propriedades que são objetos. Ao gerar uma classe fortemente tipada para esse tipo de classe WMI, você deve considerar a geração de classes fortemente tipadas para os tipos das propriedades do objeto incorporado. Isso permitirá que você acesse os objetos incorporados de uma maneira fortemente tipada. Observe que o código gerado pode não ser capaz de detetar o tipo do objeto incorporado. Nesse caso, um comentário será criado no código gerado para notificá-lo desse problema. Em seguida, você pode modificar o código gerado para digitar 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.
Como alternativa, você pode gerar uma classe fortemente tipada usando 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 Platform SDK.
Exemplos
O comando a seguir gera uma classe gerenciada no código 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 na ROOT. CIMV2. Espaço de nomes Win32 .
mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs
O exemplo de 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 do 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);
}
}