我在StackOverflow上看到了至少三种不同的方法来实现这一点。
使用多路复用的
Second highest voted answer to this SO question:
的回答是Method here
我相信还有更多的方法可以做到这一点。
我只是在想,如果我选择了“错误”的一个,会有什么后果呢?
发布于 2013-01-01 03:16:37
如果有疑问,请始终选择包含在.NET框架中的实现。您可以对这样的实现抱有很高的期望,这样的实现经过数十万程序员的测试,已经过仔细的安全性和可用性审查,并将在未来几年内维护。
互斥方法是一种容易上手的方法。然而,它面临着一个相当严重的安全问题。拒绝服务攻击很容易开始,你不能对互斥体的名称保密,任何人都可以简单地创建一个同名的互斥体,并阻止你的程序启动。
出于同样的原因,进程命名方法也存在严重缺陷。不能保证进程名称是唯一的。不仅容易被利用,而且很容易被意外触发。
在C#程序员眼里,WindowsFormsApplicationBase有一个形象问题。他们对名称空间名称感到窒息,并认为他们的程序将以某种方式感染vb主义。这是无稽之谈,它只是一个可以在任何语言中使用的普通.NET类。
发布于 2013-01-01 03:56:21
发布于 2013-01-01 03:13:36
这确实是一个品味问题,但我更喜欢Mutex
方法,因为它不需要对VisualBasic库的依赖,并且使用Process.GetProcessNames
不是一个理想的解决方案(如上所述,进程名称并不总是与您认为它们可能的名称相对应)
https://stackoverflow.com/questions/14104988
复制相似问题