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

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

2 ответов


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

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


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

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

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