首頁 >後端開發 >C++ >如何檢索 .NET 中進程的執行歷史記錄?

如何檢索 .NET 中進程的執行歷史記錄?

Barbara Streisand
Barbara Streisand原創
2025-01-21 00:36:15318瀏覽

How Can I Retrieve the Execution History of Processes in .NET?

使用 .NET 監控進程執行歷史

需要追蹤特定進程上次在系統上運行的時間? 雖然 Process.GetProcessesByName 顯示目前正在運行的進程,但它不提供歷史資料。 本文示範了使用 Windows Management Instrumentation (WMI) 來解決此問題。

利用 WMI 進行進程監控

WMI 透過 Win32_ProcessTrace 類別提供對進程啟動和停止事件的存取。 以下程式碼片段說明如何監視這些事件:

<code class="language-csharp">using System;
using System.Management;

public class ProcessMonitor
{
    public static void Main(string[] args)
    {
        // Create event watchers for process start and stop events
        ManagementEventWatcher startWatcher = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
        startWatcher.EventArrived += StartWatcher_EventArrived;
        startWatcher.Start();

        ManagementEventWatcher stopWatcher = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace"));
        stopWatcher.EventArrived += StopWatcher_EventArrived;
        stopWatcher.Start();

        // Keep the console open until a key is pressed
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();

        // Stop event watchers
        startWatcher.Stop();
        stopWatcher.Stop();
    }

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

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

重要注意事項:

此程式碼需要管理員權限才能正常運作。 請記住要相應地調整應用程式清單。 執行多個進程將允許您觀察程式記錄的進程啟動和停止事件。

以上是如何檢索 .NET 中進程的執行歷史記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn