WiX - Как использовать файл конфигурации, чтобы решить, какой MSI запускать?

Я хотел бы создать пакет установщика, который запускает несколько установщиков в цепочке. Основной пакет должен использовать файл конфигурации, чтобы установщик решал, какие версии MSI запускать в терминах этого конфигурационного XML. Цель состоит в том, чтобы избежать необходимости обновлять какие-либо проекты WiX или Bootstrapper при выходе новой версии программного обеспечения. Вместо этого достаточно будет обновить конфигурационный XML, чтобы изменить то, что будет установлено внутри цепочки.

Например, можно просто обновить исходный путь определенного MSI внутри XML, чтобы основной установщик прочитал этот новый путь и запустил новый MSI вместо старого.

Насколько я понимаю, проблема в проекте Bootstrapper заключается в том, что все пакеты жестко запрограммированы, поэтому он не обеспечивает гибкости для исходного пути пакетов.

Я также пробовал использовать настраиваемые действия внутри отдельных MSI. Выглядело многообещающим то, что я мог получить и установить свойства MSI с помощью C # после чтения XML, однако эти свойства нельзя было использовать в качестве переменных для исходных путей.

Я также попытался запустить второй MSI, используя настраиваемые действия внутри первого MSI. К сожалению, это не сработало.

Буду признателен за любые рекомендации!

tldr, я бы хотел запустить установщики, которые изначально не были включены в сборку. Аналогично DownloadUrl, но из локальной сети. Его значение может быть изменено с помощью свойств, поэтому нет необходимости перестраивать проект каждый раз, когда изменяется путь.


person Marlyyy    schedule 05.06.2015    source источник


Ответы (1)


Я думаю, что было бы сложно использовать один XML-файл для управления установленными пакетами. В сценарии записи параметры настройки переменных ограничены:

  • <FileSearch>
  • <RegistrySearch>
  • <DirectorySearch>
  • <ComponentSearch>
  • <ProductSearch>

Из них только <FileSearch> и <DirectorySearch> могут исследовать местоположение источника.

Возможно, вы сможете заставить это работать, используя наличие / отсутствие файла для управления установкой пакета MSI. В своем проекте записи используйте элемент util: FileSearch, чтобы найти файл из исходного пути:

<util:FileSearch Id="InstallMSI01"
      Variable="InstallMSI01"
      Result="exists"
      Path="[SourceDir]InstallMSI01.txt" />

Это должно установить для переменной InstallMSI01 значение «true» или «false» в зависимости от того, существует ли файл InstallMSI01.txt в исходном пути. Затем вы можете использовать переменную в условии установки в MSIPackage:

<MsiPackage
    Id="MSI01"
    SourceFile="-- Your Source Path--"
    InstallCondition="InstallMSI01 = &quot;true&quot;">
</MsiPackage>
person bradfordrg    schedule 05.06.2015
comment
Конечно, я до сих пор не думал об этом. Однако это все равно потребует перестройки проекта Bootstrapper, что сделает его менее удобным в обслуживании. Также представьте, есть ли у установщика сотни версий. Для этого потребуется 100 записей в проекте. Я хотел бы поддерживать только по одному для каждого программного обеспечения и устанавливать его соответственно в зависимости от версии, которую я хочу. - person Marlyyy; 05.06.2015
comment
Если у вас есть сотни пакетов MSI, этот подход нецелесообразен. - person bradfordrg; 05.06.2015
comment
Если все, что вам нужно, это программа lsuncher, которая читает Xml и запускает серию установок MSI (возможно, с помощью командной строки, которая указывает место установки), то это не похоже на сложную задачу кодирования. Вам нужно больше, чем это? Или по какой-то причине вы не можете программно изменить или собрать XML-код начальной загрузки WiX и пересобрать пакет? - person PhilDW; 05.06.2015
comment
Да, к сожалению, перекомпоновка проекта WiX с разными наборами файлов - это не вариант, потому что я хотел бы сохранить копию каждой сборки, а каждая сборка была бы ужасно большой. Я бы хотел создать единую сборку вместе с легко обновляемыми конфигурациями XML. Сейчас я собираюсь создать собственный загрузчик, в котором я могу переопределить поведение движка Burn. Однако я не уверен, что это позволит мне запускать установщики, которые не включены в мою сборку. - person Marlyyy; 05.06.2015