WMI proporciona una manera de realizar un seguimiento de los procesos de arranque y que terminan con las clases Win32_ProcessTrace. Se muestra mejor con un ejemplo. Inicie una nueva aplicación de consola, Proyecto + Agregar referencia, seleccione Administración del sistema. Pega este código:
using System;
using System.Management;
class Process {
public static void Main() {
ManagementEventWatcher startWatch = new ManagementEventWatcher(
new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
startWatch.EventArrived += new EventArrivedEventHandler(startWatch_EventArrived);
startWatch.Start();
ManagementEventWatcher stopWatch = new ManagementEventWatcher(
new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace"));
stopWatch.EventArrived += new EventArrivedEventHandler(stopWatch_EventArrived);
stopWatch.Start();
Console.WriteLine("Press any key to exit");
while (!Console.KeyAvailable) System.Threading.Thread.Sleep(50);
startWatch.Stop();
stopWatch.Stop();
}
static void stopWatch_EventArrived(object sender, EventArrivedEventArgs e) {
Console.WriteLine("Process stopped: {0}", e.NewEvent.Properties["ProcessName"].Value);
}
static void startWatch_EventArrived(object sender, EventArrivedEventArgs e) {
Console.WriteLine("Process started: {0}", e.NewEvent.Properties["ProcessName"].Value);
}
}
Edit the manifest por lo que este programa se ejecuta elevada. Luego, simplemente inicie algunos programas para ver cómo funciona. Ten en cuenta que no es especialmente rápido.
Gracias. Lo intenté y funciona perfectamente. –
Funciona perfectamente, pero el retraso es molesto, ¿hay alguna forma de hacerlo más rápido? –
Acabo de probarlo y tengo un retraso de menos de 1 segundo. Creo que esto está bien. – webber2k6