Mgmtclassgen.exe (Zarządzanie generatorem silnie typizowanej klasy)

Narzędzie Management Strongly Typed Class Generator umożliwia szybkie generowanie wcześnie powiązanych klas zarządzanych dla określonej klasy Instrumentacji zarządzania Windows (WMI). Wygenerowana klasa upraszcza kod, który trzeba napisać, aby uzyskać dostęp do wystąpienia klasy WMI.

Składnia

mgmtclassgen
WMIClass [options]
Argument Opis
Klasa WMIClass Klasa Instrumentacji zarządzania Windows, dla której jest generowana wcześnie powiązana klasa zarządzana.
Opcja Opis
/ljęzyk Określa język, w którym ma zostać wygenerowana wcześnie powiązana klasa zarządzana. Jako argument języka można określić CS (C#; default), VB (Visual Basic), MC (C++) lub JS (JScript).
/mmaszyna Określa komputer, z którym należy nawiązać połączenie (na tym komputerze znajduje się klasa WMI). Wartością domyślną jest komputer lokalny.
/nścieżka Określa ścieżkę do przestrzeni nazw usługi WMI zawierającej odpowiednią klasę WMI. Jeśli ta opcja nie zostanie określona, narzędzie wygeneruje kod dla klasy WMIClass w domyślnej przestrzeni nazw Root\cimv2 .
/oclassnamespace Określa przestrzeń nazw platformy .NET, w której ma zostać wygenerowana klasa kodu zarządzanego. Jeśli ta opcja nie zostanie określona, narzędzie wygeneruje przestrzeń nazw, używając przestrzeni nazw usługi WMI i prefiksu schematu. Prefiks schematu jest częścią nazwy klasy poprzedzającą znak podkreślenia. Na przykład w przypadku klasy Win32_OperatingSystem w przestrzeni nazw Root\cimv2 narzędzie wygeneruje klasę w katalogu ROOT. CIMV2. Win32.
/pfilepath Określa ścieżkę do pliku, w którym ma zostać zapisany wygenerowany kod. Jeśli ta opcja nie zostanie określona, narzędzie utworzy plik w bieżącym katalogu. Nazwa klasy i pliku, w którym generuje klasę przy użyciu argumentu WMIClass . Nazwa klasy i pliku są takie same jak nazwa klasy WMIClass. Jeśli klasa WMIClass zawiera znak podkreślenia, narzędzie używa części nazwy klasy po znaku podkreślenia. Jeśli na przykład nazwa klasy WMIClass ma format Win32_LogicalDisk, wygenerowana klasa i plik nosi nazwę "logicaldisk". Jeżeli plik już istnieje, narzędzie zastąpi istniejący plik.
/pwhasło Określa hasło, które ma być używane podczas logowania się do komputera określonego przez /m opcji.
/unazwa użytkownika Określa nazwę użytkownika, która ma być używana podczas logowania się do komputera określonego przez /m opcji.
/? Wyświetla składnię polecenia i opcje narzędzia.

Uwagi

Mgmtclassgen.exe używa ManagementClass.GetStronglyTypedClassCode metody . Dzięki temu można użyć dowolnego niestandardowego dostawcy kodu, aby wygenerować kod w zarządzanych językach innych niż C#, Visual Basic i JScript.

Należy zauważyć, że wygenerowane klasy są powiązane ze schematem, dla którego są generowane. Jeśli schemat źródłowy ulegnie zmianie, trzeba ponownie wygenerować klasę, jeśli chce się odzwierciedlić zmiany w schemacie.

W poniższej tabeli pokazano mapowanie typów modelu wspólnych informacji (CIM) usługi WMI na typy danych w generowanej klasie:

Typ modelu CIM Typ danych w generowanej klasie
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 Pojedynczy
CIM_REAL64 Double
CIM_BOOLEAN Wartość logiczna
CIM_String Ciąg
CIM_DATETIME Data/godzina lub przedział czasu
CIM_REFERENCE Managementpath
CIM_CHAR16 Char
CIM_OBJECT Managementbaseobject
CIM_IUNKNOWN Obiekt
CIM_ARRAY Tablica wymienionych powyżej obiektów

Podczas generowania klasy WMI należy zwrócić uwagę na następujące zachowania:

  • Możliwe jest, że standardowa publiczna właściwość lub metoda będzie miała taką samą nazwę jak istniejąca właściwość lub metoda. Jeśli tak się zdarzy, narzędzie zmieni nazwę właściwości lub metody w generowanej klasie w celu uniknięcia konfliktu nazw.

  • Możliwe jest, że nazwa właściwości lub metody w generowanej klasie będzie słowem kluczowym w docelowym języku programowania. Jeśli tak się zdarzy, narzędzie zmieni nazwę właściwości lub metody w generowanej klasie w celu uniknięcia konfliktu nazw.

  • W usłudze WMI kwalifikatory to modyfikatory zawierające informacje opisujące klasę, wystąpienie, właściwość lub metodę. Usługa WMI używa standardowych kwalifikatorów, takich jak Odczyt, Zapis i Klucz , aby opisać właściwość w wygenerowanej klasie. Na przykład właściwość zmodyfikowana za pomocą kwalifikatora odczytu jest definiowana tylko z właściwością get accessor w wygenerowanej klasie. Ponieważ właściwość oznaczona kwalifikatorem do odczytu jest przeznaczona tylko do odczytu, zestaw dostępu nie jest zdefiniowany.

  • Właściwość liczbowa może zostać zmodyfikowana przez kwalifikatory Values i ValueMaps , aby wskazać, że właściwość można ustawić tylko na określone dopuszczalne wartości. Wyliczenie jest generowane przy użyciu tych wartości i map wartości , a właściwość jest mapowana na wyliczenie.

  • Usługa WMI używa pojedynczego terminu w celu opisania klasy, która ma tylko jedno wystąpienie. W związku z tym konstruktor bez parametrów dla pojedynczej klasy zainicjuje klasę tylko do jedynego wystąpienia klasy.

  • Klasa WMI może mieć właściwości, które są obiektami. Podczas generowania silnie typizowanej klasy dla tego typu klasy WMI należy rozważyć wygenerowanie silnie typiowanych klas dla typów właściwości obiektu osadzonego. Pozwoli to uzyskać dostęp do osadzonych obiektów w sposób silnie typizowany. Należy zauważyć, że wygenerowany kod może nie być w stanie wykryć typu osadzonego obiektu. W takim przypadku w wygenerowanym kodzie zostanie utworzony komentarz powiadamiający o problemie. Następnie można zmodyfikować wygenerowany kod, tak aby właściwość miała typ innej generowanej klasy.

  • W usłudze WMI wartość danych typu CIM_DATETIME może przedstawiać określoną datę i godzinę albo interwał czasu. Jeśli wartość danych reprezentuje datę i godzinę, typ danych w wygenerowanej klasie to DateTime. Jeśli wartość danych reprezentuje interwał czasu, typ danych w wygenerowanej klasie to TimeSpan.

Możesz też wygenerować silnie typizowaną klasę przy użyciu rozszerzenia zarządzania Eksploratora serwera w programie Visual Studio .NET.

Aby uzyskać więcej informacji na temat usługi WMI, zobacz temat Instrumentacja zarządzania Windows w dokumentacji zestawu SDK platformy.

Przykłady

Następujące polecenie generuje klasę zarządzaną w kodzie języka C# dla klasy Win32_LogicalDisk WMI w przestrzeni nazw Root\cimv2 . Narzędzie zapisuje klasę zarządzaną w pliku źródłowym w lokalizacji c:\disk.cs w katalogu ROOT. CIMV2. Przestrzeń nazw Win32 .

mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs  

W poniższym przykładzie kodu pokazano, w jaki sposób można programowo używać wygenerowanej klasy. Najpierw jest wyliczane wystąpienie klasy i jest drukowana ścieżka. Następnie za pomocą wystąpienia usługi WMI jest tworzone wystąpienie wygenerowanej klasy, które ma zostać zainicjowane. Process jest klasą wygenerowaną dla Win32_Process i LogicalDisk jest klasą wygenerowaną dla Win32_LogicalDisk w przestrzeni nazw 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);  
   }  
}  

Zobacz też