2015-07-22 5 views
0

Сообщество, у меня есть довольно интересная и в то же время тяжелая проблема. У меня есть приложение VB .NET + Service + C++. Метод C++ приложение генерирует некоторые данные и делает обратные вызовы с использованием InvokeHelper():InvokeHelper() throws Доступ исключен исключение

InvokeHelper(0x60030000, DISPATCH_METHOD, VT_EMPTY, NULL, parms, 
    eventType, eventValue); 

Первым параметром является DISPID методы, который должен быть вызван. Странный подход, но это не мой код, и я не могу изменить этот путь.

В службе У меня есть метод, отмеченный атрибутом dispid, чтобы получить этот обратный вызов из приложения C++.

<DispId(&H60030000)> 
Public Sub ServerEvent(ByVal vEventType As Integer, ByVal vEventValue As Object) 
    RaiseEvent ControlPanelStateChange(vEventType, vEventValue) 
End Sub 

Этот код работает правильно, если я вошел в систему как администратор. Но если окна пользователь имеет право администратора не сразу после вызова метода() InvokeHelper следующего исключения происходит:

первого шанс исключения в 0x75B7C42D (KernelBase.dll) в: 0x80070005 приложению application.exe: Доступ запрещен

Есть ли у вас идеи? Я играл с разрешениями DCOM, но результат тот же.

Любая помощь будет фантастической!

ответ

0

Решение проблемы:

DCOMCNFG, щелкните правой кнопкой мыши на Мой компьютер и выберите Свойства -> COM вкладка Ценные бумаги -> Права доступа -> нажмите кнопку Изменить настройки по умолчанию и добавить сетевую службу к нему и дать ему Разрешить разрешение локального доступа. Сделайте то же самое для < Machine_name> \ Users.

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

 Смежные вопросы

  • Нет связанных вопросов^_^