Есть ли системное событие при создании процессов?
Есть ли событие, когда создается новый процесс. Я пишу приложение aC#, которое проверяет определенные процессы, но я не хочу писать бесконечный цикл для непрерывного перебора всех известных процессов. Вместо этого я предпочитаю проверять каждый созданный процесс или перебирать все текущие процессы, запускаемые событием. Какие-либо предложения?
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 ответ
Решение
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();
}
}