Jak obsługiwać błędy asynchroniczne Configuration Manager przy użyciu kodu zarządzanego
Aby obsłużyć błąd Configuration Manager zgłaszany podczas zapytania asynchronicznego, należy przetestować RunWorkerCompletedEventArgs
właściwość Wyjątek błędu, która jest przekazywana do programu obsługi zdarzeń SmsBackgroundWorker.QueryProcessorCompleted. Jeśli błąd nie null
jest , wystąpił wyjątek i użyjesz błędu , aby odnaleźć przyczynę.
Jeśli błąd jest obiektem SmsQueryException, możesz go użyć, aby przejść do obiektu bazowego __ExtendedException
lub SMS_ExtendedException
. Ponieważ zarządzana biblioteka dostawcy programu SMS nie zawija tych wyjątków, należy użyć obiektu System.Management namespace ManagementException , aby uzyskać do nich dostęp.
Aby obsłużyć błąd zapytania asynchronicznego
Utwórz zapytanie asynchroniczne.
W zapytaniu asynchronicznym SmsBackgroundWorker.QueryProcessorCompleted , zaimplementuj kod w poniższym przykładzie.
Uruchom zapytanie asynchroniczne. Aby przetestować procedurę obsługi wyjątków, przekaż nieprawidłowo sformułowany ciąg zapytania, taki jak
Select & from &&&
metoda QueryProcessorBase.ProcessQuery .
Przykład
Poniższy przykład implementuje program obsługi zdarzeń SmsBackgroundWorker.QueryProcessorCompleted .
Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz Wywoływanie fragmentów kodu Configuration Manager.
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...");
}
Przykładowa metoda ma następujące parametry:
Parametr | Wpisać | Opis |
---|---|---|
sender |
- Object |
Źródło zdarzenia. |
e |
- RunWorkerCompletedEventArgs |
Dane zdarzenia. Aby uzyskać więcej informacji, zobacz RunWorkerCompletedEventArgs Class (Klasa RunWorkerCompletedEventArgs). |
Kompilowanie kodu
Ten przykład języka C# wymaga:
Obszary nazw
System
System.collections.generic
System.text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.componentmodel
Zestawu
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Niezawodne programowanie
Aby uzyskać więcej informacji na temat obsługi błędów, zobacz Informacje o błędach Configuration Manager.