У меня есть два ManagementEventWatcher
, слушающих следующие запросы:
SELECT * FROM Win32_ProcessStartTrace
... и ...
SELECT * FROM Win32_ProcessStopTrace
private ManagementEventWatcher processStartEvent = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStartTrace");
private ManagementEventWatcher processStopEvent = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStopTrace");
// ctor
public ProcessWatch()
{
processStartEvent.EventArrived += new EventArrivedEventHandler(processStartEvent_EventArrived);
processStartEvent.Start();
processStopEvent.EventArrived += new EventArrivedEventHandler(processStopEvent_EventArrived);
processStopEvent.Start();
}
private void processStartEvent_EventArrived(object sender, EventArrivedEventArgs e)
{
DebugInfo(e, false);
}
private void processStopEvent_EventArrived(object sender, EventArrivedEventArgs e)
{
DebugInfo(e, true);
}
private void DebugInfo(EventArrivedEventArgs e, bool fStopped)
{
string processName = e.NewEvent.Properties["ProcessName"].Value.ToString();
string processID = Convert.ToInt32(e.NewEvent.Properties["ProcessID"].Value).ToString();
Console.WriteLine($"Process {(fStopped ? "stopped" : "started")}. Name: " + processName + " | ID: " + processID);
}
DebugInfo отладка, каждый запущенный процесс открыт.
Иногда это называется правильным: https://i.gyazo.com/0c51587ae58e9a3f930f0afa60f6f4c5.mp4
Но иногда бывает так, что «Старт» и «Стоп» вызываются одновременно. И я не знаю, почему это происходит (процессы запускаются при запуске).
Вы можете посмотреть это видео, чтобы узнать, что происходит: https://youtu.be/zl_g8TNSOBg
Я что-то упустил или все правильно, и мне нужно только следить за более стабильными процессами?