Process Class是否可用于确定进程是否已在运行?

问题描述:

我正在使用Process Class来启动进程,但不希望运行任何程序的多个实例。看看文档,有很多可能看起来的属性,但没有什么突出的最明显的。Process Class是否可用于确定进程是否已在运行?

确定过程是否正在运行的最佳方法是什么?

编辑:约翰费舍尔是正确的:这是一个现有的应用程序,我开始,我无法修改它。

您可以调用此方法

Process.GetProcesses() 

和遍历结果(类型流程的集合),看名称相匹配。类似这样的:

foreach (Process prc in Process.GetProcesses()) 
{ 
    if (prc.ProcessName.Contains(MyProcessName)) 
    { 
     //Process is running 
    } 
} 

您应该使用的是辛格尔顿应用模式:

bool createdNew = true; 
using (var mutex = new Mutex(true, "YourProcessName", out createdNew)) 
{ 
    if (createdNew) 
    { 
     // Run application 
    } 
} 
+0

这只有在他试图启动他编写的应用程序并且可以修改时才有效。 – 2010-10-12 16:06:35

我想这一切都取决于你所说的“最好方式”是什么?你的意思是最快,最准确还是会处理一些奇怪的情况?

我要开始的方式是列出进程并检查可执行文件名称与我试图启动的进程。如果它们匹配(不区分大小写),它可能正在运行。