Ich verwende den folgenden C# -Code in einem Windows-Dienst (der als NT_AUTHORITY\SYSTEM
ausgeführt wird) zum Erstellen eines Ereignishandlers zum Empfangen von Prozesserstellungsereignissen (mithilfe von WMI und WQL):Prozessstart-Ereignis mit WMI - nicht alle Prozesse werden erkannt
string queryString = "SELECT * FROM Win32_ProcessStartTrace";
ManagementEventWatcher watcher = new ManagementEventWatcher(new WqlEventQuery(queryString));
watcher.EventArrived += new EventArrivedEventHandler(ProcessStartEvent);
watcher.Start();
In ProcessStartEvent
:
int processId = int.Parse(e.NewEvent.Properties["ProcessId"].Value.ToString());
Process proc = Process.GetProcessById(processId);
Out("Received process: " + proc.ProcessName);
Das Problem, das ich habe, ist, dass (aus unerfindlichen Gründen) nicht jeder Prozessstart ist c aptured und vom Programm gemeldet. Wenn ich ungefähr 6 Prozesse gleichzeitig starte, kann man nicht in der Ausgabe erscheinen.
Ich habe versucht, einige Untersuchungen zur Erfassung von Prozesserzeugungsereignissen mithilfe von WMI durchzuführen, aber es sind nur wenige Informationen verfügbar. Ich habe gesehen, dass es auch möglich ist, Verfahren zu erfassen beginnt etwas mit ähnlich ist:
SELECT TargetInstance
FROM __InstanceCreationEvent
WITHIN 2
WHERE TargetInstance ISA 'Win32_Process'
Gibt es zwischen der Verwendung von __InstanceCreationEvent
und Win32_ProcessStartTrace
keine großen Unterschiede (Wie in this Stack Overflow answer gesehen)? Könnte das der Grund für meine Probleme sein?
Gibt es eine Erklärung dafür, warum ich nicht empfangen Ereignisse für alle Prozess beginnt? Gibt es etwas Offensichtliches, dass ich hier falsch liege?
Mögliche Duplikate von [.NET-Ereignisse für den ausführbaren Prozess von Process] (http://StackOverflow.com/Questions/848618/net-Events-for-Process-Executable-Start) –
@Dimi Ich würde sagen, das ist ein ziemlich andere Frage, da sich hierauf konzentriert, warum einige Ereignisse scheinbar verschwinden, während andere sogar bei Verwendung der vermeintlich "korrekten" Methode zum Auffangen von Prozessstartereignissen gefangen werden. – Xenon