使用WMI的ManagementEventWatcher / EventArrivedEventHandler将导致创建另一个我想避免的线程. WMI也知道它的延迟.
所以我的问题是:如何在没有WMI的情况下使用C#检测 Windows进程创建/终止?有没有办法从非托管代码执行此操作?
所以我的问题是:如何在没有WMI的情况下使用C#检测 Windows进程创建/终止?有没有办法从非托管代码执行此操作?
解决方法
您可以使用
Event Tracing for Windows(ETW).具体来说,您要查看
kernel event tracer中
Process class的子类.
我从来没有使用托管代码,但this blog post看起来很有用.
而且我不知道这是否会在您的流程中创建额外的线程.
总之,您不需要WMI来监视进程事件.您可以使用ETW,但我不知道它是否完全符合您的要求.