我正在使用Windows服务(运行如下面的C#代码NT_AUTHORITY\SYSTEM
)用于接收进程创建活动(使用WMI和WQL)创建事件处理程序:
string queryString = "SELECT * FROM Win32_ProcessStartTrace";
ManagementEventWatcher watcher = new ManagementEventWatcher(new WqlEventQuery(queryString));
watcher.EventArrived += new EventArrivedEventHandler(ProcessStartEvent);
watcher.Start();
在ProcessStartEvent
:
int processId = int.Parse(e.NewEvent.Properties["ProcessId"].Value.ToString());
Process proc = Process.GetProcessById(processId);
Out("Received process: " + proc.ProcessName);
我遇到的问题是,(一些奇怪的原因) 并不是每一个过程的开始被捕获并通过程序报告。 如果我同时开始约6过程,一个可以不输出显示。
我试着做一些研究,攻克使用WMI进程创建的事件,但没有可用的有限信息。 我已经看到的是,还可以拍摄过程中使用类似的东西来开始:
SELECT TargetInstance
FROM __InstanceCreationEvent
WITHIN 2
WHERE TargetInstance ISA 'Win32_Process'
(曾经出现在这个堆栈溢出的答案 )
是否有使用之间的主要区别__InstanceCreationEvent
和Win32_ProcessStartTrace
? 难道这是我的问题的原因是什么?
是否有一个解释,为什么我没有收到所有过程开始的事件? 有更多的东西很明显,我做错了什么?