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

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

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

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

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

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

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

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

1 ответ

Решение

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

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