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

显然,我只想拥有一个设备实例,可以在每个PC上运行。如果我有两个设备可以控制每辆PC,则将其限制为每台PC的两个实例。

我的方式是1个过程名称之一。我将流程eqctrl命名,并且在过程启动时,它将用名称为“ eqctrl”计数数字进程。 2.执行名称。在启动时,用执行名称Equipctrl.exe计数流程数。 3.注册记录。 4. SQL Server数据库记录。

对我来说,过程名称或执行名称检测是最简单的,我最多的时间(如果不是全部)。但是,他们容易命名冲突。即使我进一步了解执行路径,也可以通过将执行文件复制到另一个文件夹来规避限制。

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

有帮助吗?

解决方案

其他提示

斯科特·汉塞尔曼(Scott Hanselman)的博客有一篇很棒的文章...

http://www.hanselman.com/blog/theweeklysourcecode31singleinstancewinformsandmicrosoftvisualbasicdll.aspx

嗯..当我们只允许一个应用程序的实例时,我们会使用 名为穆特克斯

这并不能完全实现您想要的场景。

另一点,为了避免碰撞,除了可执行的名称和目录外,还请使用可执行文件的MD5哈希。

您可以使用名为Mutex Semaphore的计数来执行此操作,还可以确保您创建的Mutex/Semaphore前缀以Global 和local 否则,否则远程否则不会读取这些名为Mutex的Mutex,并且计数将丢失。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top