.NET - 限制执行单​​元的实例数

时间:2010-11-11 22:01:11

标签: c# .net executable multiton application-singleton

假设我有一个用C#编写的名为EquipCtrl.exe的应用程序,它在PC上作为本地进程运行,以控制一台设备。

显然,我希望在每台PC上只运行一个Equipctrl实例。如果我有两个装备来控制每台PC,那么我会将它限制为每台PC两个实例。

我做的方式是其中之一 1.流程名称。我将进程命名为EqCtrl,在进程启动时,它将使用名称“EqCtrl”计算数字进程。 2.执行名称。在启动时,使用执行名称EquipCtrl.exe计算进程数。 3.登记处记录。 4. SQL Server数据库记录。

对我来说,进程名称或执行名称检测是最简单的,也是我最常做的(如果不是全部的话)。但是,他们容易受到名字冲突的影响。即使我进一步找出执行路径,也可以通过将执行文件复制到另一个文件夹来规避限制。

在.NET上执行执行限制的最佳方法是什么?为什么?注册表记录是最好的方式吗?

4 个答案:

答案 0 :(得分:7)

答案 1 :(得分:1)

答案 2 :(得分:0)

嗯..当我们只想允许应用程序的单个实例时,我们使用named mutex

这并不能完全启用您想要的方案。

另一点,为了避免冲突,除了可执行文件名和目录之外,还要使用可执行文件的MD5哈希值。

答案 3 :(得分:0)

您可以通过计算命名的互斥锁\信号量来执行此操作,同时确保您创建的互斥锁/信号量前缀以GLOBAL \和LOCAL \开头,否则远程桌面连接将无法读取这些命名的互斥锁,并且计数将丢失。

http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx