Поделиться через


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

Чтобы обработать ошибку Configuration Manager, которая возникает в синхронном запросе, перехватывается исключение SmsQueryException. Так как это исключение также перехватывается SMS_Exception], его и исключение SmsConnectionException можно поймать в том же блоке catch.

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

Примечание.

Для ясности большинство примеров в этой документации просто повторно создают исключения. Вы можете заменить их приведенным ниже примером, если требуется более информативная информация об исключении.

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

  1. Напишите код для доступа к поставщику SMS.

  2. Используйте следующий пример кода для перехвата исключений SmsQueryException и SmsConnectionException .

Пример

Следующий пример функции C# пытается открыть несуществующий SMS_Package пакет. В обработчике исключений код определяет, какой тип ошибки был вызван, и отображает сведения о ней.

Сведения о вызове примера кода см. в разделе Вызов фрагментов кода Configuration Manager.

public void ExerciseException(WqlConnectionManager connection)
{
    try
    {

        IResultObject package = connection.GetInstance(@"SMS_Package.PackageID='UNKNOWN'");
        Console.WriteLine("Package Name: " + package["Name"].StringValue);
        Console.WriteLine("Package Description: " + package["Description"].StringValue);

    }
    catch (SmsException e)
    {
        if (e is SmsQueryException)
        {
            SmsQueryException queryException = (SmsQueryException)e;
            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 is SmsConnectionException)
        {
            Console.WriteLine("There was a connection error :" + ((SmsConnectionException)e).Message);
            Console.WriteLine(((SmsConnectionException)e).ErrorCode);
        }
    }
}

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

Параметр Тип Описание
connection - WqlConnectionManager Допустимое подключение к поставщику.

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

Для этого примера на 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.

См. также

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