Как установить Shield & # 8220; COM Extract в Build & # 8221; Работа?
-
06-07-2019 - |
Вопрос
Наш продукт содержит встроенный COM-сервер VC ++ ATL с двумя открытыми COM-классами - ClassA и ClassB. Этот COM-сервер добавлен в установочный пакет Install Shield 2008 и «COM Extract at Build». свойство установлено для компонента.
ClassA и ClassB предоставляются компонентом совершенно одинаковым образом - для каждого из них есть файл .rgs, оба файла .rgs компилируются в ресурсы компонента, и для обоих из них вызывается CAtlModule :: UpdateRegistryFromResourceS (). р>
Однако, когда мы запускаем regsvr32 на COM-сервере, оба класса правильно отображаются в реестре, но когда мы запускаем установку пакета, Install Shield открывает только один из них.
Как Install Shield определяет, какие изменения необходимо внести в реестр? Что мы должны проверить, чтобы определить источник проблемы?
Решение
Я подозреваю, что они используют RegOverridePredefKey
(по крайней мере, MSDN намекает на это):
http://msdn.microsoft.com/en-us /library/ms724901(VS.85).aspx р>
После того, как целевые ключи были переопределены в каком-то приватном месте, InstallShield может проанализировать структуру реестра и сгенерировать для нее скрипт.
Это все предположение, хотя я не знаю, что на самом деле делает InstallShield, но я думаю, что начну с RegMon во время выполнения сборки InstallShield, чтобы посмотреть, смогу ли я определить, куда идут регистрации, а затем попытаться определить, что он делает неправильно.
Другие советы
Если вы хотите получить подробное объяснение (или столько, сколько ему позволено дать), вы захотите перейти на форум сообщества InstallShield и опубликовать вопрос для сотрудника InstallShield MichalU. Если вы хотите узнать, как все это работает, вы можете взглянуть на исходный код WiX, поскольку у Heat есть возможность извлекать com-информацию.
Если извлечение COM при сборке создает проблемы, вы можете отключить его и вставить данные COM статически.