#installshield #windows-installer #merge-module #installshield-2010
#installshield #windows-установщик #слияние-модуль #installshield-2010
Вопрос:
Я пытаюсь установить переопределение каталога назначения модуля слияния, как описано здесь . Я установил каталог назначения в [BIN]. BIN является общедоступной собственностью. Во время компиляции значение [BIN] равно C:Program Файлы (x86)Название компанииProductName.
На основе пользовательского ввода в пользовательском диалоговом окне это свойство обновляется до C:Program Файлы (x86)CompanyNameUserInputNameProductName.
Все DLL-файлы из модуля слияния копируются в значение времени компиляции [BIN] — C:Program Файлы (x86)Название компанииИмяпродУкта. По какой-то причине динамическое значение в этом случае игнорируется.
Может кто-нибудь сказать мне, что может пойти не так?
Я использую Install Shield версии 2010 Professional Edition, тип проекта — базовый MSI Project
Комментарии:
1. Возможно, вам потребуется прикрепить подробный файл журнала. Например: MSIEXEC /i «example.msi» / l * v «c:tempyourlog.log » и так далее.
Ответ №1:
Модули слияния добавляют GUID к каждому первичному ключу для предотвращения конфликтов слияния. Таким BIN
образом, идентификатор фактически превращается в BIN.G_U_I_D
при использовании в модуле слияния.
Для решения этой проблемы модули слияния предназначены для «переназначения».
Комментарии:
1. Модуль слияния предназначен для «переназначения», в противном случае было бы невозможно изменить каталог назначения в installshield, даже статически.
Ответ №2:
Я опубликовал тот же вопрос на форуме InstallShield, был сделан вывод, что InstallShield не поддерживает изменение каталога назначения файла MSM во время выполнения.
Предлагаемое обходное решение — иметь пользовательское действие «Установить каталог».
Вот шаги:
- В распространяемом представлении щелкните правой кнопкой мыши файл MSM -> Свойства -> Назначение -> установить значение [MSM_DEST_STATIC_DIR].
- Создайте пользовательское действие типа ‘Set Directory’ с именем каталога — MSM_DEST_STATIC_DIR, значением каталога — [MSD_DEST_DIR_DYNAMIC_VALUE]
- После получения пользовательского ввода из диалогового окна сначала обновите значение MSD_DEST_DIR_DYNAMIC_VALUE, затем выполните пользовательское действие, созданное на шаге 2.
При этом я также понял, что невозможно обновить папку IISROOTFOLDER на основе динамического пользовательского ввода. Я выполнил ту же процедуру с пользовательским действием для обновления IISROOTFOLDER.