Partilhar via


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);  
   }  
}  

Consulte também