2009-03-16 11 views
12

¿Cómo detecto con C# en Windows el momento en que se inicia una aplicación externa?Detectando el lanzamiento de una aplicación

Probé el FilesystemWatcher que no funciona porque el archivo no está realmente cambiando. Además, tener un temporizador que compruebe constantemente todos los procesos abiertos puede ser un poco excesivo. Hay alguna otra manera de hacer esto? Si no está en C#, es posible hacerlo en C++ (de ser así, por favor, dame un ejemplo).

La razón por la que quiero hacer esto es para fines de registro.

Respuesta

20

Puede utilizar System.Management y WMI (Windows Management Instrumentation)

class WMIEvent { 
    public static void Main() { 
     WMIEvent we = new WMIEvent(); 
     ManagementEventWatcher w= null; 
     WqlEventQuery q; 
     try { 
      q = new WqlEventQuery(); 
      q.EventClassName = "Win32_ProcessStartTrace"; 
      w = new ManagementEventWatcher(q); 
      w.EventArrived += new EventArrivedEventHandler(we.ProcessStartEventArrived); 
      w.Start(); 
      Console.ReadLine(); // block main thread for test purposes 
     } 
     finally { 
      w.Stop(); 
     } 
} 

    public void ProcessStartEventArrived(object sender, EventArrivedEventArgs e) {  
     foreach(PropertyData pd in e.NewEvent.Properties) { 
      Console.WriteLine("\n============================= ========="); 
      Console.WriteLine("{0},{1},{2}",pd.Name, pd.Type, pd.Value); 
     } 
    } 
+0

@stalkerh ¿Cómo hacer este trabajo? Varios tipos, como el MangementEventWatcher, no existen en System.Management o System.Mangement.Instrumentation. ¿Dónde los encuentro? ¿Me he perdido algo? – Svish

+0

No importa. Tuve que agregar una referencia a System.Management dll también. No solo agregue 'using System.Management;' ... * suspiro *: p – Svish

+0

Pero el 'w = new ProcessStartEventArrived (q);' aún no funciona ... – Svish

Cuestiones relacionadas