Como Lidar com Erros Assíncronos do Configuration Manager ao Utilizar o Código Gerido
Para lidar com um erro do Gestor de Configuração que é levantado durante uma consulta assíncronea, testa a RunWorkerCompletedEventArgs
propriedade De exceção de erro de parâmetro que é transmitida para o manipulador de eventos SmsBackgroundWorker.QueryProcessorCompleted. Se o Erro não null
for, ocorreu uma exceção e utiliza-se o Erro para descobrir a causa.
Se O Erro for um SmsQueryException,pode usá-lo para chegar ao subjacente ou __ExtendedException
SMS_ExtendedException
. Como a biblioteca de fornecedores de SMS gerida não encerra estas exceções, terá de utilizar o objeto System.Managementspace ManagementException para aceder às mesmos.
Para lidar com um erro de consulta assíncronos
Crie uma consulta assíncronea.
Na consulta assíncronea SmsBackgroundWorker.QueryProcessorCompleted event handler, implemente o código no seguinte exemplo.
Executar a consulta assíncronos. Para testar o manipulador de exceções, passe uma cadeia de consulta mal formada, como
Select & from &&&
o método QueryProcessorBase.ProcessQuery.
Exemplo
O exemplo a seguir implementa um manipulador de eventos SmsBackgroundWorker.QueryProcessorCompleted.
Para obter informações sobre a chamada do código de amostra, consulte o Código de Identificação do Gestor de Chamadas.
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...");
}
O método exemplo tem os seguintes parâmetros:
Parâmetro | Tipo | Description |
---|---|---|
sender |
- Object |
A origem do evento. |
e |
- RunWorkerCompletedEventArgs |
Os dados do evento. Para mais informações, consulte a Classe RunWorkerCompletedEventArgs. |
A Compilar o Código
Este exemplo C# requer:
Espaços de nomes
Sistema
System.Collections.Generic
System.Text
Microsoft.ConfigurationManagement.ManagementProvider
Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine
Sistema.Gestão
System.ComponentModel
Assemblagem
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
Sistema.Gestão
Programação Robusta
Para obter mais informações sobre o tratamento de erros, consulte Sobre erros do Gestor de Configuração.