程序只运行一个实例(包括远程登录运行或打开)

来源:互联网 发布:淘宝2012新规则 编辑:程序博客网 时间:2024/06/09 16:12

 //HANDLE hmutex = CreateMutex(NULL,TRUE,"test.exe");
 //DWORD err = GetLastError();
 //if (err == ERROR_ALREADY_EXISTS)
 //{
 // AfxMessageBox("程序已经运行!");
 // return FALSE;
 //}

我们都知道使用CreateMutex来实现限制只能运行程序的一个实例的,   假如程序是放在服务器上运行,要使用Windows的远程登录去打开或者访问程序,
在远程桌面不同会话之间,CreateMutex是不起作用的,即不同的会话可以同时运行程序的多个副本,即CreateMutex只在同一个会话中起作用,还是会运行多个实例!

今天在网上看到一个方法:相当好

HANDLE hMutex = ::CreateMutex(NULL, FALSE, L"global\\test.exe");  

只要多加一个 global\\


而我原来的做法是采用socket的bind去控制,第二次bind肯定是失败的....当然这种方法也是可行的。。。。

不好的是增加了socket的开消