023 防止程序重複啟動的方法

Post date: 2015/2/10 上午 10:37:23

主要使用到CreateMutex()函數和GetLastError()以及一個常量ERROR_ALREADY_EXISTS.

CreateMutex()函數可用來創建一個有名或無名的互斥量對象,其函數原型為:

HANDLE CreateMutex
(
LPSECURITY_ATTRIBUTES lpMutexAttributes, //指向安全屬性的pointer
BOOL bInitialOwner, //初始化互斥對象的所有者
LPCTSTR lpName //指向互斥對象名字的pointer
);

如果函數執行成功,將return一個互斥量對象的handle。 如果在CreateMutex()執行前已經存在有相同名字的互斥量,函數將返回這個已經存在互斥量的handle,並且可以利用GetLastError()得到錯誤代碼ERROR_ALREADY_EXIST。可見,利用對錯誤代碼ERROR_ALREADY_EXIST的檢測可以實現CreateMutex()對程序的互斥。

下面為sample code:

HANDLE ManagerMutex = CreateMutex(NULL, FALSE, _T("OTM_Manager.exe"));
if (GetLastError( ) == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL, _T("OTM_Manager is already running"), _T("Warning!"), MB_OK);
CloseHandle(ManagerMutex );
PostQuitMessage(0);
return FALSE;
}

參考網頁:http://hi.baidu.com/machh03/blog/ite/52c0cc3864fd5b2697ddd815.html

張貼者: Johnnie 於 下午10:09

標籤: windows