Sie sind hier: Startseite
 Liste aller Codebeispiele

Diese Routine erzeugt eine früh bindende .NET-Klasse für eine WMI-Klasse

Ein Beispiel zum Einsatz der Klasse System.Management.ManagementClass aus der .NET-Klassenbibliothek.

Autor: Dr. Holger Schwichtenberg 

Beschreibung

Während die Arbeit mit dem Meta-Objektmodell noch die einzige Möglichkeit in .NET Beta1 war, hat Microsoft zur Beta2 die Rufe der geplagten WMI-Entwickler erhört und eine Möglichkeit geschaffen, WMI-Objekte auch mit früher Bindung zu nutzen. Der Vorgang heißt Management Strongly Typed Class Generation.

Die Klasse ManagementClass aus dem Meta-Objektmodell bietet eine Methode GetStronglyTypedClassCode(), die für eine beliebige WMI-Klasse den Quellcode für eine Wrapper-Klasse in Visual Basic .NET, C# oder JScript .NET erzeugt. Diese Wrapper-Klasse kann man dann seinen eigenen Projekten hinzufügen und fortan ist ein Zugriff auf die WMI-Klasse wie auf jede andere .NET-Klasse möglich. Im Inneren nutzt die Wrapper-Klasse das WMI-Meta-Objektmodell.

Wohlgemerkt steigert dieses Vorgehen nicht die Performance: Dieser Weg ist keine neue Programmierschnittstelle zu WMI, sondern nur ein Code-Generator, der es dem Programmierer leichter macht.

Erzeugung einer Wrapper-Klasse
Es gibt zwei Wege, die Erzeugung einer Wrapper-Klasse anzustoßen:
1. per Programmcode
2. über das Kommandozeilen-Tool mgmtclassgen.exe

Erzeugung eines Wrappers per Programmcode
Ein Zweizeiler reicht: Bei der Instanziierung der ManagementClass wird die zu wrappende WMI-Klasse festgelegt. GetStronglyTypedClassCode() erwartet dann nur eine Sprachangabe und eine Ausgabedatei.

Programmcodebeispiele Visual Basic .NET (VB.NET)

' ============================
' .NET-Code-Beispiel in Visual Basic .NET
' Diese Routine erzeugt eine früh bindende .NET-Klasse
' für eine WMI-Klasse
' (C) Holger@Schwichtenberg.de
' ============================
Sub Wmidirekterzeugen()
Dim mc As New ManagementClass(Nothing, _
"Win32_LogicalDisk", Nothing)
mc.GetStronglyTypedClassCode(CodeLanguage.VB, _
"H:\code\Logicaldisk.vb", String.Empty)
End Sub

Programmcodebeispiele CSharp (C#)

using System;
using System.Management;

namespace FCLBuch._SystemManagement {

public class SamplesWMIAllgemein {
public void WMI_NeueKlasse() {

// Anlegen einer neuen Klasse
ManagementClass newClass = new ManagementClass(@"root\default", String.Empty, null);
newClass["Class"] = "TestWql";
newClass.Put();
}
}
}

Querverweise

 Definition '.NET Framework Class Library'  Verfügbarkeit der Klasse 'System.Management.ManagementClass'  Übersicht über den FCL-Namensraum 'System.Management'  .NET & Visual Studio Community Portal