c# - .NET 进程监视器

标签 c# process system

有没有办法确定特定机器最后一次运行进程的时间?

我可以使用以下方法来确定进程是否正在运行,但如果进程已停止,应用程序将无法获取该进程。

Process[] process = Process.GetProcessesByName(processName, serverName);

最佳答案

WMI 提供了一种使用 Win32_ProcessTrace 类跟踪进程开始和终止的方法。最好用一个例子来展示。启动一个新的控制台应用程序,Project + Add Reference,选择 System.Management。粘贴此代码:

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);
  }
}

Edit the manifest所以这个程序运行提升。然后只需启动一些程序即可看到它的工作情况。请注意它不是特别快。

关于c# - .NET 进程监视器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525267/

相关文章:

c# - WPF 将一个控件的启用属性绑定(bind)到 CheckBox

c# - 两个泛型类型之间的转换失败

C# MySQL 数据库还原

c# - 如何在 Process.StandardOutput 中禁用输出缓冲

namespaces - 为什么 "using namespace System;"会导致缺少类型说明符?

c# - 数据读取器连接状态

c# - Azure 服务总线队列订阅对 IIS 应用程序空闲状态有何影响?

c++ - 映射文件不显示信息

matlab - MATLAB中系统命令的问题

c++:如何获得余额(在银行系统中)