Cómo controlar Configuration Manager errores asincrónicos mediante código administrado
Para controlar un error de Configuration Manager que se genera durante una consulta asincrónica, pruebe la RunWorkerCompletedEventArgs
propiedad Error Exception del parámetro que se pasa al controlador de eventos SmsBackgroundWorker.QueryProcessorCompleted. Si Error no null
es , se ha producido una excepción y se usa Error para detectar la causa.
Si Error es una excepción SmsQueryException, puede usarla para llegar al subyacente __ExtendedException
o SMS_ExtendedException
. Dado que la biblioteca de proveedores de SMS administrada no ajusta estas excepciones, deberá usar el objeto ManagementException del espacio de nombres System.Management para acceder a ellas.
Para controlar un error de consulta asincrónica
Cree una consulta asincrónica.
En el controlador de eventos SmsBackgroundWorker.QueryProcessorCompleted de la consulta asincrónica, implemente el código en el ejemplo siguiente.
Ejecute la consulta asincrónica. Para probar el controlador de excepciones, pase una cadena de consulta con formato incorrecto, como
Select & from &&&
al método QueryProcessorBase.ProcessQuery .
Ejemplo
En el ejemplo siguiente se implementa un controlador de eventos SmsBackgroundWorker.QueryProcessorCompleted .
Para obtener información sobre cómo llamar al código de ejemplo, vea Llamar a fragmentos de código de 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...");
}
El método de ejemplo tiene los parámetros siguientes:
Parámetro | Tipo | Descripción |
---|---|---|
sender |
- Object |
Origen del evento. |
e |
- RunWorkerCompletedEventArgs |
Los datos del evento. Para obtener más información, vea RunWorkerCompletedEventArgs (Clase). |
Compilar el código
Este ejemplo de C# requiere:
Espacios de nombres
System
System.Collections.Generic
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.ComponentModel
Ensamblado
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Programación sólida
Para obtener más información sobre el control de errores, consulte Acerca de los errores de Configuration Manager.