0

私は通常、ほとんどの wmi クエリを asnyc で実行していますが、通常は問題ありません。すべての特権と必要な dcom セキュリティ (リモート クエリ用) を使用して ManangementScope をセットアップします。コード全体の短いスニペットは次のようになります。

ManagementPath mp = new ManagementPath();
mp.NamespacePath = @"\root\cimv2";
mp.Server = computerName;

this.ms = new ManagementScope(mp, co);  //privs + dcom [outside]
this.ms.Connect();

EventQuery eq = new EventQuery(query);
ManagementEventWatcher mew = new ManagementEventWatcher(this.ms, eq);

mew.EventArrived += new  EventArrivedEventHandler(this.OnEventArrived);
mew.Stopped += new StoppedEventHandler(this.OnStopped);

mew.Start();

前述のように、これで問題が発生することはめったにありませんが、現在 :-( クエリされるクラスは 'Win32_LocalTime' であり、クエリは開始されますが、イベントは発生しません。WBemTest では、これは機能します。

これはクエリです:

select * from __InstanceModificationEvent where targetinstance isa 'Win32_LocalTime'

クラスがシングルトンであり、おそらく特別な構文を使用してクエリでシングルトン クラスを指定する必要があることがわかりますが、それを理解することはできません。

さらに、powershell で 1 つの非同期クエリを試してみましたが、うまくいきました。次に、PS を使用して「Win32_LocalTime」をクエリしましたが、動作しません!!

詳細情報へのヒント、ヒント、またはポインターは本当に素晴らしいでしょう!

これまでありがとう、そしてよろしく

++マブラ

4

1 に答える 1

0

問題は解決しました、「偶然に」.... ;-)

問題は私のイベントハンドラにあります。その中で、私は null である NewEvent.SystemProperties["Server"] にアクセスしており、スレッドは予告なしに終了します。

驚くべきことに、スレッドが予告なしに終了する状況がいくつも見られます [System.Timers.Timer についても同じことがあり、議論の末、MS はこの動作を変更しないと言いました :-( ]。

show クエリを使用するまで、それは小さな「イベント診断」を意味していました。SystemProperties.Server が空であるのを見たことがありません :-(

今、いくつかのコードを変更します。

とにかく、よろしく!

++マブラ

于 2013-05-06T19:43:42.353 に答える