❶ 同一目录的程序,同时只能运行一个
有时候需要只允许程序只能同时运行一个实例。实现方式有很多。
一. 进程互斥
原理:通过获取系统进程列表,如果发现有重名的,则表示程序已经运行了,此时新运行的进程就退出;
实现:System.Diagnostics.Process类的静态方法GetProcessesByName(string processName)
Process[] ps = Process.GetProcessesByName(Guo.exe);if(ps !=null&& ps.Length1){//发现重复进程}
写在Main方法里;判断Length大于1,是因为本身启动之后也在进程列表里了,第一次启动的时候Length==1;
优点:代码简单;
缺点:会把别的重名程序误认为是自己(如很多软件都有update.exe);可以通过复制多个exe并起不同名字来达到运行多个实例的目的;
二. 共享锁(文件、注册表)
原理:运行程序时,在一个公共的位置创建一个共享值(如在固定目录创建一个文件,或者在固定的注册表位置创建一个值),退出程序时删除该值。若运行时发现值已经在,则表示程序已经在运行,此时新运行的进程就退出;实现:略;优点:逻辑好理解;
缺点:若程序没有正常退出,共享值没有被删除,会导致程序无法再启动;
三. 线程互斥
原理:通过一个唯一标识创建进程互斥体,启动时判断互斥体是否已经存在,若存在则表示是重复进程;
实现:使用System.Threading.MutexusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Diagnostics;usingSystem.Reflection;usingSystem.Runtime.InteropServices;namespaceConsoleApplication1{classProgram{///<summary///需要定义为类变量,而非局部变量///</summarystaticSystem.Threading.Mutex _mutex;staticvoidMain(string[] args){//是否可以打开新进程boolcreateNew;//获取程序集Guid作为唯一标识
Attribute guid_attr = Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),
typeof(GuidAttribute));stringguid =((GuidAttribute)guid_attr).Value;_mutex=newSystem.Threading.Mutex(true
, guid,
outcreateNew);if(false==createNew){//发现重复进程}_mutex.ReleaseMutex();}}}优点:真正能做到同一个程序只允许运行一个进程。
❷ 我怎么打开个股票软件显示:同一目录程序,同时只能运行一个.是什么原因
还不如你去金融点评网下载《财富通》免费的 很好使用
❸ 一个目录只能运行一个系统是什么意思
这个是启动通达信软件的提示吧?
只须在CONNECT.CFG里设置onlyone=0或者把onlyone=1删除即可。
❹ 为什么每次打开通达信都打不开并显示“一个目录下只能运行一个本系统”
一般情况下,一个目录下只能运行一个系统的情况下就是你已经打开过了,然后他不要你再打开或者是他在与后台运行中,但是他没有进行显示这时候你可以先杀死他的进程,然后重新打开就可以了。
❺ 为何我在关闭同花顺后,再想进入就不行了,就会出现一对话框:同一个目录的程序只能运行一个。
可能你并没有退出此程序,有可以最小化到托盘了,
看一下任务栏里有没有,如果有,双击它就可以启动了。
❻ 为什么我的同花顺委托不能用,点击后出现同一个目录的程序同时只能运行一个,即使重新启动还是这样--急
非常简单,你原运行的同花顺还在运行,显然是你所不知道的。如果重新启动电脑后,仍是如此。唯一的办法就是卸掉同花顺后重新再装。祝你好运。
❼ 同花顺软件 打开后找不到 电脑显示 同一个目录的程序,同时只能运行一个 怎么办
把软件卸载,删除安装的文件夹,之后重新安装试试
❽ 为何我在最小化同花顺后,再想进入就不行了,就会出现一对话框:同一个目录的程序只能运行一个。
看看同花顺的设置,是不是有唤醒的快捷键,还有就是看看右下角是不是有图标
❾ 为什么每次打开通达信都打不开并显示“一个目录下只能运行一个本系统”
打开任务管理器,
看有没通达信的进程,有的话就结束掉他
❿ 我打开股票首页后,再点击委托老是出现“同一个目录的程序,只能运行一个”,而不能进行委托了
把委托的公司都删掉,重新安装软件