Какими привилегиями должен обладать процесс для активации COM-сервера вне процесса - PullRequest
2 голосов
/ 17 апреля 2011

У меня есть сторонний внепроцессный COM-сервер и клиентская программа, которая пытается его активировать.Я создал два: на C # и на C ++.Когда я запускаю свою клиентскую программу (любую из них) из VS2010 с помощью Ctrl-F5 (которая запускается в повышенном режиме), клиент не может активировать COM-сервер.Я получаю ошибку "Класс не зарегистрирован".Когда я запускаю клиент из командной строки / проводника Windows, клиент успешно активирует COM-сервер.

Таким образом, у меня есть один exe-модуль, который работает (активирует COM-сервер) в одном случае и не работает (не работает).COM сервер) в другом случае.Последний случай - это когда модуль запускается из VS2010 (не в отладке, просто по Ctrl-F5).

Это заставляет меня думать, что существует некоторая проблема с привилегиями, так как модуль, когда он запускается vs2010, наследует свои привилегии.

С помощью processprivileges.codeplex.com я получаю два набора привилегий: Случай, когда он не работает: IncreaseQuota => Отключено
Безопасность => Отключено
TakeOwnership => Отключено
LoadDriver => Отключено
SystemProfile => Отключено
SystemTime => Отключено
ProfileSingleProcess => Отключено
IncreaseBasePriority => Отключено
CreatePageFile => Отключено
Резервное копирование => Отключено
Восстановление => Отключено
Выключено => Отключено
Отладка => Включено
SystemEnvironment => Отключено
ChangeNotify => Включено
RemoteShutdown => Отключено
Отменить => Отключено
ManageVolume => Отключено
Имитировать => Включено
CreateGlobal => Включено
IncreaseWorkingSet => Отключено
TimeZone=> Отключено
CreateSymbolicLink => Отключено

Это 'когда это работает: выключение => Отключено
ChangeNotify => Включено
Отменить => Отключено
IncreaseWorkingSet => Отключено
TimeZone => Отключено

Я не вижу никаких подозрительных привилегий, связанных с активацией COM.Но я не вижу других причин.

Почему COM-сервер, работающий вне процесса, успешно активируется в одном случае, а не активируется в другом?

1 Ответ

1 голос
/ 17 апреля 2011

«Класс не зарегистрирован» - проблема реестра. Не упустите настройку цели платформы в 64-разрядной версии Windows. Используйте ProcMon от SysInternals, чтобы проверить, почему возникают проблемы с поиском раздела реестра. У вас есть «хорошие» и «плохие» следы, которые вы можете сравнить, чтобы они помогали копаться в гору данных. Важным является раздел реестра CLSID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...