正确的.NET实现单个实例应用程序的方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

为了实现这一点,我在StackOverflow中至少见过三种不同的方法。

  1. 使用MUTEX
  2. 使用Microsoft.VisualBasic库的WindowsFormsApplicationBase
  3. 使用Process.GetProcessNames检查应用程序是否正在运行

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

我只是想知道如果其中一个是首选,如果我选择了“错误”的结果可能会有什么后果。

提问于
用户回答回答于

如有疑问,请始终选择包含在.NET框架中的实现。您可以抱有很高的期望,这种实现经过了成千上万的程序员的测试,并且经过了安全性和可用性的仔细审查,并且将在未来几年保持不变。

互斥体方法很容易就可以开始。但是,它遭受了相当严重的安全问题。一个拒绝服务攻击是非常简单的走了,你不能让你的互斥秘密和任何人的名字可以平凡创建具有相同名称的互斥体,防止你的程序不断启动。

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

WindowsFormsApplicationBase在C#程序员眼里有一个图像问题。他们窒息命名空间名称,并假定他们的程序会以某种方式感染vb-isms。这是无稽之谈,它只是一个纯粹的.NET类,可用于任何语言。

用户回答回答于

扫码关注云+社区