CreateMutex – “访问被拒绝”

下面的代码有时没有任何问题,在其他时间抛出“访问被拒绝”的错误。 行为不一致。

_hMutex = CreateMutex(NULL, FALSE, MutexName); if (_hMutex == NULL) { throw MY_ERROR(GetLastError(), L"Error creating mutex handle"); } 

我运行具有此代码的独立可执行文件,执行操作并退出。 这不是一个multithreading的应用程序。 我每次运行这个时都使用相同的用户凭证login。

你能帮我解决吗?

谢谢,哼

Solutions Collecting From Web of "CreateMutex – “访问被拒绝”"

如果互斥锁是一个已命名的互斥体,并且该对象在此函数调用之前就存在,则返回值是现有对象的句柄, GetLastError返回ERROR_ALREADY_EXISTS ,bInitialOwner将被忽略,并且调用线程不被授予所有权。

但是,如果调用者具有有限的访问权限,则该函数将因ERROR_ACCESS_DENIED而失败,调用者应该使用OpenMutex函数。

MSDN

这可能是因为具有MutexName的互斥体已经存在。 您正在使用默认安全描述符(取决于您如何使用此互斥锁)创建互斥锁,可能不允许其他用途。

有关更多信息,请参阅MSDN 。 一个有用的片段:

如果互斥锁是一个已命名的互斥锁,并且该对象在该函数调用之前就已经存在,[elided],如果调用者具有有限的访问权限,则该函数将失败,并返回ERROR_ACCESS_DENIED ,调用者应该使用OpenMutex函数。

我终于找到了。 有一个服务运行系统帐户,创建静音和用户尝试访问它运行的EXE。 这是由于许可。