Installshield — Модуль слияния — динамический каталог назначения на основе пользовательского диалогового ввода

#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 во время выполнения.

Предлагаемое обходное решение — иметь пользовательское действие «Установить каталог».

Вот шаги:

  1. В распространяемом представлении щелкните правой кнопкой мыши файл MSM -> Свойства -> Назначение -> установить значение [MSM_DEST_STATIC_DIR].
  2. Создайте пользовательское действие типа ‘Set Directory’ с именем каталога — MSM_DEST_STATIC_DIR, значением каталога — [MSD_DEST_DIR_DYNAMIC_VALUE]
  3. После получения пользовательского ввода из диалогового окна сначала обновите значение MSD_DEST_DIR_DYNAMIC_VALUE, затем выполните пользовательское действие, созданное на шаге 2.

При этом я также понял, что невозможно обновить папку IISROOTFOLDER на основе динамического пользовательского ввода. Я выполнил ту же процедуру с пользовательским действием для обновления IISROOTFOLDER.