我在.NET中使用C#。
我想阻止同一个可执行文件的两个实例同时运行,但我不想阻止从另一个文件夹运行的相同进程。
例如,我有一个位于两个不同位置的可执行文件:
C:\ MyProject的\万事达\的Program.exe
C:\ MyProject的\从属\的Program.exe
这些是相同的.exe文件,但在两个不同的位置。
我想允许从Master文件夹运行一个Program.exe实例,从Slave文件夹运行一个实例,但不允许两个实例。
我尝试通过检查具有相同名称的进程数(Process.GetProcessesByName)来做到这一点,但是我不能区分两者。
我找到的最接近的是从过程中获取模块。
列表中的第一个是exe的ProcessModule。但我不确定这是否永远是列表中的第一个。是否有任何保证,或者是否有解决问题的更好解决方案?
答案 0 :(得分:1)
我会使用全局互斥锁而不是依赖于程序集名称。例如,另一个应用程序可能使用相同的文件名。
答案 1 :(得分:0)
这样做的一种方法是,通过其他服务,也可以这样做:
Process[] processes = Process.GetProcessesByName("Program");
将为您提供程序的所有活动过程。
然后你可以从这里得到目录:
string fullPath = process.MainModule.FileName;
比较所有实例的目录,如果两个具有相同的文件夹,请关闭其中一个。