使用 .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中文网其他相关文章!