假设我有一个用C#编写的名为EquipCtrl.exe的应用程序,它在PC上作为本地进程运行,以控制一台设备。
显然,我希望在每台PC上只运行一个Equipctrl实例。如果我有两个装备来控制每台PC,那么我会将它限制为每台PC两个实例。
我做的方式是其中之一 1.流程名称。我将进程命名为EqCtrl,在进程启动时,它将使用名称“EqCtrl”计算数字进程。 2.执行名称。在启动时,使用执行名称EquipCtrl.exe计算进程数。 3.登记处记录。 4. SQL Server数据库记录。
对我来说,进程名称或执行名称检测是最简单的,也是我最常做的(如果不是全部的话)。但是,他们容易受到名字冲突的影响。即使我进一步找出执行路径,也可以通过将执行文件复制到另一个文件夹来规避限制。
在.NET上执行执行限制的最佳方法是什么?为什么?注册表记录是最好的方式吗?
答案 0 :(得分:7)
答案 1 :(得分:1)
斯科特汉塞尔曼的博客上有一篇很棒的帖子......
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以通过计算命名的互斥锁\信号量来执行此操作,同时确保您创建的互斥锁/信号量前缀以GLOBAL \和LOCAL \开头,否则远程桌面连接将无法读取这些命名的互斥锁,并且计数将丢失。
http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx