COM-объект создается из одной программы, но не из другой, запущенной под тем же пользователем - PullRequest
5 голосов
/ 13 июля 2011

Мы столкнулись с довольно странной проблемой с нашим COM-компонентом. Компонент реализует общеизвестный интерфейс и используется сторонним продуктом с закрытым исходным кодом (в дальнейшем именуемым Продукт X). Продукт X настраивается через реестр Windows. Продукт X считывает реестр и находит идентификатор класса нашего компонента.

Наш компонент - 32-битный in-proc, реализованный на нативном C ++ с использованием ATL, и мы регистрируем его в COM + в 64-битных системах, чтобы он активировался в суррогатном процессе.

Теперь продукт X не может использовать наш компонент и отслеживает E_ACCESSDENIED в журнале событий Windows, и мы также видим следующее сообщение об ошибке

Настройки разрешений для конкретного приложения не предоставляют права локальной активации для приложения COM-сервера с CLSID {идентификатор класса COM-объекта здесь} и APPID {идентификатор приложения приложения COM + здесь} для пользователя MACHINENAME \ administrator SID (SID здесь) с адреса LocalHost (используя LRPC). Это разрешение безопасности можно изменить с помощью инструмента администрирования служб компонентов.

в системном журнале.

Это похоже на проблему с разрешениями. Итак, мы создали программу «Hello, world» на C #, которая new является COM-компонентом и вызывает из него один тривиальный (никогда не сбойный) метод:

компонент OurComponent.IOurComponent = новый компонент OurComponent.OurcomponentClass (); component.TrivialMethod ();

Когда эта программа запускается из той же учетной записи, что и продукт X, она работает нормально - создается экземпляр компонента, и мы даже видим, как в консоли COM + вращается «зеленый шар с плюсом».

Таким образом, у нас есть две программы, запущенные на одном компьютере под одной и той же учетной записью пользователя, и одна может создать экземпляр компонента COM, а другая - нет. Что может быть причиной этого?

1 Ответ

0 голосов
/ 03 августа 2011

Я думаю, вам не хватает конфигурации для приложения.

Итак, две вещи для этого работают. 1 Ваше приложение должно быть скомпилировано как «Com Visible». 2 Вам необходимо зарегистрировать ком-компонент (если он еще не зарегистрирован)

Перейдите в Пуск -> Администрирование -> Службы компонентов. Разверните Службы компонентов, Компьютеры, Мой компьютер, Конфигурация DCOM. Прокрутите вниз и найдите приложение. Справа -> Нажмите -> Свойства и выберите вкладку Безопасность. Здесь вы увидите некоторые параметры - первый блок «Разрешения на запуск и активацию» - убедитесь, что установлен переключатель «Настроить», и нажмите «Изменить». Теперь укажите учетную запись, которую вы используете для запуска, активации и удаленного запуска / активации. Перезагрузите компьютер (или перезапустите службу / приложение) и, надеюсь, он будет работать.

...