首页 >后端开发 >C++ >如何使用 .NET 和 WMI 跟踪进程启动和停止事件?

如何使用 .NET 和 WMI 跟踪进程启动和停止事件?

Barbara Streisand
Barbara Streisand原创
2025-01-21 00:26:08278浏览

How Can I Track Process Start and Stop Events Using .NET and WMI?

使用 .NET 和 WMI 监控进程活动

.NET 提供了一种使用 Windows Management Instrumentation (WMI) 跟踪进程生命周期事件的强大方法。 这种方法对于确定特定进程的最后执行时间特别有用。

通过使用Win32_ProcessTrace类,您可以有效地监控进程的启动和停止。 以下代码演示了如何实现此目的:

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

public class ProcessTracker
{
    public static void Main()
    {
        // Initialize 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();

        // Await user input to terminate the application.
        Console.WriteLine("Press any key to exit.");
        while (!Console.KeyAvailable) System.Threading.Thread.Sleep(50);

        // Stop event watchers upon application closure.
        startWatcher.Stop();
        stopWatcher.Stop();
    }

    private static void stopWatcher_EventArrived(object sender, EventArrivedEventArgs e)
    {
        // Process stop event handler; logs the process name.
        Console.WriteLine("Process stopped: {0}", e.NewEvent.Properties["ProcessName"].Value);
    }

    private static void startWatcher_EventArrived(object sender, EventArrivedEventArgs e)
    {
        // Process start event handler; logs the process name.
        Console.WriteLine("Process started: {0}", e.NewEvent.Properties["ProcessName"].Value);
    }
}</code>

请记住:此应用程序需要提升权限。 相应地修改应用程序清单。此代码提供了一个强大的解决方案来跟踪进程启动和停止事件,从而能够精确识别任何给定进程的最后执行时间。

以上是如何使用 .NET 和 WMI 跟踪进程启动和停止事件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn