Udostępnij za pośrednictwem


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 nulljest , 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

  1. Utwórz zapytanie asynchroniczne.

  2. W zapytaniu asynchronicznym SmsBackgroundWorker.QueryProcessorCompleted , zaimplementuj kod w poniższym przykładzie.

  3. 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.

Zobacz też

Informacje o błędach