Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwaltungsobjekte enthalten Eigenschaften, die gelesen oder geändert werden und darüber Methoden offen legen können, die durch Verwaltungsclientanwendungen aufgerufen werden können. Beispielsweise kann ein Datenträgerobjekt eine Format-Methode offen legen, oder ein Dienstobjekt kann über Methoden zum Starten und Stoppen verfügen. Das folgende Beispiel zeigt den Code zum Aufrufen einer Methode für ein Verwaltungsobjekt. In diesem besonderen Fall ist die Methode statisch und wird von der Klasse selbst aufgerufen. In der Regel werden Methoden jedoch auf Instanzen aufgerufen.
using System;
using System.Management;
public class InvokeMethod {
public static void Main() {
//Get the object on which the method will be invoked
ManagementClass processClass = new ManagementClass("Win32_Process");
// Option 1: Invocation using parameter objects
//================================================
//Get an input parameters object for this method
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
//Fill in input parameter values
inParams["CommandLine"] = "calc.exe";
//Execute the method
ManagementBaseObject outParams = processClass.InvokeMethod ("Create", inParams, null);
//Display results
//Note: The return code of the method is provided in the "returnValue" property of the outParams object
Console.WriteLine("Creation of calculator process returned: " + outParams["returnValue"]);
Console.WriteLine("Process ID: " + outParams["processId"]);
// Option 2: Invocation using args array
//=======================================
//Create an array containing all arguments for the method
object[] methodArgs = {"notepad.exe", null, null, 0};
//Execute the method
object result = processClass.InvokeMethod ("Create", methodArgs);
//Display results
Console.WriteLine ("Creation of process returned: " + result);
Console.WriteLine ("Process id: " + methodArgs[3]);
}
}
Methoden können auch asynchron ausgeführt werden. Das folgende Beispiel zeigt, wie dies erreicht werden kann:
using System;
using System.Management;
public class InvokeMethodAsync {
public static void Main() {
//Get the object on which the method will be invoked
ManagementClass processClass = new ManagementClass("Win32_Process");
// Create a results and completion handler
ManagementOperationObserver handler = new ManagementOperationObserver();
ObjectReadyHandler objHandler = new ObjectReadyHandler();
handler.ObjectReady += new ObjectReadyEventHandler(objHandler.NewObject);
// Invoke method asynchronously
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = "calc.exe";
processClass.InvokeMethod(handler, "Create", inParams, null);
//Do something while method is executing
while(!objHandler.IsComplete) {
System.Threading.Thread.Sleep(1000);
}
//After execution is completed, display results
Console.WriteLine("Creation of calculator process returned: " + objHandler.ReturnObject["returnValue"]);
Console.WriteLine("Process ID: " + objHandler.ReturnObject["processId"]);
}
public class ObjectReadyHandler {
private bool isComplete = false;
private ManagementBaseObject returnObject;
//Delegate called when the method completes and results are available
public void NewObject(object sender, ObjectReadyEventArgs e) {
Console.WriteLine("New Object arrived!");
ReturnObject = e.NewObject;
isComplete = true;
}
//Property allows accessing the result object in the main function
public ManagementBaseObject ReturnObject {
get {
return returnObject;
}
}
//Used to determine whether the method execution has completed
public bool IsComplete {
get {
return isComplete;
}
}
}
}
Siehe auch
Zugreifen auf Verwaltungsdaten mit Hilfe von System.Management | Abrufen von Verwaltungsobjektauflistungen | Abfragen von Verwaltungsdaten | Abonnieren und Verwenden von Verwaltungsereignissen | Remote- und Verbindungsoptionen | Verwenden von Objekten mit starkem Typ