マネージド コードを使用して非同期エラー Configuration Manager処理する方法
非同期クエリ中に発生するConfiguration Manager エラーを処理するには、SmsBackgroundWorker.QueryProcessorCompleted イベント ハンドラーに渡されるパラメーター Error Exception プロパティをテストRunWorkerCompletedEventArgs
します。
Error が ではないnull
場合は、例外が発生し、Error を使用して原因を検出します。
Error が SmsQueryException の場合は、それを使用して基になる __ExtendedException
または SMS_ExtendedException
にアクセスできます。 マネージド SMS プロバイダー ライブラリではこれらの例外がラップされないため、System.Management 名前空間 ManagementException オブジェクトを使用してそれらにアクセスする必要があります。
非同期クエリ エラーを処理するには
非同期クエリを作成します。
非同期クエリ SmsBackgroundWorker.QueryProcessorCompleted イベント ハンドラーで、次の例のコードを実装します。
非同期クエリを実行します。 例外ハンドラーをテストするには、 などの
Select & from &&&
不適切な形式のクエリ文字列を QueryProcessorBase.ProcessQuery メソッドに渡します。
例
次の例では、 SmsBackgroundWorker.QueryProcessorCompleted イベント ハンドラーを実装しています。
サンプル コードの呼び出しについては、「Configuration Manager コード スニペットの呼び出し」を参照してください。
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...");
}
このメソッドの例には、次のパラメーターがあります。
パラメーター | 型 | 説明 |
---|---|---|
sender |
- Object |
イベントのソース。 |
e |
- RunWorkerCompletedEventArgs |
イベント データ。 詳細については、「 RunWorkerCompletedEventArgs クラス」を参照してください。 |
コードのコンパイル
この 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 エラーについて」を参照してください。