限制打开一个程序实例

原创 2007年09月13日 10:19:00

----限制打开一个程序,只运行一个程序实例-----

实现的方法有很多,但简单而常用的方法有下面几种:

方法1:

 HANDLE Handle = CreateMutex( NULL, FALSE , _T("ONLY_ONE_INSTANCE"));

 if(Handle == NULL)
 {
       // 创建 Mutex 出错,
 }else
 {
 if (ERROR_ALREADY_EXISTS == GetLastError())
 {
         //已有一个实例正在运行, 退出程序
 }

方法2:  

if(::GlobalFindAtom( "unique_instance" )==0 )

 /*
  * 没有找到 "unique_instance" 对应的 ATOM 值,
  * 所以可以认为先前没有实例运行
  */

 ::GlobalAddAtom( "unique_instance" );
 
 /*
  * 运行我们的实例
  */
}else
{
 AfxMessageBox( "已有实例运行!" );
 /*
  * 结束本程序的运行
  */
}

记住当前程序退出时要调用 GlobalDeleteAtom 删除代表本实例的 ATOM 。如果忘记删除,那以后该实例程序就不能再运行了。可见该 ATOM 值不是和特定应用程序相联系的,当应用程序在没有删除ATOM值就退出后,该值并没有被操作系统删除。

这样就会遇到下面情景:假设你的程序因为某种原因非正常退出(ATOM 值没有删除),那么用户想再次运行你的程序时就会失败。因为新运行的程序总能找到 ATOM。

这种方法不好,最好别使用。

方法3:
可以通过文件映射的方法来做
创建一个有名字的映射区域, 再此仅给出思路

方法4:
可以通过在文件中设置共享节来做,在共享节中设置变量,通过变量来判断是否已有实例运行。
共享节应该放在 DLL 中,当然变量也在里面。
DLL 被我们的程序加载,然后我们改变的他的值为一个特殊的值。
每次我们的实例程序运行时都预先判断这个变量是否是我们设置的特殊值.
如果是,那就说明已有程序在运行。不是的话就设置它为特殊值,我们的程序运行

Qt:让程序实现单例模式,只能打开一次

介绍让程序实现单例模式,只能打开一次,这已经是一个老生常谈的问题了。方法也有很多,比如说监听端口,文件锁。我这里介绍一个用共享内存的方法。...
  • wsj18808050
  • wsj18808050
  • 2016年05月22日 17:35
  • 2845

Qt单实例程序(防止程序多开)

使用QLocalServer,QLocalSocket实现单实例进程,当已经存在相同进程时且窗口未激活(遮挡,最小化,托盘)时,激活进程主窗口。 参考文章:http://blog.csdn.net/p...
  • sunflover454
  • sunflover454
  • 2015年12月29日 14:47
  • 1233

WPF 只允许运行一个程序(单例)

问题描述: 有时一个程序需要单例运行,因为涉及到上下位连接,数据库访问,安全性等问题,本博客来探讨如何实现WPF 程序的单例运行。 措施: 利用 System.Threading.Mutex ...
  • hit_rxz
  • hit_rxz
  • 2014年10月17日 15:34
  • 3871

C#限制程序只能运行一個实例 (防多开)

//方法一:只禁止多个进程运行 using System; using System.Collections.Generic; using System.Windows.Forms; namesp...
  • wwm402654282
  • wwm402654282
  • 2015年02月25日 10:45
  • 564

C#限制程序只能运行一個实例 (防多开)

//方法一:只禁止多个进程运行 using System; using System.Collections.Generic; using System.Windows.Forms; namesp...
  • a3226976
  • a3226976
  • 2014年06月16日 10:04
  • 393

如何限制到 Visual C++ 中的一个实例的 32 位应用程序

注意Microsoft Visual c + + 2005年、 Microsoft Visual c + +.net 2003年和 Microsoft Visual c + +.net 2002年...
  • Plutus_Lee
  • Plutus_Lee
  • 2013年04月19日 11:13
  • 868

Delphi 限制打开多个程序源码实例

  • 2014年09月19日 08:52
  • 13KB
  • 下载

[shell应用进阶]:限制同时运行脚本实例的个数 -- 串行化:换一个思路。

转自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=840050 【背景介绍】 CU上曾经有几个帖子讨论到一个实际问题,就是如何限制同...
  • KangKermit
  • KangKermit
  • 2012年11月08日 20:50
  • 1138

Flex 如何限制客户端只运行一个application实例

用flex做web应用,就必须处理web应用的一个常见问题,即在同一台电脑上用不同账号登陆web应用,由于火狐了、ie7以上版本等浏览器sessionid是同一个,因此会发生a、b用户共享同一sess...
  • xuhuanchao
  • xuhuanchao
  • 2012年06月06日 14:59
  • 515

vc++2005限制只启动一个程序、进程

  • 2009年07月30日 16:40
  • 7.93MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:限制打开一个程序实例
举报原因:
原因补充:

(最多只允许输入30个字)