"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo determinar el último tiempo de ejecución de un proceso detenido en .NET?

¿Cómo determinar el último tiempo de ejecución de un proceso detenido en .NET?

Publicado el 2025-04-22
Navegar:382

How Can I Determine the Last Execution Time of a Stopped Process in .NET?

rastreando el último tiempo de ejecución de un proceso .net terminado

la clase .net proceso ofrece información sobre los procesos actualmente activos. Sin embargo, se queda corto cuando se intenta determinar el último tiempo de ejecución de un proceso que ya ha terminado.

wmi: la solución

Este desafío se aborda de manera efectiva utilizando la instrumentación de administración de Windows (WMI). WMI permite eventos de inicio y detención del proceso de monitoreo. Aquí hay una implementación práctica:

using System;
using System.Management;

public class ProcessMonitor
{
    public static void Main(string[] args)
    {
        // Watch for process starts
        using (var startWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace")))
        {
            startWatch.EventArrived  = StartWatch_EventArrived;
            startWatch.Start();

            // Watch for process stops
            using (var stopWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace")))
            {
                stopWatch.EventArrived  = StopWatch_EventArrived;
                stopWatch.Start();

                Console.WriteLine("Monitoring process activity. Press any key to exit.");
                Console.ReadKey();
            }
            startWatch.Stop();
        }
    }

    private static void StopWatch_EventArrived(object sender, EventArrivedEventArgs e)
    {
        Console.WriteLine($"Process stopped: {e.NewEvent.Properties["ProcessName"].Value}");
    }

    private static void StartWatch_EventArrived(object sender, EventArrivedEventArgs e)
    {
        Console.WriteLine($"Process started: {e.NewEvent.Properties["ProcessName"].Value}");
    }
}

esencial: permisos elevados

Para monitorear de manera efectiva los eventos de proceso, esta aplicación requiere privilegios elevados. Ajuste el manifiesto de la aplicación en consecuencia.

cómo usar

Ejecute el programa. Monitoreará continuamente el proceso de inicio y se detendrá, mostrando el nombre del proceso cada vez. Presione cualquier tecla para finalizar el monitoreo.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3