项目有两个应用程序。
服务程序运行常规程序。但是有时普通程序会执行重复操作。SYSTEM帐户和USERS帐户两件事。 我使用了此源代码,并且可在所有Windows版本上使用。
auto const MutexName = L"Global\\Test_SingleInstance";
if (NULL == ::OpenMutex
( MUTEX_ALL_ACCESS
, FALSE
, MutexName))
{
duplicationPreventor = ::CreateMutex
( NULL
, FALSE
, MutexName
);
if (NULL == duplicationPreventor)
{
Log("Could not guarantee single instance.");
return false;
}
}
else
{
Log("There is existing instance.");
return false;
}
为什么会出现此问题?
请让我知道。
答案 0 :(得分:0)
您有比赛条件,或者确切地说是Time of check to time of use问题。如果两个实例几乎同时运行此代码,则两个实例都会从NULL
获得OpenMutex
,然后两个实例都将以CreateMutex
成功。
正确的方法是立即致电CreateMutex
,然后致电GetLastError
检查ERROR_ALREADY_EXISTS
。