2012-05-07 67 views
3

我在.NET中使用C#。防止单个可执行文件的多个进程实例

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

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

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

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

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

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

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

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

列表中的第一个是exe的ProcessModule。但我不确定这是否会永远是名单上的第一个。是否有任何保证,还是有解决问题的更好解决方案?要做到这一点

+1

我真的投票关闭这个重复的[this](http://stackoverflow.com/questions/819773/run-single-instance-of-an-application-using-mutex),当我意识到你给予的细微差别时。抱歉。但是,您仍然可以按照该方法进行操作,但是会将完整的路径名编码为互斥体的名称,从而允许每个目录上的实例。 –

+0

没问题。我甚至不知道我的解释是否足够清楚。 :) –

回答

1

的一种方式是,由其他服务也许,做这样的事情:

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

会给你程序的所有活动进程。

,那么你可以从这个得到的目录:

string fullPath = process.MainModule.FileName; 

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

+0

模块[0]是否始终是可执行的进程模块?这可以保证吗? –

+0

你也可以使用:System.AppDomain.CurrentDomain.FriendlyName 有当前的exe名称 –

+0

我编辑它,而不是模块[0] - MainModule。 – Mithir