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 |
---|---|
WMIClass | Klasa Instrumentacji zarządzania Windows, dla której jest generowana wcześnie powiązana klasa zarządzana. |
Opcja | Opis |
---|---|
/l ję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). |
/m maszyna | Określa komputer, z którym należy nawiązać połączenie (na tym komputerze znajduje się klasa WMI). Wartość domyślna to komputer lokalny. |
/n ścieżka | Określa ścieżkę do przestrzeni nazw usługi WMI zawierającej odpowiednią klasę WMI. Jeśli nie określisz tej opcji, narzędzie generuje kod dla klasy WMIClass w domyślnej przestrzeni nazw Root\cimv2 . |
/o classnamespace | 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 dla klasy Win32_OperatingSystem w przestrzeni nazw Root\cimv2 narzędzie wygeneruje klasę w katalogu ROOT. CIMV2. Win32. |
/p filepath | 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. Nazywa klasę i plik, 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 WMIClass ma format Win32_LogicalDisk, wygenerowana klasa i plik nosi nazwę "logicaldisk". Jeżeli plik już istnieje, narzędzie zastąpi istniejący plik. |
/pw hasło | Określa hasło do użycia podczas logowania się do komputera określonego przez /m opcji. |
/u nazwa użytkownika | Określa nazwę użytkownika, która ma być używana podczas logowania się na komputerze określonym 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 | Bajt |
CIM_SINT16 | Int16 |
CIM_UINT16 | UInt16 |
CIM_SINT32 | Int32 |
SIM_UINT32 | UInt32 |
CIM_SINT64 | Int64 |
CIM_UINT64 | UInt64 |
CIM_REAL32 | Pojedynczy |
CIM_REAL64 | Podwójne |
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ę. 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 odczyt jest definiowana tylko z właściwością get accessor w wygenerowanej klasie. Ponieważ właściwość oznaczona kwalifikatorem odczyt ma być tylko do odczytu, zestaw metod 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 tej 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 obiektów osadzonych w sposób silnie typizowane. 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 alternatywnie 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 folderze 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);
}
}