Win32_ProcessStartTrace的ManagementEventWatcher不再适用于Win 8.1

在过去的几个月里,我一直在使用ManagementEventWatcher来监视新流程的开始,并且它没有任何问题。 但是,我刚刚再次尝试了我的应用程序,似乎新进程的事件不再被调用。

以下是示例代码:

var startWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")); 

事件:

 private static void ProcessStart_EventArrived(object sender, EventArrivedEventArgs e) { Console.WriteLine("AppStarted"); } 

我还在另一个朋友的机器(也是Win 8.1)上测试了这个机器,它有一个旧的二进制文件(在过去的几个月中也运行得很好),他也不再接收这些事件。

这个问题似乎只存在于Win32_ProcessStartTrace中,因为Win32_ProcessStopTrace工作得很好,并在进程停止时接收事件。

最近是否有任何Windows更新可能会干扰这个? 我的系统的env自上次工作以来没有改变(除了赢得更新)。

我遇到了这个问题。 要解决此问题,您需要卸载Windows Update“kb3045999”。

去做这个:

  1. 打开Windows Update
  2. 点击“查看更新历史记录”
  3. 单击顶部的“已安装的更新”
  4. 向下滚动,直至看到“Windows安全更新程序(KB3045999)
  5. 右键单击并卸载
  6. 重启电脑

然后应该修复问题。

这是由Windows Update kb3045999引起的。

在Windows 8.1或Windows Server 2012 R2中安装此安全更新后,直接调用Windows Management Instrumentation(WMI)API或调用依赖于WMI的API(例如ManagementEventWatcher类)的应用程序无法获得正确的状态。进程(无论进程是否正在运行)。

解决方案:要解决此问题,请安装修补程序3094199 。

2015年11月11日更新: Microsoft发布了一个修补程序。


您可以使用命令行卸载此更新。

 wusa /uninstall /kb:3045999 

有关更多参数,请参阅WUSA – Windows Update独立安装程序 。

2015年8月23更新:对我而言,解决方案已不再适用。