原理
程式開始運作時先用(可能是 TLS 函數中)CreateFile 在某個位置建立一個檔案
"lockfile"
,因為我們已經拿到了這個檔案的句柄是以這個檔案不會被意外删除。
當第二個執行個體啟動時因為
"lockfile"
已經存在是以失敗,進而判斷出有多開行為,程式退出。
當第一個執行個體退出時,解除鎖定
"lockfile"
并删除
"lockfile"
。
代碼
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
HANDLE hFile = CreateFile(L"D:\\lockfile", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (0 != GetLastError()) {
cout << "you can't open another applition." << endl;
goto end;
}
cout << "success." << endl;
getchar();
end:
if (hFile)
CloseHandle(hFile);
DeleteFile(L"D:\\lockfile");
getchar();
return 0;
}