Come gestire Configuration Manager errori asincroni usando codice gestito
Per gestire un errore di Configuration Manager generato durante una query asincrona, testare la proprietà Error Exception del RunWorkerCompletedEventArgs
parametro passata al gestore eventi SmsBackgroundWorker.QueryProcessorCompleted. Se Error non null
è , si è verificata un'eccezione e si usa Error per individuare la causa.
Se Error è un'eccezione SmsQueryException, è possibile usarla per accedere all'oggetto sottostante __ExtendedException
o SMS_ExtendedException
. Poiché la libreria del provider SMS gestita non esegue il wrapping di queste eccezioni, sarà necessario utilizzare l'oggetto ManagementException dello spazio dei nomi System.Management per accedervi.
Per gestire un errore di query asincrono
Creare una query asincrona.
Nel gestore dell'evento SmsBackgroundWorker.QueryProcessorCompleted della query asincrona implementare il codice nell'esempio seguente.
Eseguire la query asincrona. Per testare il gestore eccezioni, passare una stringa di query non valida, ad
Select & from &&&
esempio al metodo QueryProcessorBase.ProcessQuery .
Esempio
Nell'esempio seguente viene implementato un gestore eventi SmsBackgroundWorker.QueryProcessorCompleted .
Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice 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...");
}
Il metodo di esempio include i parametri seguenti:
Parametro | Tipo | Descrizione |
---|---|---|
sender |
- Object |
Origine dell'evento. |
e |
- RunWorkerCompletedEventArgs |
Dati dell'evento. Per altre informazioni, vedere Classe RunWorkerCompletedEventArgs. |
Compilazione del codice
Questo esempio C# richiede:
Namespaces
Sistema
System.collections.generic
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.ComponentModel
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Programmazione efficiente
Per altre informazioni sulla gestione degli errori, vedere Informazioni sugli errori di Configuration Manager.