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" -> "Права доступа" -> нажмите "Изменить настройки по умолчанию", добавьте в него сетевую службу и дайте ей разрешение "Разрешить локальный доступ". Сделайте то же самое для \Users.

Затем -> Разрешения на запуск и активацию, нажмите "Изменить значения по умолчанию" и добавьте к нему сетевую службу и предоставьте ей разрешение "Локальный запуск" и "Локальная активация". Сделайте то же самое для \Users.

Другие вопросы по тегам