.NET によるプロセス実行履歴の監視
特定のプロセスがシステム上で最後に実行されたときを追跡する必要がありますか? Process.GetProcessesByName
には現在実行中のプロセスが表示されますが、履歴データは提供されません。 この記事では、Windows Management Instrumentation (WMI) を使用してこの問題を解決する方法を示します。
プロセス監視に WMI を活用する
WMI は、Win32_ProcessTrace
クラスを介してプロセスの開始イベントと停止イベントへのアクセスを提供します。 次のコード スニペットは、これらのイベントを監視する方法を示しています。
<code class="language-csharp">using System; using System.Management; public class ProcessMonitor { public static void Main(string[] args) { // Create 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(); // Keep the console open until a key is pressed Console.WriteLine("Press any key to exit..."); Console.ReadKey(); // Stop event watchers startWatcher.Stop(); stopWatcher.Stop(); } private static void StopWatcher_EventArrived(object sender, EventArrivedEventArgs e) { Console.WriteLine($"Process stopped: {e.NewEvent.Properties["ProcessName"].Value}"); } private static void StartWatcher_EventArrived(object sender, EventArrivedEventArgs e) { Console.WriteLine($"Process started: {e.NewEvent.Properties["ProcessName"].Value}"); } }</code>
重要な考慮事項:
このコードが正しく機能するには、管理者権限が必要です。 それに応じてアプリケーション マニフェストを忘れずに調整してください。 複数のプロセスを実行すると、プログラムによって記録されたプロセスの開始イベントと停止イベントを観察できます。
以上が.NET でプロセスの実行履歴を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。