Monitor de proceso .NET

Resuelto Nick Vaccaro asked hace 14 años • 2 respuestas

¿Hay alguna manera de determinar cuándo fue la última vez que una máquina específica ejecutó un proceso por última vez?

Puedo usar lo siguiente para determinar si un proceso se está ejecutando, pero la aplicación no puede capturar el proceso si desde entonces se detuvo.

Process[] process = Process.GetProcessesByName(processName, serverName);
Nick Vaccaro avatar Jan 01 '10 00:01 Nick Vaccaro
Aceptado

WMI proporciona una forma de realizar un seguimiento de los procesos que inician y finalizan con las clases Win32_ProcessTrace. Se muestra mejor con un ejemplo. Inicie una nueva aplicación de consola, Proyecto + Agregar referencia, seleccione System.Management. 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);
  }
}

Edite el manifiesto para que este programa se ejecute elevado. Luego simplemente inicie algunos programas para verlo en funcionamiento. Ojo que no es especialmente rápido.

Hans Passant avatar Dec 31 '2009 19:12 Hans Passant

No podrás hacer esto usando la Processclase. Sin embargo, debería ser posible determinar cuándo se ejecutó una aplicación por última vez configurando el seguimiento del proceso de auditoría en Windows. Los siguientes enlaces pueden ayudarle a comenzar:

Seguimiento del proceso de auditoría

¿Cómo puedo rastrear qué programas van y vienen en mi máquina?

El seguimiento del proceso creará entradas en el registro de eventos de Windows al que luego podrá acceder mediante C#.

Dirk Vollmar avatar Dec 31 '2009 17:12 Dirk Vollmar