Synchrone fouten in Configuration Manager afhandelen met behulp van beheerde code

Als u een Configuration Manager-fout wilt afhandelen die wordt gegenereerd in een synchrone query, vangt u de SmsQueryException-uitzondering. Omdat deze uitzondering ook wordt onderschept door SMS_Exception], kunt u deze en de uitzondering SmsConnectionException in hetzelfde catch-blok vangen.

Als de uitzondering die in een SMS_Exception wordt opgevangen, een SmsQueryException is, kunt u deze gebruiken om naar de onderliggende __ExtendedException of SMS_ExtendedException. Omdat deze uitzonderingen niet zijn opgenomen in de beheerde SMS-providerbibliotheek, moet u het object System.Management-naamruimte ManagementException gebruiken om toegang te krijgen tot deze uitzonderingen.

Opmerking

Voor alle duidelijkheid: de meeste voorbeelden in deze documentatie gooien uitzonderingen gewoon opnieuw. U kunt deze vervangen door het volgende voorbeeld als u meer informatieve informatie over uitzonderingen wilt.

Een fout in een synchrone query afhandelen

  1. Code schrijven om toegang te krijgen tot de sms-provider.

  2. Gebruik de volgende voorbeeldcode om de uitzonderingen SmsQueryException en SmsConnectionException te vangen.

Voorbeeld

Met de volgende voorbeeldfunctie C# wordt geprobeerd een niet-bestaand SMS_Package pakket te openen. In de uitzonderings-handler bepaalt de code welk type fout is gegenereerd en wordt de bijbehorende informatie weergegeven.

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

public void ExerciseException(WqlConnectionManager connection)
{
    try
    {

        IResultObject package = connection.GetInstance(@"SMS_Package.PackageID='UNKNOWN'");
        Console.WriteLine("Package Name: " + package["Name"].StringValue);
        Console.WriteLine("Package Description: " + package["Description"].StringValue);

    }
    catch (SmsException e)
    {
        if (e is SmsQueryException)
        {
            SmsQueryException queryException = (SmsQueryException)e;
            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 is SmsConnectionException)
        {
            Console.WriteLine("There was a connection error :" + ((SmsConnectionException)e).Message);
            Console.WriteLine(((SmsConnectionException)e).ErrorCode);
        }
    }
}

De voorbeeldmethode heeft de volgende parameters:

Parameter Type Beschrijving
connection - WqlConnectionManager Een geldige verbinding met de provider.

De code compileren

Dit C#-voorbeeld vereist:

Naamruimten

Systeem

System.Collections.Generic

System.Text

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.Management

System.ComponentModel

bijeenkomst

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

System.Management

Robuust programmeren

Zie Info over fouten in Configuration Manager voor meer informatie over foutafhandeling.

Zie ook

Informatie over foutenAsynchrone fouten in Configuration Manager afhandelen met behulp van beheerde code