2009-06-09 11 views
9

¿Hay algún evento cuando se crea un nuevo proceso? Estoy escribiendo una aplicación C# que comprueba ciertos procesos, pero no quiero escribir un ciclo infinito para iterar continuamente a través de todos los procesos conocidos. En cambio, prefiero verificar cada proceso que se crea o iterar a través de todos los procesos actuales desencadenados por un evento. ¿Alguna sugerencia?¿Hay un evento del sistema cuando se crean procesos?

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

Respuesta

12

WMI le ofrece un medio para escuchar la creación del proceso (y alrededor de un millón de otras cosas). Ver 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(); 
    } 
} 
Cuestiones relacionadas