Как работает Install Shield «COM Extract at Build»? - PullRequest
1 голос
/ 26 октября 2009

Наш продукт содержит встроенный 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 обнаруживает, какие изменения в реестре следует внести? Что мы должны проверить, чтобы определить источник проблемы?

Ответы [ 2 ]

2 голосов
/ 26 октября 2009

Я подозреваю, что они используют RegOverridePredefKey (по крайней мере, MSDN подсказывает, что они должны): http://msdn.microsoft.com/en-us/library/ms724901(VS.85).aspx

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

Это все гипотеза, хотя я не знаю, что на самом деле делает InstallShield, но я думаю, что начну с RegMon , пока запускается сборка InstallShield, чтобы посмотреть, смогу ли я определить, куда идут регистрации и затем попытайтесь определить, что он делает не так.

1 голос
/ 02 ноября 2009

Если вы хотите получить подробное объяснение (или столько, сколько ему позволено), вы захотите перейти на форум сообщества InstallShield и опубликовать вопрос для сотрудника InstallShield MichalU. Если вы хотите узнать, как все это работает, вы можете посмотреть исходный код WiX, поскольку у Heat есть возможность извлекать ком-информацию.

Если извлечение COM при сборке создает проблемы, вы можете отключить его и вставить данные COM статически.

...