Come gestire gli errori asincroni di Configuration Manager tramite codice gestito

Per gestire un errore di Configuration Manager generato durante una query asincrona, testare la RunWorkerCompletedEventArgs proprietà Error Exception del parametro passata al gestore eventi SmsBackgroundWorker.QueryProcessorCompleted. Se l'errore non nullè , si è verificata un'eccezione e usare Errore per individuare la causa.

Se Error è un'eccezione SmsQueryException, è possibile utilizzarla per accedere al metodo sottostante __ExtendedException o SMS_ExtendedException. Poiché la libreria del provider SMS gestito 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 asincrona

  1. Creare una query asincrona.

  2. Nel gestore eventi di query asincrona SmsBackgroundWorker.QueryProcessorCompleted implementa il codice nell'esempio seguente.

  3. Eseguire la query asincrona. Per testare il gestore eccezioni, passare una stringa di query con formato non corretto, ad esempio Select & from &&& al metodo QueryProcessorBase.ProcessQuery .

Esempio

L'esempio seguente implementa un gestore eventi SmsBackgroundWorker.QueryProcessorCompleted .

Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice di 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 sull'evento.

Per altre informazioni, vedere Classe RunWorkerCompletedEventArgs.

Compilazione del codice

Questo esempio di C# richiede:

Spazi dei nomi

Sistema

System.Collections.Generic

System.Text

Microsoft.ConfigurationManagementManagementProvider

Microsoft.ConfigurationManagementManagementProvider.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