У меня есть приложение, которое должно быть приложением для одного экземпляра во всех сеансах пользователя на ПК с Windows. Мои исследования до сих пор были сосредоточены вокруг использования мьютекса для достижения этой цели, но у меня возникла проблема, которая, я не уверен, действительно является проблемой, я считаю, что это действительно вопрос наилучшей практики.
Вот код в первую очередь:
Private Const AppVer = "Global\UNIQUENAME" ' This is not what i am using but the name is unique
Public Sub Main()
Dim mutexValue As Long
mutexValue = CreateMutex(ByVal 0&, 1, AppVer)
If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
SaveTitle$ = App.Title
App.Title = "... duplicate instance."
MsgBox "A duplicate instance of this program exists."
CloseHandle mutexValue
Exit Sub
End If
' Else keep on truckin'
Теперь, основываясь на этой статье, я полагаю, что понимаю, что, передав NULL-указатель функции CreateMutex, как я выше, я в основном назначаю любой дескриптор безопасности, связанный с текущим вошедшим в систему пользователем.
Если это означает, что, как мне кажется, это происходит (мне, возможно, потребуется больше указаний здесь), которое говорит мне, что другие пользователи, которые войдут в систему, не смогут "видеть" мьютекс, созданный в ходе сеанса исходного пользователя, и не смогут создать мьютекс с тем же именем.
Теперь, эмпирические доказательства, кажется, подтверждают это. Я использовал окно сообщения для всплытия «LastDLLError», которое я получал, и когда другой пользователь пытался запустить приложение (пока оно уже работало под другой учетной записью пользователя), я получал код ERROR_ACCESS_DENIED. Я в порядке с тестированием против этого вместе с кодом ERROR_ALREADY_EXISTS и просто выход из или / или. Тем не менее, это выглядит как хакерский, и мне интересно, если кто-то может предложить альтернативу. Похоже, «правильная» вещь состоит в том, чтобы передать правильный указатель на функцию CreateMutex так, чтобы у любого пользователя были соответствующие разрешения для просмотра любых существующих мьютексов (мьюкиз?), Но я не уверен, что это возможно без текущего пользователь вошел в систему как администратор (что недопустимо). Любая помощь / руководство с благодарностью. Заранее спасибо!