Обработка асинхронных ошибок Configuration Manager с помощью управляемого кода

Чтобы обработать ошибку Configuration Manager, которая возникает во время асинхронного запроса, проверьте RunWorkerCompletedEventArgsсвойство Error Exception параметра, переданное обработчику событий SmsBackgroundWorker.QueryProcessorCompleted. Если значение Error не nullравно , возникло исключение, и для обнаружения причины используется ошибка .

Если ошибка — это SmsQueryException, его можно использовать для получения базового __ExtendedException объекта или SMS_ExtendedException. Так как управляемая библиотека поставщика SMS не содержит оболочку этих исключений, для доступа к ним потребуется использовать объект ManagementException пространства имен System.Management.

Обработка ошибки асинхронного запроса

  1. Создайте асинхронный запрос.

  2. В обработчике событий асинхронного запроса SmsBackgroundWorker.QueryProcessorCompleted реализуйте код, приведенный в следующем примере.

  3. Выполните асинхронный запрос. Чтобы протестировать обработчик исключений, передайте неправильно сформированную строку запроса, например Select & from &&& в метод QueryProcessorBase.ProcessQuery .

Пример

В следующем примере реализуется обработчик событий SmsBackgroundWorker.QueryProcessorCompleted .

Сведения о вызове примера кода см. в разделе Вызов фрагментов кода 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...");  
}  

Метод примера имеет следующие параметры:

Параметр Тип Описание
sender - Object Источник события.
e - RunWorkerCompletedEventArgs Данные события.

Дополнительные сведения см. в разделе Класс RunWorkerCompletedEventArgs.

Компиляция программы

Для этого примера на C# требуется следующее:

Пространства имен

System;

System.Collections.Generic;

System.Text

Майкрософт. ConfigurationManagement.ManagementProvider

Майкрософт. ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.Management

System.ComponentModel

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

System.Management

Надежное программирование

Дополнительные сведения об обработке ошибок см. в разделе Сведения об ошибках Configuration Manager.

См. также

Сведения об ошибках