WMI クライアント アプリケーションのトラブルシューティング
WMI には、WMI プロバイダーを使用するクライアント アプリケーションのトラブルシューティングを行うためのクラスのセットが含まれています。 トラブルシューティング イベント クラスは WMI イベント クラスと結合されるため、取り込まれたトラブルシューティング イベントのログを使用してアプリケーションの実行を追跡できます。
次の一覧には、トラブルシューティング イベント クラスの例が含まれています。
Msft_WmiProvider_ExecMethodAsyncEvent_Pre
WMI がプロバイダーで IWbemServices::ExecMethodAsync() を呼び出す前に発生します。
Msft_WmiProvider_ExecMethodAsyncEvent_Post
WMI がプロバイダーで IWbemServices::ExecMethodAsync() を呼び出した後に発生します。
次の手順は、アプリケーションの実行のトラブルシューティングを行う方法を示しています。
WMI のトラブルシューティングを設定するには
- WMI ログ イベント コンシューマーを使用する MOF ファイルを作成してコンパイルします。
- クライアント アプリケーションを実行します。
- すべてのプロバイダー操作およびエラー イベントのトラブルシューティング ログ ファイルを表示し、ログを分析して、発生しているクライアントの問題を診断します。
もう 1 つのトラブルシューティング方法は、root\cimv2 名前空間に MSFT_Providers を列挙して、現在コンピューター キャッシュ内にあるプロバイダーの一覧を表示することです。 このクラスには、デバッグまたはセットアップの目的でプロバイダーの読み込みとアンロードを行えるメソッドがあります。
次のコード例では、WMI ログ イベント コンシューマーを使用して親イベント クラスのすべてのイベントを取り込み、すべてのプロバイダー操作イベントを取り込みます。
#pragma autorecover
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $Filter
{
Name = "ProviderOperationEvents" ;
EventNamespace = "root\\cimv2" ;
Query = "SELECT * FROM MSFT_WmiProvider_OperationEvent" ;
QueryLanguage = "WQL" ;
} ;
Instance of LogFileEventConsumer as $Consumer
{
Name = "ProviderOperationEvents" ;
FileName = "C:\\test.txt" ;
Text = "Operation - %__TEXT%" ;
} ;
instance of __FilterToConsumerBinding
{
Filter = $Filter ;
Consumer = $Consumer ;
MaintainSecurityContext = TRUE ;
} ;
エラー メッセージがプロバイダーの読み込みエラーを示す場合は、MSFT_WmiProvider_LoadOperationFailureEvent を使用して、エラーの原因となったプロバイダーを特定します。
関連トピック