内容简介:当有疑问时,总是喜欢.NET框架中包含的一个实现.您可以很高的期望,这样的实施被成千上万的程序员测试,已经仔细检查了安全性和可用性,并将在未来几年内保持下去.互斥法是一个容易的方法.然而它却遭受了严重的安全问题.拒绝服务攻击非常简单,您不能将互斥体的名称保密,任何人都可以轻松创建具有相同名称的互斥体,并阻止您的程序启动.同样的原因,流程名称的方法是有缺陷的.不能保证流程名称是唯一的.不仅容易开发,而且容易被事故触发.
我在StackOverflow中看到至少有三种不同的方法来实现这一点.
>使用MUTEX: Accepted answer to this SO question
>使用Microsoft.VisualBasic库的WindowsFormsApplicationBase: Second highest voted answer to this SO question
>使用Process.GetProcessNames检查您的应用程序是否正在运行: Method here 已发布为此 SO question 的答案
我相信有更多的方法来做到这一点.
我只是想知道如果其中一个是首选的,如果我选择“错误”的话,后果可能如何.
当有疑问时,总是喜欢.NET框架中包含的一个实现.您可以很高的期望,这样的实施被成千上万的 程序员 测试,已经仔细检查了安全性和可用性,并将在未来几年内保持下去.
互斥法是一个容易的方法.然而它却遭受了严重的安全问题.拒绝服务攻击非常简单,您不能将互斥体的名称保密,任何人都可以轻松创建具有相同名称的互斥体,并阻止您的程序启动.
同样的原因,流程名称的方法是有缺陷的.不能保证流程名称是唯一的.不仅容易开发,而且容易被事故触发.
WindowsFormsApplicationBase在C#程序员的眼中有一个图像问题.他们窒息命名空间名称,并假定他们的程序将以某种方式被vb-isms感染.这是废话,它只是一个可以在任何语言中使用的简单的.NET类.
http://stackoverflow.com/questions/14104988/correct-net-way-to-implement-a-single-instance-application
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- hibernate多对多,单个修改很伤神
- php取出数组单个值的方法
- 巧断梯度:单个loss实现GAN模型
- Oracle 11g 起停RAC中单个节点
- 后台接收Json请求参数兼容数组和单个对象
- 使用单个Windows命令从文件中提取N行
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。