首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实现单实例应用程序的正确.NET方式

实现单实例应用程序的正确.NET方式
EN

Stack Overflow用户
提问于 2013-01-01 02:32:42
回答 3查看 14.9K关注 0票数 17

我在StackOverflow上看到了至少三种不同的方法来实现这一点。

使用多路复用的

  1. Accepted answer to this SO question

Second highest voted answer to this SO question

  1. 使用Microsoft.VisualBasic库的WindowsFormsApplicationBase

  1. 使用Process.GetProcessNames检查您的应用程序是否正在运行:对此SO question

的回答是Method here

我相信还有更多的方法可以做到这一点。

我只是在想,如果我选择了“错误”的一个,会有什么后果呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-01 03:16:37

如果有疑问,请始终选择包含在.NET框架中的实现。您可以对这样的实现抱有很高的期望,这样的实现经过数十万程序员的测试,已经过仔细的安全性和可用性审查,并将在未来几年内维护。

互斥方法是一种容易上手的方法。然而,它面临着一个相当严重的安全问题。拒绝服务攻击很容易开始,你不能对互斥体的名称保密,任何人都可以简单地创建一个同名的互斥体,并阻止你的程序启动。

出于同样的原因,进程命名方法也存在严重缺陷。不能保证进程名称是唯一的。不仅容易被利用,而且很容易被意外触发。

在C#程序员眼里,WindowsFormsApplicationBase有一个形象问题。他们对名称空间名称感到窒息,并认为他们的程序将以某种方式感染vb主义。这是无稽之谈,它只是一个可以在任何语言中使用的普通.NET类。

票数 17
EN

Stack Overflow用户

发布于 2013-01-01 03:56:21

为什么没有人提到ticking this checkbox

票数 5
EN

Stack Overflow用户

发布于 2013-01-01 03:13:36

这确实是一个品味问题,但我更喜欢Mutex方法,因为它不需要对VisualBasic库的依赖,并且使用Process.GetProcessNames不是一个理想的解决方案(如上所述,进程名称并不总是与您认为它们可能的名称相对应)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14104988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档