web-dev-qa-db-ja.com

.NETプロセスモニター

特定のマシンが最後にプロセスを最後に実行した時刻を判別する方法はありますか?

以下を使用してプロセスが実行されているかどうかを確認できますが、アプリケーションが停止している場合、アプリケーションはプロセスを取得できません。

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

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

マニフェストを編集 したがって、このプログラムは昇格して実行されます。次に、いくつかのプログラムを起動して、実際に動作していることを確認します。それは特に速くないことに注意してください。

65
Hans Passant

Processクラスを使用してこれを行うことはできません。ただし、Windowsで監査プロセスの追跡を構成することにより、アプリケーションが最後に実行された時期を把握できるはずです。次のリンクから始めることができます。

監査プロセスの追跡

自分のマシンでどのプログラムが出入りするかを追跡するにはどうすればよいですか?

プロセス追跡により、Windowsイベントログにエントリが作成され、C#を使用してアクセスできます。

6
Dirk Vollmar