天天看點

[防多開] CreateFile

原理

程式開始運作時先用(可能是 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;
}      

效果圖