Mic*_*kus 17 .net c# single-instance
我已经在StackOverflow上看到至少三种不同的方法来实现这一目标.
使用MUTEX:接受此SO问题的答案
使用Microsoft.VisualBasic库的WindowsFormsApplicationBase:对此SO问题的第二高投票答案
我相信还有更多方法可以做到这一点.
我只是想知道其中一个是否是首选的,如果我选择"错误的",可能会产生什么后果.
Han*_*ant 17
如果有疑问,总是更喜欢.NET框架中包含的实现.您可以高度期望这样的实现已经被成千上万的程序员测试,已经过仔细审查以确保安全性和可用性,并且将在未来几年内得到维护.
互斥方法很容易实现.然而,它遭受了非常严重的安全问题.一个拒绝服务攻击是非常简单的走了,你不能让你的互斥秘密和任何人的名字可以平凡创建具有相同名称的互斥体,防止你的程序不断启动.
出于同样的原因,流程名称方法存在严重缺陷.无法保证进程名称是唯一的.不仅易于开发,而且容易被意外触发.
WindowsFormsApplicationBase在C#程序员眼中有一个图像问题.他们扼杀命名空间名称,并假设他们的程序会以某种方式感染vb-isms.这是无稽之谈,它只是一个可用于任何语言的普通.NET类.