Как зарегистрировать COM-объект для всех пользователей - PullRequest
8 голосов
/ 14 апреля 2011

Я использую regsvr32 MyCOM.dll для регистрации моего com-объекта для моего приложения. Это прекрасно работает под моей учетной записью администратора. если пользователь переключается на пользователя без прав администратора, программа завершается ошибкой. Кажется, что COM-объект не загружен для пользователя без прав администратора. Любые идеи о том, почему это может быть или возможное решение?

Ответы [ 2 ]

10 голосов
/ 14 апреля 2011

regsvr32 MyCOM.dll вызовет экспортированную функцию DllRegisterServer в dll, что происходит там до dll. Обычно он регистрирует свой CLSID и другую регистрационную информацию в HKEY_LOCAL_MACHINE \ software \ Classes (то же самое, что HKEY_CLASSES_ROOT для операций записи), поэтому регистрация должна быть видимой для каждого пользователя, если только у пользователя нет конфликтующей регистрации в HKEY_CURRENT_USER \ software \ Classes.

Я предполагаю, что регистрация не является проблемой, но ваш COM-объект делает что-то, что препятствует его загрузке для пользователей, не являющихся администраторами (Запрос доступа на запись к ключу в HKEY_LOCAL_MACHINE и т. Д.) Вы можете использовать Process Monitor и найдите ошибки ACCESS_DENIED и посмотрите, дает ли это какие-либо подсказки.

Другой вариант - вручную зарегистрировать объект в HKEY_CURRENT_USER \ software \ Classes для пользователя без прав администратора. Это должно исключить проблемы с регистрацией.

8 голосов
/ 14 апреля 2011

COM-объекты обычно должны быть зарегистрированными пользователем-администратором.(Здесь есть тонкости и исключения, которые я не буду здесь рассматривать, потому что, исходя из вашего описания, дело не в этом.)

Однако, как только COM-объект зарегистрирован, все пользователи должны иметь возможность использоватьпри условии, что объект был зарегистрирован с соответствующими разрешениями.

...