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 的异步查询并且它有效。然后,我用 PS 查询 'Win32_LocalTime' 并不起作用!

提示,提示或指向更多信息的指针真的很棒!

感谢到目前为止和最好的问候

++马布拉

4

1 回答 1

0

问题解决了,“意外”.... ;-)

问题出在我的事件处理程序中。在那,我正在访问为空的 NewEvent.SystemProperties["Server"] 并且线程在没有通知的情况下死亡。

令人震惊的是,我看到了多少种情况,线程在没有通知的情况下死亡[我对 System.Timers.Timer 有同样的事情,经过辩论,MS 说,他们不会改变这种行为 :-( ]。

在我使用 show 查询之前,它的意思是一个小小的“事件诊断器”,我从未见过 SystemProperties.Server 是空的:-(

我现在将更改一些代码。

无论如何,最好的问候!

++马布拉

于 2013-05-06T19:43:42.353 回答