.NET进程监视器

Nic*_*aro 32 c# system process

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

我可以使用以下内容来确定某个进程是否正在运行,但如果该进程已停止,则该应用程序无法获取该进程.

Process[] process = Process.GetProcessesByName(processName, serverName);
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 65

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑清单,以便此程序运行升级.然后只需启动一些程序即可查看它的工作情况.请注意,它不是特别快.

  • 谢谢.刚尝试过它,效果很好. (2认同)
  • 它工作得很好,但是延迟很烦人,反正是为了让它更快? (2认同)
  • 这很棒,我想等到命令行应用程序进程被初始化但是我要求用户向应用程序运行作为adm (2认同)

Dir*_*mar 6

您将无法使用该Process课程执行此操作.但是,应该可以通过在Windows中配置审计进程跟踪来确定上次运行应用程序的时间.以下链接可能会帮助您入门:

审计流程跟踪

如何跟踪我的机器上出现的程序?

进程跟踪将在Windows事件日志中创建条目,然后您可以使用C#进行访问.