Windows核心编程:使用 CreateMutex 防止运行应用程序的多个实例

来源:互联网 发布:网络出版物是什么 编辑:程序博客网 时间:2024/06/05 05:39

一、引言

这块代码来源于 《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,故搬运过来,希望能够提供一些帮助:)

阅读全文
0 0
原创粉丝点击