Sdílet prostřednictvím


Zpracování asynchronních chyb Configuration Manager pomocí spravovaného kódu

Chcete-li zpracovat chybu Configuration Manager, která je vyvolána během asynchronního dotazu, otestujte RunWorkerCompletedEventArgs parametr Error Exception vlastnost, která je předána SmsBackgroundWorker.QueryProcessorCompleted obslužné rutině události. Pokud chyba není null, došlo k výjimce a pomocí funkce Chyba zjistíte příčinu.

Pokud je Chybavýjimka SmsQueryException, můžete ji použít k získání základní __ExtendedExceptionSMS_ExtendedExceptionnebo . Vzhledem k tomu, že spravovaná knihovna poskytovatele serveru SMS nezabalí tyto výjimky, budete muset pro přístup k nim použít objekt System.Management oboru názvů ManagementException .

Zpracování chyby asynchronního dotazu

  1. Vytvořte asynchronní dotaz.

  2. V obslužné rutině události asynchronního dotazu SmsBackgroundWorker.QueryProcessorCompleted implementujte kód v následujícím příkladu.

  3. Spusťte asynchronní dotaz. Chcete-li otestovat obslužnou rutinu výjimky, předejte chybně formátovaný řetězec dotazu, například Select & from &&&QueryProcessorBase.ProcessQuery metoda.

Příklad

Následující příklad implementuje obslužnou rutinu události SmsBackgroundWorker.QueryProcessorCompleted .

Informace o volání ukázkového kódu najdete v tématu Volání Configuration Manager fragmentů kódu.

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...");
}

Ukázková metoda má následující parametry:

Parametr Typ Popis
sender - Object Zdroj události.
e - RunWorkerCompletedEventArgs Data události.

Další informace najdete v tématu RunWorkerCompletedEventArgs – třída.

Kompilace kódu

Tento příklad jazyka C# vyžaduje:

Obory názvů

Systému

System.collections.generic

System.text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.management

System.componentmodel

Sestavení

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

System.management

Robustní programování

Další informace o zpracování chyb najdete v tématu Informace o chybách Configuration Manager.

Viz taky

Informace o chybách