Management Strongly Typed Class Generator-Tool (Mgmtclassgen.exe)

Aktualisiert: November 2007

Mit dem Management Strongly Typed Class Generator-Tool können Sie für eine bestimmte WMI (Windows Management Instrumentation)-Klasse schnell eine früh gebundene Klasse generieren. Die generierte Klasse vereinfacht den Code, den Sie für den Zugriff auf eine Instanz der WMI-Klasse schreiben müssen.

mgmtclassgen WMIClass [options] 

Argument

Beschreibung

WMIClass

Die WMI (Windows Management Instrumentation)-Klasse, für die eine früh gebundene verwaltete Klasse generiert wird.

Option

Beschreibung

/l Sprache

Gibt die Sprache an, in der die früh gebundene verwaltete Klasse generiert werden soll. Als Sprachargument können Sie CS (C#, Standardeinstellung), VB (Visual Basic), MC (Managed Extensions for C++), VJ (Visual J#) oder JS (JScript) angeben.

/m Computer

Gibt den Computer an, auf dem sich die WMI-Klasse befindet und mit dem eine Verbindung hergestellt werden soll. Die Standardeinstellung ist der lokale Computer.

/n Pfad

Gibt den Pfad zum WMI-Namespace an, der die WMI-Klasse enthält. Wenn Sie keinen Pfad angeben, wird der Code für WMIClass im Root\cimv2-Standardnamespace generiert.

/o Klassennamespace

Gibt den .NET-Namespace an, in dem die verwaltete Codeklasse generiert werden soll. Wenn Sie keinen Klassennamespace angeben, wird der Namespace aus dem WMI-Namespace und dem Schemapräfix generiert. Das Schemapräfix ist der Bestandteil des Klassennamens, der dem Unterstrich vorangeht. Für die Win32_OperatingSystem-Klasse im Root\cimv2-Namespace würde die Klasse z. B. in ROOT.CIMV2.Win32 generiert werden.

/p Dateipfad

Gibt den Pfad zur Datei an, in der der generierte Code gespeichert werden soll. Wenn Sie keinen Dateipfad angeben, wird die Datei im aktuellen Verzeichnis erstellt. Die Klasse und die Datei, in der diese erstellt wird, werden anhand des WMIClass-Arguments benannt. Die Namen der Klasse und der Datei stimmen mit dem Namen der WMIClass überein. Wenn der Name der WMIClass einen Unterstrich enthält, wird der Teil des Namens nach dem Unterstrich verwendet. Wenn der Name der WMIClass z. B. das Format Win32_LogicalDisk aufweist, werden die generierte Klasse und Datei mit "logicaldisk" bezeichnet. Wenn bereits eine gleichnamige Datei vorhanden ist, wird diese überschrieben.

/pw Kennwort

Gibt das Kennwort für die Anmeldung an einem Computer an, der durch die /m-Option angegeben ist.

/u Benutzername

Gibt den Benutzernamen für die Anmeldung an einem Computer an, der durch die /m-Option angegeben ist.

/?

Zeigt die Befehlssyntax und die Optionen für das Tool an.

Hinweise

Mgmtclassgen.exe verwendet die System.Management.ManagementClass.GetStronglyTypedClassCode-Methode. Sie können daher mit einem beliebigen benutzerdefinierten Codeanbieter Code in anderen verwalteten Sprachen als C#, Visual Basic und JScript generieren.

Beachten Sie, dass die generierten Klassen an das Schema gebunden sind, für das sie generiert werden. Änderungen am zugrunde liegenden Schema wirken sich auf die Klasse erst nach einer Neugenerierung aus.

In der folgenden Tabelle wird die Zuordnung von WMI Common Information Model (CIM)-Typen zu Datentypen in einer generierten Klasse dargestellt:

CIM-Typ

Datentyp in der generierten Klasse

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

Boolean

CIM_String

String

CIM_DATETIME

DateTime oder TimeSpan

CIM_REFERENCE

ManagementPath

CIM_CHAR16

Char

CIM_OBJECT

ManagementBaseObject

CIM_IUNKNOWN

Object

CIM_ARRAY

Array der zuvor aufgeführten Objekte

Beachten Sie beim Generieren einer WMI-Klasse das folgende Verhalten:

  • Eine öffentliche Standardeigenschaft oder -methode darf den gleichen Namen wie eine vorhandene Eigenschaft oder Methode aufweisen. In diesem Fall wird der Name der Eigenschaft oder Methode in der generierten Klasse geändert, um Namenskonflikte zu vermeiden.

  • Der Name einer Eigenschaft oder Methode in einer generierten Klasse darf ein Schlüsselwort der Zielprogrammiersprache sein. In diesem Fall wird der Name der Eigenschaft oder Methode in der generierten Klasse geändert, um Namenskonflikte zu vermeiden.

  • Qualifizierer in WMI sind Modifizierer, die Informationen zum Beschreiben einer Klasse, Instanz, Eigenschaft oder Methode enthalten. In WMI werden Eigenschaften in einer generierten Klasse mithilfe von Standardqualifizierern wie Read, Write und Key beschrieben. Beispiel: Eine Eigenschaft, die mit einem Read-Qualifizierer modifiziert wird, wird in der generierten Klasse nur mit einem get-Eigenschaftenaccessor definiert. Da eine mit dem Read-Qualifizierer markierte Eigenschaft schreibgeschützt sein soll, ist kein set-Accessor definiert.

  • Eine numerische Eigenschaft kann durch den Values-Qualifizierer und den ValueMaps-Qualifizierer modifiziert werden, um anzugeben, dass sie nur auf bestimmte zulässige Werte festgelegt werden kann. Mit diesem Values-Qualifizierer und ValueMaps-Qualifizierer wird eine Enumerationen im allgemeinen Typsystem generiert, der die Eigenschaft zugeordnet wird.

  • Eine Klasse, die nur eine Instanz aufweisen darf, wird in WMI mit dem Begriff Singleton bezeichnet. Der Standardkonstruktor für eine Singleton-Klasse initialisiert die Klasse daher zur einzigen Instanz dieser Klasse.

  • Eine WMI-Klasse kann über Eigenschaften verfügen, bei denen es sich um Objekte handelt. Wenn Sie für eine solche WMI-Klasse eine stark typisierte Klasse generieren, empfiehlt es sich, für die Typen der eingebetteten Objekteigenschaften stark typisierte Klassen zu generieren. Dies ermöglicht Ihnen den stark typisierten Zugriff auf die eingebetteten Objekte. Beachten Sie, dass der generierte Code den Typ des eingebetteten Objekts möglicherweise nicht erkennen kann. In einem solchen Fall wird im generierten Code ein Kommentar erstellt, in dem Sie auf das Problem hingewiesen werden. Sie können den generierten Code dann ändern, um den Typ der Eigenschaft an den der anderen generierten Klassen anzugleichen.

  • Der Datenwert des CIM_DATETIME-Datentyps kann in WMI entweder einen bestimmten Zeitpunkt (Datum und Uhrzeit) oder ein Zeitintervall darstellen. Wenn der Datenwert einen Zeitpunkt (Datum und Uhrzeit) darstellt, ist der Datentyp in der generierten Klasse DateTime. Wenn der Datenwert ein Zeitintervall darstellt, ist der Datentyp in der generierten Klasse TimeSpan.

Es besteht auch die Möglichkeit, mithilfe der Server Explorer Management Extension (Verwaltungserweiterung für Server-Explorer) in Visual Studio .NET eine stark typisierte Klasse zu generieren.

Weitere Informationen über WMI finden Sie im Thema Windows Management Instrumentation in der Plattform SDK-Dokumentation.

Beispiele

Der folgende Befehl generiert eine verwaltete Klasse in C#-Code für die Win32_LogicalDisk-WMI-Klasse im Root\cimv2-Namespace. Das Tool schreibt die verwaltete Klasse in die Quelldatei, die sich unter c:\disk.cs im ROOT.CIMV2.Win32-Namespace befindet.

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

Im folgenden Codebeispiel wird die programmgesteuerte Verwendung einer generierten Klasse veranschaulicht. Zunächst wird eine Instanz der Klasse aufgelistet und der Pfad ausgegeben. Anschließend wird eine Instanz der generierten Klasse, die initialisiert werden soll, mit einer Instanz von WMI erstellt. Dabei ist Process die für Win32_Process und LogicalDisk die für Win32_LogicalDisk im Root\cimv2-Namespace generierte Klasse.

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

Siehe auch

Referenz

.NET Framework-Tools

System.Management

System.Management.ManagementClass.GetStronglyTypedClassCode

System.CodeDom.Compiler.CodeDomProvider

SDK-Eingabeaufforderung