CreateMutex и ActiveX - PullRequest
       18

CreateMutex и ActiveX

0 голосов
/ 18 августа 2011

Я разрабатываю подключаемый модуль ActiveX для Internet Explorer, используя Qt, и пытаюсь заставить установщик убедиться, что подключаемый модуль не запущен, прежде чем продолжить. Стандартный подход к этому - создать именованный мьютекс в приложении и попытаться открыть его в установщике.

Это прекрасно работает, когда создается как автономный .exe, но когда библиотека подключаемого модуля загружается либо idc.exe (для регистрации сервера или обработки библиотеки типов), либо самим IE (после добавления теста для argv [0] чтобы пропустить CreateMutex для выполнения IDC), вызов CreateMutex завершается сбоем.

Вот как я это называю:

CreateMutex ((LPSECURITY_ATTRIBUTES) MUTEX_ALL_ACCESS, FALSE, "mutex_name_here");

Есть ли причина, по которой это должно завершаться с ошибкой при запуске в контексте сервера ActiveX, но работать правильно при автономной работе? Есть что-то еще, что мне здесь не хватает?

1 Ответ

2 голосов
/ 18 августа 2011

Первый параметр CreateMutex() - это указатель на структуру SECURITY_ATTRIBUTES (которая содержит указатель на дескриптор безопасности);это не набор запрашиваемых битов прав доступа, это то, что вы передаете. Я не уверен, почему это будет работать лучше в автономном приложении.

Возможно, вы захотите передать NULL дляпервые параметры, чтобы мьютекс создавался с дескриптором безопасности по умолчанию.

Желаемые биты доступа были бы переданы OpenMutex().

...