Como lidar com erros síncronos do Configuration Manager usando código gerenciado

Para manipular um erro do Configuration Manager gerado em uma consulta síncrona, você pode capturar a exceção SmsQueryException. Como essa exceção também é SMS_Exception], você pode interceptá-la e a exceção SmsConnectionException no mesmo bloco de captura.

Se a exceção que for capturada em um SMS_Exception for um SmsQueryException, você poderá usá-la para chegar ao subjacente __ExtendedException ou SMS_ExtendedException . Como a biblioteca do Provedor de SMS gerenciado não quebra essas exceções, você precisará usar o objeto System.Management namespace ManagementException para acessá-las.

Observação

Para esclarecer, a maioria dos exemplos nesta documentação simplesmente lança exceções. Você pode substituí-los pelo exemplo a seguir se quiser informações de exceção mais informativas.

Para manipular um erro de consulta síncrona

  1. Escreva código para acessar o Provedor de SMS.

  2. Use o código de exemplo a seguir para capturar as exceções SmsQueryException e SmsConnectionException.

Exemplo

A função C# exemplo a seguir tenta abrir um pacote SMS_Package inexistente. No manipulador de exceção, o código determina que tipo de erro foi gerado e exibe suas informações.

Para obter informações sobre como chamar o código de exemplo, consulte Calling Configuration Manager Code Snippets.

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);  
        }  
    }  
}  

O método example tem os seguintes parâmetros:

Parâmetro Tipo Descrição
connection - WqlConnectionManager Uma conexão válida com o provedor.

Compilando o código

Este C# exemplo requer:

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

Programação robusta

Para obter mais informações sobre o tratamento de erros, consulte About Configuration Manager Errors.

Confira também

Sobre erros Como lidar com erros assíncronos do Gerenciador de Configurações usando código gerenciado