Подтвердить что ты не робот

Каково использование TARGETDIR и INSTALLDIR в WiX?

В устаревших установщиках Project Studio для развертывания Visual Studio, передав параметр командной строки, который задал значение для TARGETDIR, разрешил мне переопределить местоположение установки по умолчанию (большинство моих установок происходит без взаимодействия с пользователем, поэтому автоматизация командной строки сильно используется). Однако впечатление, которое я получаю, заключается в том, что WiX (по умолчанию) использует TARGETDIR для чего-то другого. Хотя я могу (и буду) обновлять наши инструменты командной строки, чтобы изменить имя параметра, которое все еще оставляет все наши существующие установки, которые нужно будет трогать вручную (нетривиальное усилие).

Можно ли переопределить местоположение установки в пакете WiX, указав TARGETDIR, не нарушая ничего?

4b9b3361

Ответ 1

После выполнения большего копания, похоже, что мой предыдущий опыт является результатом поведения, характерного для VSDPROJ (и, возможно, InstallShield), если WiX соответствует установщику Windows.

Как я обнаружил в этой ссылке, TARGETDIR фактически должен представлять корень диска с самым доступным свободным пространством (при условии, что там более одного), Вот почему проекты WiX имеют каталоги, вложенные там, для программных файлов и т.д. Visual Studio фактически добавляет настраиваемое действие, которое переопределяет это свойство до полного пути установки.

Я смог выполнить то, что хотел, выполнив две вещи:

  • Измените все мои компоненты и группы компонентов для установки на TARGETDIR вместо INSTALLFOLDER (каталог по умолчанию, который вставил WiX)
  • Добавьте настраиваемое действие, которое устанавливает значение свойства TARGETDIR в путь установки, если предположить, что из командной строки не был передан.

Чтобы сделать это, я добавил это под тегом <Product>:

<CustomAction Id="SetTARGETDIR" Property="TARGETDIR" 
              Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" 
              Execute="firstSequence" />

И это в теге <InstallExecuteSequence>:

<Custom Action="SetTARGETDIR" Before="CostFinalize">TARGETDIR=""</Custom>