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.
Um eine asynchrone Abfrage für einen Configuration Manager WMI-Namespace (Windows Instrumentation) des Clients auszuführen, erstellen Sie ein ManagementObjectSearcher -Objekt, das eine WQL-Abfrage angibt. Anschließend erstellen Sie einen ManagementOperationObserver , der einen Ereignishandler für jedes Abfrageergebnis und auch für das Ende der Abfrage angibt.
Die asynchrone Abfrage wird ausgeführt, wenn die Get-Methode des ManagementObjectSearcher Objekts mit dem ManagementOperationObserver -Objekt aufgerufen wird.
So führen Sie eine asynchrone Abfrage aus
Richten Sie eine Verbindung mit dem Configuration Manager-Client-WMI-Namespace ein. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit dem Configuration Manager-Client-WMI-Namespace mithilfe von System.Management.
Erstellen Sie ein
ManagementObjectSearcher-Objekt.Erstellen Sie ein
ManagementOperationObserver-Objekt.Fügen Sie dem
ManagementOperationObserver-Objekt eine Methode hinzuObjectReadyEventHandler.Fügen Sie dem
ManagementOperationObservereineCompletedEventHandler-Methode hinzu.Rufen Sie die Get-Methode des
ManagementObjectSearcherObjekts auf, und geben Sie dasManagmentOperationObserverObjekt als Parameter an.Stellen Sie sicher, dass Ihre Anwendung weiterhin ausgeführt wird, während die Abfrage ausgeführt wird.
Beispiel
Im folgenden C#-Codebeispiel werden asynchrone Abfragen nach Komponenten durchgeführt, die auf einem Client installiert sind.
Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen einer WMI-Klassenmethode mithilfe von System.Management.
public void EnumerateInstancesAsync(ManagementScope scope)
{
try
{
// Instantiate an object searcher with the query.
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(scope, new
SelectQuery("CCM_InstalledComponent"));
// Create a results watcher object
// and handler for results and completion.
ManagementOperationObserver results = new
ManagementOperationObserver();
// Attach handler to events for results and completion.
results.ObjectReady += new
ObjectReadyEventHandler(this.NewObject);
results.Completed += new
CompletedEventHandler(this.Done);
Console.WriteLine("Installed Components");
Console.WriteLine("--------------------");
Console.WriteLine();
// Call the asynchronous overload of Get()
// to start the enumeration.
searcher.Get(results);
// Do something else while results
// arrive asynchronously.
while (!this.Completed)
{
System.Threading.Thread.Sleep(1000);
}
this.Reset();
}
catch (ManagementException e)
{
Console.WriteLine("Failed to run query: " + e.Message);
throw;
}
}
private bool isCompleted = false;
private void NewObject(object sender,
ObjectReadyEventArgs obj)
{
try
{
Console.WriteLine("Name: {0}, Version = {1}",
obj.NewObject["DisplayName"],
obj.NewObject["Version"]);
}
catch (ManagementException e)
{
Console.WriteLine("Error: " + e.Message);
}
}
private bool Completed
{
get
{
return isCompleted;
}
}
private void Reset()
{
isCompleted = false;
}
private void Done(object sender,
CompletedEventArgs obj)
{
isCompleted = true;
}
Diese Beispielmethode weist die folgenden Parameter auf:
| Parameter | Typ | Beschreibung |
|---|---|---|
Scope |
ManagementScope |
Ein gültiger ManagementScope. Der Pfad sollte root\ccm sein. |
Kompilieren des Codes
Namespaces
System.
System.Management.
Assembly
System.Management.
Robuste Programmierung
Die Ausnahme, die ausgelöst werden kann, ist System.Management.ManagementException.
Siehe auch
Informationen zur Configuration Manager WMI-Programmierung
Aufrufen einer WMI-Klassenmethode mithilfe von System.Management
Herstellen einer Verbindung mit dem Configuration Manager-Client-WMI-Namespace mithilfe von System.Management
Ausführen einer synchronen Abfrage mithilfe von System.Management
Lesen eines WMI-Objekts mithilfe von System.Management