2009-06-09 2 views
9

C'è qualche evento quando viene creato un nuovo processo. Sto scrivendo un'applicazione C# che controlla determinati processi, ma non voglio scrivere un ciclo infinito per scorrere continuamente tutti i processi noti. Invece, preferisco controllare ogni processo che viene creato o iterato attraverso tutti i processi attuali attivati ​​da un evento. Eventuali suggerimenti?Esiste un evento di sistema quando vengono creati processi?

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

risposta

12

WMI fornisce un mezzo per ascoltare per la creazione di processo (e circa un milione di altre cose). Vedi 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(); 
    } 
}