使用命名对象防止运行一个程序的多个实例【转】
时间:2010-10-22 来源:escarp
1.要点
- 在程序的入口处调用CreateXXX函数创建一个命名对象(如Mutex,Event等均可),然后调用GetLastError()函数检查返回值,看此对象是否已存在,如果已存在则说明已存在此程序的实例
- 在程序的出口点调用CloseHandle()关闭在入口处创建的命名对象
2.实现代码
1: //At the entry point, such aa the beginning of WinMain in Win32 app,
2: //or CWinApp::InitInstance() in MFC app
3: LPCTSTR instanceName =
4: _T("AD83912A-43F2-4BF6-B0CF-02BF6589FFF7"); //Generated with GuidGen tool
5: HANDLE h = ::CreateMutex(NULL,FALSE,instanceName);
6: DWORD error = GetLastError();
7: if (error == ERROR_ALREADY_EXISTS)
8: {
9: ::CloseHandle(h);
10: return FALSE; //Exist
11: }
12:
13: //.......
14:
15: //At the exist point, close the named object and then exist
16: ::CloseHandle(h);
17: return FALSE; //Exist
18:
相关阅读 更多 +