我在Windows服務(運行時爲NT_AUTHORITY\SYSTEM
)中使用以下C#代碼來創建用於接收進程創建事件(使用WMI和WQL)的事件處理程序:使用WMI進程啓動事件 - 並非檢測到所有進程開始
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);
我遇到的問題是,(一些奇怪的原因)不是每一個過程的開始爲c截獲並由程序報告。如果我同時啓動大約6個進程,則可能不會顯示在輸出中。
我試圖做一些關於使用WMI捕獲進程創建事件的研究,但是有限的信息可用。我已經看到的是,還可以拍攝過程中開始使用類似的東西:
SELECT TargetInstance
FROM __InstanceCreationEvent
WITHIN 2
WHERE TargetInstance ISA 'Win32_Process'
(如this Stack Overflow answer所示)
是否有使用__InstanceCreationEvent
和Win32_ProcessStartTrace
之間的主要區別?這可能是我的問題的原因嗎?
是否有所有過程開始解釋,爲什麼我沒有收到事件?有什麼更明顯的,我在這裏做錯了嗎?
可能重複的[.NET事件進程可執行文件啓動](http://stackoverflow.com/questions/848618/net-events-for-process-executable-start) – 2016-06-06 17:26:43
@Dimi我會說這是一個相當不同的問題,因爲這着重於爲什麼有些事件似乎消失了,而有些事件甚至在使用所謂的「正確」方法捕捉流程啓動事件時被捕獲。 – Xenon 2016-06-16 01:27:42