2009-06-09 14 views
9

Czy istnieje jakiekolwiek zdarzenie podczas tworzenia nowego procesu. Piszę aplikację C#, która sprawdza pewne procesy, ale nie chcę napisać nieskończonej pętli do ciągłego powtarzania wszystkich znanych procesów. Zamiast tego raczej sprawdzam każdy proces, który jest tworzony lub iteruje przez wszystkie bieżące procesy uruchomione przez zdarzenie. Jakieś sugestie?Czy istnieje zdarzenie System podczas tworzenia procesów?

 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); 
     } 

Odpowiedz

12

WMI daje sposób na wysłuchanie procesu tworzenia (i około miliona innych rzeczy). Zobacz my answer here.

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(); 
    } 
} 
Powiązane problemy