一、引言
这块代码来源于 《Windows 核心编程》(第五版)P50 页。
一直以来对于防止运行应用程序多个实例有一个大体的代码印象(就是来源于这里),但是一直苦于没有好好整理,今天就贴上这份简单的代码,一来方便自己整理学习,二来以飨读者。
二、代码
这里直接贴上我运行测试成功的代码:
#include <tchar.h>
#include <windows.h>
int WINAPI _tWinMain(HINSTANCE hInstExe, HINSTANCE, PTSTR pszCmdLine,
int nCmdShow) {
HANDLE h = CreateMutex(NULL, FALSE,
TEXT("{80A85553-1E05-4323-B4F9-43A4396A4507}"));
if (GetLastError() == ERROR_ALREADY_EXISTS) {
// There is already an instance of this application running.
// Close the object and immediately return.
MessageBox(NULL, TEXT("Another Instance Running."), TEXT("Tip"), MB_OK);
CloseHandle(h);
return 0;
}
// This is the first instance of this application running.
// ...
Sleep(10000);
// Before exiting, close the object.
CloseHandle(h);
return 0;
}
运行这份代码,你可以尝试着编译 Debug 和 Release 两个版本的 exe 运行文件,然后先点击 Release 版本的,因为该应用程序每次运行都要创建一个特定 GUID 命名的互斥量对象,因此当你第一次点击 Release 版本的时候,就会在这个系统的环境中创建一个独有的互斥量对象,并且该应用程序留存 10s 以便测试。而当你点击运行 Debug 版本的时候,此时可以看到我们创建互斥量失败后的提示信息,提示我们已经有另一个实例在运行了。
这是一个非常简单而又明了的 Demo,故搬运过来,希望能够提供一些帮助:)