如果有人试图创建您已经使用的互斥量,如何得到通知?

How to be notified if someone tries to create a mutex which you already use?

鉴于我的一组 2 个不同的应用程序,名为 App1.exeApp2.exe

当两者都尝试创建具有相同名称的互斥量时,如下所述。

int main()
{
    std::wstring m = L"Local\MyMutexName";
    HANDLE hMutex = CreateMutexEx(NULL, m.c_str(), CREATE_MUTEX_INITIAL_OWNER, SYNCHRONIZE);
    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
        std::wcerr << "mutex exists" << std::endl;
        return 1;
    }

    _getch();
    return 0;
}
int main()
{
    std::wstring m = L"Local\MyMutexName";
    HANDLE hMutex = CreateMutexEx(NULL, m.c_str(), CREATE_MUTEX_INITIAL_OWNER, SYNCHRONIZE);
    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
        std::wcerr << "mutex exists" << std::endl;
        return 1;
    }

    _getch();
    return 0;
}

我想知道,有没有办法让在 App2.exe 之前开始的 App1.exe 收到通知或接收 App2.exe 在 [= 之后开始的事件12=],试图创建一个同名的互斥体?

更新:

我是 运行 Windows 上的一组应用程序(已关闭 OS 已发送给我们的客户)。

我需要知道 App2.exe 何时访问 App1.exe 的互斥锁,以便我执行特定的工作流,通知用户,并为现场工程师记录信息。

我认为这很难解释。

is there a way for App1.exe, which was started before App2.exe, to be notified or receive an event that App2.exe, which started after App1.exe, tried to create a mutex with the same name?

不,没有这样的event/notification。

I need to know when App2.exe accesses the mutex of App1.exe so that I will execute a specific workflow, inform the user, and log the information for the field engineers.

这不是互斥锁的设计目的。它们仅用于同步目的,仅此而已。

既然你明确地写了两个应用程序,为什么不简单地让 App2 明确地将它自己的 event/notification 发送到 App1 来触发工作?例如,您可以使用适合您需要的 RegisterWindowMessage() and PostMessage()/SendMessage() for that. Or any other form of Interprocess Communication。 Windows 为进程之间提供多种通信方式。