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 língua 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.
Nome de usuário /u 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);  
   }  
}  

Confira também