WMI查询和事件在单个类中工作但不在应用程序中工作?

时间:2013-10-02 20:31:55

标签: wmi

我正在使用WMI查找插入USB设备的事件。我创建了一个独立的类来试试这个,它运行得很好!一旦我从我的应用程序调用该类,它就不起作用。代码是相同的,当我将类编译为独立的exe时,main()除外。代码如下:

 ManagementScope scope = new ManagementScope("root\\CIMV2");    //set the scope
 WqlEventQuery query = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_PnPEntity'");   //set the events
 watcher = new ManagementEventWatcher(scope, query);
 watcher.EventArrived += new EventArrivedEventHandler(this.DeviceChangeEventReceived);
 watcher.Start();

在内置到较大的应用程序中时,永远不会调用DeviceChangeEventReceived方法。我认为它可能是范围,但似乎不是。我确信这很简单,但我没有想法。谢谢!

1 个答案:

答案 0 :(得分:1)

我已经确定在独立类和调用该类的应用程序之间需要修改WMI查询。需要有一个TIMESPAN。我发现这只是愚蠢的运气,我给处理程序一个10秒的时间,它工作!

"SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE TargetInstance ISA 'Win32_PnPEntity'"

似乎WQLEventQuery方法只是轮询是否未指定时间跨度,并且在这种情况下,它会导致事情变得令人讨厌。如果它抛出异常会很好,但有些东西可能会被埋没在InterloperServices中。