2009-05-29 47 views
4

如何使用c#代码检索进程的开始时间?如果可能的话,我也想知道如何使用嵌入到Widows中的功能来实现它。进程的开始时间

回答

6
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"); 
7

过程有一个属性“开始时间”: 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

+0

如何知道没有代码的启动时间。我的意思是从窗户本身。 – Sauron 2009-05-29 06:10:53

+0

这是一个单独的问题,可能与编程无关。 – 2009-05-29 23:15:04

0

代码

假设你想找到记事本的开始时间,目前正在与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 
0

你可以得到通过检查由Process.GetProcessesByName()返回的Process对象来处理元数据。

0
System.Diagnostics.Process.GetProcessById(xxx).StartTime;//fails for certain processes with access denied