原理
程序开始运行时先用(可能是 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;
}