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/1986249/

相关文章:

c# - 添加了引用但无法识别命名空间

c - 使用 createProcess 使用另一个项目的方法

java - 将 Ctrl+C 发送到进程

java - 扫描仪对象错误

c# - WCF Rest .svc 在直接查看时抛出错误,但在其他情况下有效

c# - 创建新的 TransactionScope() 时出现 "The Transaction has aborted"异常

c# - ASP.NET 按钮单击事件错误

linux - Linux下通过内存限制进程

linux - 将linux时间设置为毫秒精度

architecture - "coroutine"和 "thread"之间的区别?