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

一、引言

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值