Code-Beispiel
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
Liste aller Codebeispiele
Definition '.NET Framework Class Library'
Verfügbarkeit der Klasse 'System.Management.ManagementClass'
Übersicht über den FCL-Namensraum 'System.Management'
.NET & Visual Studio Community Portal