Сообщество у меня довольно интересная и в то же время тяжелая проблема.
У меня есть приложение 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, но результат тот же.
Любая помощь будет фантастической!
Решение проблемы:
DCOMCNFG, щелкните правой кнопкой мыши на «Мой компьютер» и выберите «Свойства» -> вкладка «COM Securities» -> «Права доступа» -> нажмите «Изменить настройки по умолчанию», добавьте в него сетевую службу и дайте ей разрешение «Разрешить локальный доступ». Сделать то же самое для < Имя_компьютера> \ Пользователи.
Затем -> Разрешения на запуск и активацию, нажмите «Изменить значения по умолчанию» и добавьте к нему сетевую службу и предоставьте ей разрешение «Локальный запуск» и «Активация локальной сети». Сделать то же самое для < Имя_компьютера> \ Пользователи.