使用 WMI 的 ManagementEventWatcher/EventArrivedEventHandler 将导致创建另一个我试图避免的线程。 WMI 也知道它的延迟。
所以我的问题是:如何在没有 WMI 的情况下使用 C# 检测 Windows 进程创建/终止?有没有办法从非托管代码中做到这一点?
您可以使用Windows 事件跟踪 (ETW)。具体来说,您想要查看 kernel 事件跟踪器中的 Process 类的子类。
我从未在托管代码中使用过此功能,但是这篇博文(网络存档链接)看起来很有用。
我不知道这是否会在您的进程中创建额外的线程。
总之,您不需要 WMI 来监视进程事件。您可以使用 ETW 代替,但我不知道它是否完全满足您的要求。
据我所知,订阅进程创建/销毁事件的唯一受支持的方式是通过 WMI。我认为您拒绝轮询选项,在这种情况下,要么是 WMI,要么是失败。