C#.NET禁止一个程序启动多个实例

C#.NET禁止一个程序启动多个实例,第1张

要不就在用户点[重新启动]时,把mutex先释放掉?可能需要把那个mutex变量做成一个global,这样你在两个地方都能访问到。然后在程序退出时(ApplicationRun下面那一句),检查一下如果mutex已经被释放了,就不要再释放了。

或者就在点[重新启动]时再设另外一个不同的信号量,当第二个程序重入时如果看到这个信号量说明是自动重启的情况,就不报错而直接正常往下走了。这个信号量可以在第一个程序[重新启动]那里执行完后再释放,不过应该也可以在整个程序退出时检查一下如果存在就释放。

有时候我们需要只允许程序只能同时运行一个实例。实现方式有很多。

进程互斥

原理:通过获取系统进程列表,如果发现有重名的,则表示程序已经运行了,此时新运行的进程就退出;

实现:SystemDiagnosticsProcess类的静态方法GetProcessesByName(string processName)

Process[] ps = ProcessGetProcessesByName(Guoexe);if(ps !=null&& psLength1){//发现重复进程}

写在Main方法里;判断Length大于1,是因为本身启动之后也在进程列表里了,第一次启动的时候Length==1;

优点:代码简单;

缺点:会把别的重名程序误认为是自己(如很多软件都有updateexe);可以通过复制多个exe并起不同名字来达到运行多个实例的目的;

二 共享锁(文件、注册表)

原理:运行程序时,在一个公共的位置创建一个共享值(如在固定目录创建一个文件,或者在固定的注册表位置创建一个值),退出程序时删除该值。若运行时发现值已经在,则表示程序已经在运行,此时新运行的进程就退出;实现:略;优点:逻辑好理解;

缺点:若程序没有正常退出,共享值没有被删除,会导致程序无法再启动;

三 线程互斥

原理:通过一个唯一标识创建进程互斥体,启动时判断互斥体是否已经存在,若存在则表示是重复进程;

实现:使用SystemThreadingMutexusingSystem;usingSystemCollectionsGeneric;usingSystemText;usingSystemDiagnostics;usingSystemReflection;usingSystemRuntimeInteropServices;namespaceConsoleApplication1{classProgram{///<summary///需要定义为类变量,而非局部变量///</summarystaticSystemThreadingMutex _mutex;staticvoidMain(string[] args){//是否可以打开新进程boolcreateNew;//获取程序集Guid作为唯一标识

Attribute guid_attr = AttributeGetCustomAttribute(AssemblyGetExecutingAssembly(),

typeof(GuidAttribute));stringguid =((GuidAttribute)guid_attr)Value;_mutex=newSystemThreadingMutex(true

, guid,

outcreateNew);if(false==createNew){//发现重复进程}_mutexReleaseMutex();}}}优点:真正能做到同一个程序只允许运行一个进程;缺点:暂无

ProcessExplorer,选中那个程序的进程,右键,Suspend(中文好像翻译为“挂起”),这个进程就失去响应了。然后再启动一次这个程序,就开了两个,最后resume(“恢复”吧)。我用任务管理器试验过可行

打印机驱动故障,打印纸张设置有问题。

1、得力打印机程序需要打开驱动连接网络,已运行不能多开运行实例主要是因为驱动故障。

2、得力打印机程序设置纸张时需根据个人需求放置,已运行不能多开运行实例是因为纸张设置有问题。

以上就是关于C#.NET禁止一个程序启动多个实例全部的内容,包括:C#.NET禁止一个程序启动多个实例、怎么让C#程序同时只能运行一个实例、有何能让同一软件程序运行多有何能让同一软件程序运行多实例重谢!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10104893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存