InvokeHelper() создает исключение Доступ запрещен
Сообщество у меня довольно интересная и в то же время тяжелая проблема. У меня есть приложение VB .NET + приложение Service + C++. Приложение C++ генерирует некоторые данные и выполняет обратные вызовы, используя метод InvokeHelper():
InvokeHelper(0x60030000, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
eventType, eventValue);
Первый параметр - это метод, который должен быть вызван. Странный подход, но это не мой код, и я не могу изменить этот путь.
В сервисе у меня есть метод, помеченный атрибутом dispid для получения этого обратного вызова из приложения C++.
<DispId(&H60030000)>
Public Sub ServerEvent(ByVal vEventType As Integer, ByVal vEventValue As Object)
RaiseEvent ControlPanelStateChange(vEventType, vEventValue)
End Sub
Этот код работает правильно, если я вошел в систему как администратор. Но если у пользователя Windows нет прав администратора, сразу после вызова метода InvokeHelper() возникает следующее исключение:
Исключение первого шанса в 0x75B7C42D (KernelBase.dll) в application.exe: 0x80070005: доступ запрещен
Есть ли у вас какие-либо идеи? Я играл с разрешениями DCOM, но результат тот же.
Любая помощь будет фантастической!
1 ответ
Решение проблемы:
DCOMCNFG, щелкните правой кнопкой мыши на "Мой компьютер" и выберите "Свойства" -> вкладка "COM Securities" -> "Права доступа" -> нажмите "Изменить настройки по умолчанию", добавьте в него сетевую службу и дайте ей разрешение "Разрешить локальный доступ". Сделайте то же самое для
Затем -> Разрешения на запуск и активацию, нажмите "Изменить значения по умолчанию" и добавьте к нему сетевую службу и предоставьте ей разрешение "Локальный запуск" и "Локальная активация". Сделайте то же самое для