有沒有一種方法可以確定特定機器最後一次運行進程的時間?.NET進程監視器
我可以使用以下內容來確定進程是否正在運行,但是如果進程已停止,應用程序無法獲取進程。
Process[] process = Process.GetProcessesByName(processName, serverName);
有沒有一種方法可以確定特定機器最後一次運行進程的時間?.NET進程監視器
我可以使用以下內容來確定進程是否正在運行,但是如果進程已停止,應用程序無法獲取進程。
Process[] process = Process.GetProcessesByName(processName, serverName);
WMI提供了一種跟蹤啓動和終止Win32_ProcessTrace類的進程的方法。最好用一個例子來展示。啓動一個新的控制檯應用程序,Project +添加引用,選擇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所以這個程序運行升高。然後只需啓動一些程序即可在工作中看到它。注意它不是特別快。
您將無法使用Process
類來做到這一點。但是,應該可以通過在Windows中配置審計進程跟蹤來確定應用程序上次運行的時間。下面的鏈接可能讓你開始:
過程跟蹤將創建在Windows事件日誌條目,然後您可以訪問使用C#。
謝謝。剛剛嘗試過,它完美地工作。 – 2010-01-05 20:19:46
它完美的工作,但延遲是煩人的,有反正它讓它更快? – 2012-05-13 11:20:30
我剛剛嘗試過,延遲時間少於1秒。我認爲這是好的。 – webber2k6 2012-11-16 07:29:52