2010-06-16 5 views
2

У нас есть устаревшее приложение VB6, которое обновляется при запуске, вытаскивая последние файлы и регистрируя COM-компоненты. Это работает как для локальных (regsvr32) компонентов ActiveX COM, так и для удаленных (clireg32) компонентов ActiveX COM, зарегистрированных в COM + на другом компьютере.Удаленная регистрация DLL без доступа к HKEY_CLASSES_ROOT

Новые требования не позволяют нам писать в HKEY_LOACL_MACHINE (HKLM) по соображениям безопасности, что, очевидно, происходит по умолчанию при вызове regsvr32 и clireg32.

Мы разработали способ регистрации локального COM-компонента под HKEY_CURRENT_USER \ Software \ Classes (HKCU) с использованием метода Windows API RegOverridePredefKey. Это работает, перенаправляя вставки в реестр в местоположение HKCU. Затем, когда COM-компоненты создаются, окна сначала обращаются к HKCU, прежде чем искать информацию о компонентах в HKLM. Это заменяет то, что делает regsvr32.

Проблема, которую мы испытываем в это время, когда мы пытаемся зарегистрировать VBR/TLB, используя clireg32, этот процесс регистрации также добавляет регистрационные ключи к HKEY_LOACL_MACHINE.

Есть ли способ перенаправить clireg32.exe для регистрации компонента HKEY_CURRENT_USER? Существуют ли какие-либо другие методы, которые позволили бы нам зарегистрировать эти компоненты COM + на клиентской машине с ограниченным доступом к безопасности?

Наше единственное решение в это время было бы вручную записать регистрационную информацию в реестр, но это не идеально и будет проблемой для maint.

ответ

3

Я вижу несколько счастливых ответов здесь. Понятие приложения, использующего 12-летнюю технологию, требующую установки обновлений, является нечетным и просто не поддерживается на современных машинах. Я думаю, что общее решение, такое как reg-free COM, несовместимо с COM +. Также довольно странно, что обновление стиля исправления ошибок должно перерегистрировать компоненты. Вы подтвердили, что это действительно требуется?

Расширение этой темы, как часто вы меняете GUID в развертываниях? Принимая на себя ответственность за регистрацию самостоятельно, а не оставляя ее перед самими компонентами, должны быть работоспособными, когда ключи не меняются постоянно. Может быть так же просто, как захватить регистрацию с помощью утилиты ProcMon от SysInternals, составить файл .reg, который вместо этого устанавливает ключи HKCU.

Помимо этого, вам действительно нужно получить право на ключи реестра, которые не могут быть записаны. Если вы не можете получить одобрение от клиента, попробуйте запросить запланированную задачу, устанавливающую обновления. Они могут получить доступ, если это разрешит администратор sys.

+0

Все ваши комментарии ударили по дому, и мы подтолкнули их. Я хочу, чтобы ответ был простым шагом в .net. Все новые разработчики сделаны в .net, но остальная часть приложения «просто работает» и исправления ошибок происходят. Мы стараемся, чтобы он работал так, как есть, без полной перезаписи. GUID и интерфейсы часто не меняются, мы использовали ProcMon/Regmon, чтобы узнать, что происходит, и это одна из альтернатив, которую мы можем использовать. Как вы уже упоминали, Reg Free COM не является альтернативой, которую мы можем использовать. –

Смежные вопросы