如果有人试图创建您已经使用的互斥量,如何得到通知?
How to be notified if someone tries to create a mutex which you already use?
鉴于我的一组 2 个不同的应用程序,名为 App1.exe
和 App2.exe
。
当两者都尝试创建具有相同名称的互斥量时,如下所述。
- 在
App1.exe
中,在 App2.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;
}
- 在
App2.exe
中,在 App1.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;
}
我想知道,有没有办法让在 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 为进程之间提供多种通信方式。
鉴于我的一组 2 个不同的应用程序,名为 App1.exe
和 App2.exe
。
当两者都尝试创建具有相同名称的互斥量时,如下所述。
- 在
App1.exe
中,在App2.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;
}
- 在
App2.exe
中,在App1.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;
}
我想知道,有没有办法让在 App2.exe
之前开始的 App1.exe
收到通知或接收 App2.exe
在 [= 之后开始的事件12=],试图创建一个同名的互斥体?
更新:
我是 运行 Windows 上的一组应用程序(已关闭 OS 已发送给我们的客户)。
我需要知道 App2.exe
何时访问 App1.exe
的互斥锁,以便我执行特定的工作流,通知用户,并为现场工程师记录信息。
我认为这很难解释。
is there a way for
App1.exe
, which was started beforeApp2.exe
, to be notified or receive an event thatApp2.exe
, which started afterApp1.exe
, tried to create a mutex with the same name?
不,没有这样的event/notification。
I need to know when
App2.exe
accesses the mutex ofApp1.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 为进程之间提供多种通信方式。