【发布时间】:2009-05-29 04:31:13
【问题描述】:
如何使用 c# 代码检索进程的开始时间?如果可能的话,我还想知道如何使用 Widows 内置的功能来做到这一点。
【问题讨论】:
如何使用 c# 代码检索进程的开始时间?如果可能的话,我还想知道如何使用 Widows 内置的功能来做到这一点。
【问题讨论】:
public DateTime GetProcessStartTime(string processName)
{
Process[] p = Process.GetProcessesByName(processName);
if (p.Length <= 0) throw new Exception("Process not found!");
return p[0].StartTime;
}
如果你知道进程的ID,你可以使用Process.GetProcessById(int processId)。另外,如果进程在网络上的另一台机器上,对于 GetProcessesByName() 和 GetProcessById(),您可以将机器名称指定为第二个参数。
要获取进程名称,请确保应用正在运行。然后转到“应用程序”选项卡上的任务管理器,右键单击您的应用程序并选择“转到处理”。在进程选项卡中,您会看到突出显示的进程名称。在 c# 代码中使用 .exe 之前的名称。例如Windows 窗体应用程序将被列为“myform.vshost.exe”。在代码中你应该说
Process.GetProcessesByName("myform.vshost");
【讨论】:
进程有一个属性“StartTime”: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.starttime.aspx
您想要“当前”进程的开始时间吗? Process.GetCurrentProcess 将为您提供: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getcurrentprocess.aspx
【讨论】:
在代码中
假设您要查找记事本的启动时间,当前运行的 PID 为 4548。您可以使用 PID 或进程名称找到它,然后将其打印到调试窗口,如下所示:
//pick one of the following two declarations
var procStartTime = System.Diagnostics.Process.GetProcessById(4548).StartTime;
var procStartTime = System.Diagnostics.Process.GetProcessesByName("notepad").FirstOrDefault().StartTime;
System.Diagnostics.Debug.WriteLine(procStartTime.ToLongTimeString());
在 Windows 中
您可以使用Process Explorer,它具有显示进程启动时间的选项,或者您可以在命令行中列出所有当前正在运行的进程及其启动时间:
wmic process get caption,creationdate
【讨论】:
您可以通过检查Process.GetProcessesByName()返回的Process对象来获取进程元数据。
【讨论】:
System.Diagnostics.Process.GetProcessById(xxx).StartTime;//fails for certain processes with access denied
【讨论】: