Condividi tramite


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

  1. Creare una query asincrona.

  2. Nel gestore dell'evento SmsBackgroundWorker.QueryProcessorCompleted della query asincrona implementare il codice nell'esempio seguente.

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

Vedere anche

Informazioni sugli errori