Comment gérer les erreurs asynchrones Configuration Manager à l’aide de code managé
Pour gérer une erreur Configuration Manager qui est générée pendant une requête asynchrone, vous testez la RunWorkerCompletedEventArgs
propriété Exception d’erreur du paramètre qui est passée au gestionnaire d’événements SmsBackgroundWorker.QueryProcessorCompleted. Si l’erreur n’est pas null
, une exception s’est produite et vous utilisez Error pour découvrir la cause.
Si Error est une SmsQueryException, vous pouvez l’utiliser pour accéder au sous-jacent __ExtendedException
ou SMS_ExtendedException
à . Étant donné que la bibliothèque fournisseur SMS managée n’encapsule pas ces exceptions, vous devez utiliser l’objet ManagementException de l’espace de noms System.Management pour y accéder.
Pour gérer une erreur de requête asynchrone
Créez une requête asynchrone.
Dans le gestionnaire d’événements SmsBackgroundWorker.QueryProcessorCompleted de requête asynchrone, implémentez le code dans l’exemple suivant.
Exécutez la requête asynchrone. Pour tester le gestionnaire d’exceptions, transmettez une chaîne de requête mal formée telle qu’à
Select & from &&&
la méthode QueryProcessorBase.ProcessQuery .
Exemple
L’exemple suivant implémente un gestionnaire d’événements SmsBackgroundWorker.QueryProcessorCompleted .
Pour plus d’informations sur l’appel de l’exemple de code, consultez Appel d’extraits de code 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...");
}
L’exemple de méthode a les paramètres suivants :
Paramètre | Type | Description |
---|---|---|
sender |
- Object |
Source de l'événement. |
e |
- RunWorkerCompletedEventArgs |
Données d’événement. Pour plus d’informations, consultez RunWorkerCompletedEventArgs, classe. |
Compilation du code
Cet exemple C# nécessite :
Espaces de noms
Système
System.Collections.Generic
System.Text
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
System.Management
System.ComponentModel
Assembly
microsoft.configurationmanagement.managementprovider
adminui.wqlqueryengine
System.Management
Programmation robuste
Pour plus d’informations sur la gestion des erreurs, consultez À propos des erreurs Configuration Manager.