Compartilhar via


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
/lidioma Especifica a linguagem na qual gerar a classe gerenciada Early Bound. Você pode especificar CS (padrão C#;), VB (Visual Basic), MC (C++) ou JS (JScript) como o argumento de linguagem.
/mmáquina Especifica o computador ao qual se conectar, em que a classe WMI reside. O padrão é o computador local.
/ncaminho 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.
/oclassnamespace 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.
/pcaminho 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.
/pwsenha Especifica a senha a ser usada durante o logon em um computador especificado pela opção /m.
/unome 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 Key para descrever uma propriedade em uma classe gerada. Por exemplo, uma propriedade modificada com um Read qualificador é definida apenas com um acessador de propriedade get na classe gerada. Como uma propriedade marcada com o Read qualificador destina-se a ser somente leitura, um set acessador não é definido.

  • Uma propriedade numérica pode ser modificada pelos qualificadores e ValueMaps para Values indicar que a propriedade pode ser definida apenas para valores permitidos especificados. Uma enumeração é gerada com elas Values e ValueMaps 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