2009年5月17日 星期日

防止程序重複啟動的方法

主要使用到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;
}

沒有留言:

張貼留言