マネージド コードを使用してConfiguration Manager同期エラーを処理する方法

同期クエリで発生したConfiguration Manager エラーを処理するには、SmsQueryException 例外をキャッチします。 この例外は SMS_Exception] によってもキャッチされるため、同じ catch ブロック内でキャッチし、 SmsConnectionException 例外をキャッチできます。

SMS_Exceptionでキャッチされる例外が SmsQueryException の場合は、それを使用して基になる __ExtendedException または SMS_ExtendedExceptionに到達できます。 マネージド SMS プロバイダー ライブラリではこれらの例外がラップされないため、System.Management 名前空間 ManagementException オブジェクトを使用してそれらにアクセスする必要があります。

注:

わかりやすくするために、このドキュメントのほとんどの例では例外を再スローするだけです。 より有益な例外情報が必要な場合は、それらを次の例に置き換えることができます。

同期クエリ エラーを処理するには

  1. SMS プロバイダーにアクセスするためのコードを記述します。

  2. 次のコード例を使用して、 SmsQueryException 例外と SmsConnectionException 例外をキャッチします。

次の C# 関数の例では、存在しない SMS_Package パッケージを開こうとします。 例外ハンドラーでは、発生したエラーの種類がコードによって決定され、その情報が表示されます。

サンプル コードの呼び出しについては、「Configuration Manager コード スニペットの呼び出し」を参照してください。

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

このメソッドの例には、次のパラメーターがあります。

パラメーター 説明
connection - WqlConnectionManager プロバイダーへの有効な接続。

コードのコンパイル

この C# の例では、次のものが必要です。

名前空間

System

System.Collections.Generic

System.text

Microsoft。ConfigurationManagement.ManagementProvider

Microsoft。ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.Management

System.ComponentModel

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

System.Management

堅牢なプログラミング

エラー処理の詳細については、「Configuration Manager エラーについて」を参照してください。

関連項目

エラーについてマネージド コードを使用して非同期エラー Configuration Manager処理する方法