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

我正在使用.NET与C#。

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

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

  • C:\ MyProject的\主\ Program.exe文件

  • C:\ MyProject的\从\ Program.exe文件

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

我想要允许一个从Master文件夹运行的Program.exe实例和一个来自Slave文件夹的实例,但是没有任何两个实例。

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

我发现的最接近的是从过程中获取模块。

列表中的第一个是exe的ProcessModule。 但是我不确定这是否会成为名单上的第一名。 有没有保证,还是有解决问题的更好的解决办法?

Solutions Collecting From Web of "防止单个可执行文件的多个进程实例"

做到这一点的一个方法是,通过另一个服务,也许做这样的事情:

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

会给你所有的程序的积极进程。

那么你可以从这里得到目录:

 string fullPath = process.Mainmodulee.FileName; 

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

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

看到这样的答案: 使用Mutex运行一个应用程序的单个实例