Есть ли системное событие при создании процессов? - PullRequest
11 голосов
/ 09 июня 2009

Есть ли событие при создании нового процесса. Я пишу приложение на c #, которое проверяет определенные процессы, но я не хочу писать бесконечный цикл для непрерывного перебора всех известных процессов. Вместо этого я предпочитаю проверять каждый созданный процесс или перебирать все текущие процессы, запускаемые событием. Есть предложения?

        Process[] pArray;
        while (true)
        {
            pArray = Process.GetProcesses();

            foreach (Process p in pArray)
            {
                foreach (String pName in listOfProcesses)  //just a list of process names to search for
                {

                    if (pName.Equals(p.ProcessName, StringComparison.CurrentCultureIgnoreCase))
                    {
                       //do some stuff

                    }
                }
            }

            Thread.Sleep(refreshRate * 1000);
        }

1 Ответ

15 голосов
/ 09 июня 2009

WMI дает вам возможность прослушивать процесс создания (и около миллиона других вещей). Смотри мой ответ здесь .

 void WaitForProcess()
{
    ManagementEventWatcher startWatch = new ManagementEventWatcher(
      new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
    startWatch.EventArrived
                        += new EventArrivedEventHandler(startWatch_EventArrived);
    startWatch.Start();
}

static void startWatch_EventArrived(object sender, EventArrivedEventArgs e)
{
    Console.WriteLine("Process started: {0}"
                      , e.NewEvent.Properties["ProcessName"].Value);
    if (this is the process I'm interested in)
    {
             startWatch.Stop();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...