Delen via


Asynchrone fouten Configuration Manager afhandelen met behulp van beheerde code

Als u een Configuration Manager fout wilt afhandelen die wordt gegenereerd tijdens een asynchrone query, test u de RunWorkerCompletedEventArgs parameter Error Exception-eigenschap die wordt doorgegeven aan de gebeurtenis-handler SmsBackgroundWorker.QueryProcessorCompleted. Als Fout niet nullis, is er een uitzondering opgetreden en gebruikt u Fout om de oorzaak te detecteren.

Als Error een SmsQueryException is, kunt u deze gebruiken om naar de onderliggende __ExtendedException of SMS_ExtendedExceptionte gaan. Omdat de bibliotheek van de beheerde SMS-provider deze uitzonderingen niet verpakt, moet u het object System.Management-naamruimte ManagementException gebruiken om ze te openen.

Een asynchrone queryfout afhandelen

  1. Maak een asynchrone query.

  2. Implementeer de code in het volgende voorbeeld in de asynchrone query SmsBackgroundWorker.QueryProcessorCompleted .

  3. Voer de asynchrone query uit. Als u de uitzonderingshandler wilt testen, geeft u een slecht gevormde querytekenreeks door, zoals Select & from &&& aan de methode QueryProcessorBase.ProcessQuery .

Voorbeeld

In het volgende voorbeeld wordt een gebeurtenis-handler SmsBackgroundWorker.QueryProcessorCompleted geïmplementeerd .

Zie Aanroepen Configuration Manager codefragmenten voor meer informatie over het aanroepen van de voorbeeldcode.

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

De voorbeeldmethode heeft de volgende parameters:

Parameter Type Beschrijving
sender - Object De bron van de gebeurtenis.
e - RunWorkerCompletedEventArgs De gebeurtenisgegevens.

Zie RunWorkerCompletedEventArgs-klasse voor meer informatie.

De code compileren

Voor dit C#-voorbeeld is het volgende vereist:

Naamruimten

Systeem

System.Collections.Generic

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.Management

System.ComponentModel

Vergadering

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

System.Management

Robuust programmeren

Zie Over Configuration Manager fouten voor meer informatie over foutafhandeling.

Zie ook

Over fouten