Dela via


Hantera Configuration Manager asynkrona fel med hjälp av hanterad kod

Om du vill hantera ett Configuration Manager fel som utlöses under en asynkron fråga testar du parametern RunWorkerCompletedEventArgsError Exception-egenskapen som skickas till händelsehanteraren SmsBackgroundWorker.QueryProcessorCompleted. Om felet inte nullär har ett undantag inträffat och du använder Fel för att identifiera orsaken.

Om Error är en SmsQueryException kan du använda den för att komma till den underliggande __ExtendedException eller SMS_ExtendedException. Eftersom det hanterade SMS-providerbiblioteket inte omsluter dessa undantag måste du använda System.Management-namnområdeshanteringUndantagsobjektet för att komma åt dem.

Hantera ett asynkront frågefel

  1. Skapa en asynkron fråga.

  2. I den asynkrona frågan SmsBackgroundWorker.QueryProcessorCompleted-händelsehanteraren implementerar du koden i följande exempel.

  3. Kör den asynkrona frågan. Om du vill testa undantagshanteraren skickar du en felaktigt utformad frågesträng, till exempel Select & from &&& metoden QueryProcessorBase.ProcessQuery .

Exempel

I följande exempel implementeras en SmsBackgroundWorker.QueryProcessorCompleted-händelsehanterare .

Information om hur du anropar exempelkoden finns i Anropa Configuration Manager kodfragment.

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

Exempelmetoden har följande parametrar:

Parameter Typ Beskrivning
sender - Object Källan till händelsen.
e - RunWorkerCompletedEventArgs Händelsedata.

Mer information finns i Klassen RunWorkerCompletedEventArgs.

Kompilera koden

Det här C#-exemplet kräver:

Namnområden

System

System.Collections.Generic

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.Management

System.ComponentModel

Församlingen

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

System.Management

Robust programmering

Mer information om felhantering finns i Om Configuration Manager fel.

Se även

Om fel