Behandeln von Configuration Manager asynchronen Fehlern mithilfe von verwaltetem Code
Um einen Configuration Manager Fehler zu behandeln, der während einer asynchronen Abfrage ausgelöst wird, testen Sie den RunWorkerCompletedEventArgs
Parameter Error Exception-Eigenschaft, der an den SmsBackgroundWorker.QueryProcessorCompleted-Ereignishandler übergeben wird. Wenn Error nicht null
ist, ist eine Ausnahme aufgetreten, und Sie verwenden Fehler , um die Ursache zu ermitteln.
Wenn Error eine SmsQueryException ist, können Sie sie verwenden, um auf die zugrunde liegende __ExtendedException
oder SMS_ExtendedException
zu gelangen. Da die verwaltete SMS-Anbieterbibliothek diese Ausnahmen nicht umschließt, müssen Sie das System.ManagementException-Namespaceobjekt verwenden, um darauf zuzugreifen.
So behandeln Sie einen asynchronen Abfragefehler
Erstellen Sie eine asynchrone Abfrage.
Implementieren Sie im asynchronen Abfrageereignishandler SmsBackgroundWorker.QueryProcessorCompleted den Code im folgenden Beispiel.
Führen Sie die asynchrone Abfrage aus. Um den Ausnahmehandler zu testen, übergeben Sie eine falsch formatierte Abfragezeichenfolge,
Select & from &&&
z. B. an die QueryProcessorBase.ProcessQuery-Methode .
Beispiel
Im folgenden Beispiel wird ein SmsBackgroundWorker.QueryProcessorCompleted-Ereignishandler implementiert.
Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen von Configuration Manager Codeausschnitten.
void bw1_QueryProcessorCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
Console.WriteLine("There was an Error");
if (e.Error is SmsQueryException)
{
SmsQueryException queryException = (SmsQueryException)e.Error;
Console.WriteLine(queryException.Message);
// Get either the __ExtendedStatus or SMS_ExtendedStatus object and display various properties.
ManagementException mgmtExcept = queryException.InnerException as ManagementException;
if (mgmtExcept != null)
{
if (string.Equals(mgmtExcept.ErrorInformation.ClassPath.ToString(), "SMS_ExtendedStatus", StringComparison.OrdinalIgnoreCase) == true)
{
Console.WriteLine("Configuration Manager provider exception");
}
else if (string.Equals(mgmtExcept.ErrorInformation.ClassPath.ToString(), "__ExtendedStatus", StringComparison.OrdinalIgnoreCase) == true)
{
Console.WriteLine("WMI exception");
}
Console.WriteLine(mgmtExcept.ErrorCode.ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["ParameterInfo"].ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["Operation"].ToString());
Console.WriteLine(mgmtExcept.ErrorInformation["ProviderName"].ToString());
}
}
if (e.Error is SmsConnectionException)
{
Console.WriteLine("There was a connection error :" + ((SmsConnectionException)e.Error).Message);
Console.WriteLine(((SmsConnectionException)e.Error).ErrorCode);
}
}
Console.WriteLine("Done...");
}
Die Beispielmethode verfügt über die folgenden Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
sender |
- Object |
Die Quelle des Ereignisses. |
e |
- RunWorkerCompletedEventArgs |
Die Ereignisdaten. Weitere Informationen finden Sie unter RunWorkerCompletedEventArgs-Klasse. |
Kompilieren des Codes
Für dieses C#-Beispiel ist Folgendes erforderlich:
Namespaces
System
System.Collections.Generic
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.ComponentModel
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Robuste Programmierung
Weitere Informationen zur Fehlerbehandlung finden Sie unter Informationen zu Configuration Manager Fehlern.