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

  1. Créez une requête asynchrone.

  2. Dans le gestionnaire d’événements SmsBackgroundWorker.QueryProcessorCompleted de requête asynchrone, implémentez le code dans l’exemple suivant.

  3. 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.

Voir aussi

À propos des erreurs