防止单个可执行文件的多个流程实例

时间:2012-05-07 10:02:33

标签: .net windows process multiple-instances

我在.NET中使用C#。

我想阻止同一个可执行文件的两个实例同时运行,但我不想阻止从另一个文件夹运行的相同进程。

例如,我有一个位于两个不同位置的可执行文件:

  • C:\ MyProject的\万事达\的Program.exe

  • C:\ MyProject的\从属\的Program.exe

这些是相同的.exe文件,但在两个不同的位置。

我想允许从Master文件夹运行一个Program.exe实例,从Slave文件夹运行一个实例,但不允许两个实例。

我尝试通过检查具有相同名称的进程数(Process.GetProcessesByName)来做到这一点,但是我不能区分两者。

我找到的最接近的是从过程中获取模块。

列表中的第一个是exe的ProcessModule。但我不确定这是否永远是列表中的第一个。是否有任何保证,或者是否有解决问题的更好解决方案?

2 个答案:

答案 0 :(得分:1)

我会使用全局互斥锁而不是依赖于程序集名称。例如,另一个应用程序可能使用相同的文件名。

参见例如这个答案: Run single instance of an application using Mutex

答案 1 :(得分:0)

这样做的一种方法是,通过其他服务,也可以这样做:

Process[] processes = Process.GetProcessesByName("Program");

将为您提供程序的所有活动过程。

然后你可以从这里得到目录:

string fullPath = process.MainModule.FileName;

比较所有实例的目录,如果两个具有相同的文件夹,请关闭其中一个。