Como lidar com Configuration Manager erros síncronos usando código gerenciado
Para lidar com um erro Configuration Manager que é gerado em uma consulta síncrona, você captura a exceção SmsQueryException. Como essa exceção também é capturada por SMS_Exception], você pode pegá-la e a exceção SmsConnectionException no mesmo bloco de captura.
Se a exceção que é capturada em um SMS_Exception for um SmsQueryException, você poderá usá-la para chegar ao subjacente __ExtendedException
ou SMS_ExtendedException
. Como a biblioteca gerenciada do Provedor de SMS não encerra essas exceções, você precisará usar o objeto System.Management namespace ManagementException para acessá-las.
Observação
Para obter clareza, a maioria dos exemplos nesta documentação simplesmente lança exceções. Você pode substituí-los pelo exemplo a seguir se desejar mais informações de exceção informativas.
Para lidar com um erro de consulta síncrono
Escreva código para acessar o Provedor de SMS.
Use o código de exemplo a seguir para capturar as exceções SmsQueryException e SmsConnectionException .
Exemplo
A função de exemplo C# a seguir tenta abrir um pacote inexistente SMS_Package
. 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 Chamando Configuration Manager Snippets de Código.
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 de exemplo 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 exemplo de C# 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 Sobre erros de Configuration Manager.
Confira também
Sobre errosComo lidar com Configuration Manager erros assíncronos usando código gerenciado