マネージド コードを使用してConfiguration Manager同期エラーを処理する方法
同期クエリで発生したConfiguration Manager エラーを処理するには、SmsQueryException 例外をキャッチします。 この例外は SMS_Exception] によってもキャッチされるため、同じ catch ブロック内でキャッチし、 SmsConnectionException 例外をキャッチできます。
SMS_Exceptionでキャッチされる例外が SmsQueryException の場合は、それを使用して基になる __ExtendedException
または SMS_ExtendedException
に到達できます。 マネージド SMS プロバイダー ライブラリではこれらの例外がラップされないため、System.Management 名前空間 ManagementException オブジェクトを使用してそれらにアクセスする必要があります。
注:
わかりやすくするために、このドキュメントのほとんどの例では例外を再スローするだけです。 より有益な例外情報が必要な場合は、それらを次の例に置き換えることができます。
同期クエリ エラーを処理するには
SMS プロバイダーにアクセスするためのコードを記述します。
次のコード例を使用して、 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 エラーについて」を参照してください。