プロバイダーのデバッグ
プロバイダーは、アプリケーション内で実行されている "分離プロバイダー" でない限り、Winmgmt.exe プロセスで Svchost.exe を使用してではなく、Wmiprvse.exe プロセスで読み込まれます。 詳細については、「プロバイダーのホスティングとセキュリティ」を参照してください。
ブレークポイントで停止すると、Visual Studio デバッガーはプロバイダー ホスト プロセス全体 (通常は共有ホスト Wmiprvse.exe) をフリーズします。 これにより、WMI サーバー エクスプローラー拡張機能など、そのプロセスでホストされている他のコンポーネントの操作ができなくなります。 プロバイダーを呼び出すクライアント アプリケーションもブロックされます。 プロバイダーが WMI サービス プロセス (Winmgmt.exe) に読み込まれるため、Windows 2000 以前では発生する問題が悪化します。
別のインスタンスで WMI サーバー エクスプローラーを実行すると、Visual Studio IDE はフリーズせず、ブレークポイントを解放できます。 ブレークポイントで停止するとプロバイダーをホストしているプロセスのみがフリーズするように、開発フェーズ中はプロバイダーを別のホスティング プロセスで実行することをお勧めします。 WMI の他の機能は、WMI サーバー エクスプローラーおよびその他の WMI ベースのアプリケーションまたはスクリプトから引き続きアクセスできます。 また、プロバイダーがクラッシュしても、同じホスト プロセスに読み込まれた他のプロバイダーの操作には影響しません。
プロバイダーを独自のホスト プロセスに読み込むには、プロバイダーの登録を変更して __Win32Provider.HostingModel プロパティを NetworkServiceHost:[MyProvider]
に設定します。MyProvider には、プロバイダーを一意に識別する任意の文字列を指定できます。 たとえば、__Win32Provider.ClsId 値を使用します。 プロバイダーをリリースする準備ができたら、__Win32Provider.HostingModel を目的の値 (NetworkServiceHost など) に戻します。
プロバイダーの読み込みをデバッグしていない場合は、MSFT_Providers クラスの Load メソッドを呼び出して、プロバイダーで強制的に読み込んでから、DLL が読み込まれた Wmiprvse.exe プロセスにアタッチし、必要に応じてデバッグできます。
関連トピック