Я использую следующий код C# в службе Windows (который работает как NT_AUTHORITY\SYSTEM
) для создания обработчика событий для получения событий создания процесса (с использованием 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);
проблема у меня в том, что (по какой-то странной причине) не каждый старт процесс с получил сообщение и сообщил о программе. Если я запускаю около 6 процессов одновременно, на выходе может не отображаться.
Я попытался провести некоторое исследование по созданию событий создания процесса с использованием WMI, но имеется ограниченная информация. Я видел, что это также возможно, чтобы захватить процесс начинает использовать что-то похожее на:
SELECT TargetInstance
FROM __InstanceCreationEvent
WITHIN 2
WHERE TargetInstance ISA 'Win32_Process'
(Как видно из this Stack Overflow answer)
Существуют ли какие-либо существенные различия между использованием __InstanceCreationEvent
и Win32_ProcessStartTrace
? Может ли это быть причиной моих проблем?
есть объяснение, почему я не получаю событие для начинается все процесса? Есть ли что-то более очевидное, что я здесь делаю неправильно?
Возможный дубликат [.NET Events for Process executable start] (http://stackoverflow.com/questions/848618/net-events-for-process-executable-start) –
@Dimi Я бы сказал, что это довольно другой вопрос, так как это фокусируется на том, почему некоторые события кажутся исчезающими, в то время как другие пойманы даже при использовании якобы «правильного» метода для обнаружения событий запуска процесса. – Xenon