Проверьте, был ли запущен или остановлен ManagementBaseObject (неожиданное поведение ManagementEventWatcher) - PullRequest
0 голосов
/ 11 января 2019

У меня есть два 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

Я что-то упустил или все правильно, и мне нужно только следить за более стабильными процессами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...