2015-06-05 6 views
2

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

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

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

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

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

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

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

ответ

0

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

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

Из них только <FileSearch> и <DirectorySearch> можете исследовать исходный локат ион.

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

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

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

<MsiPackage 
    Id="MSI01" 
    SourceFile="-- Your Source Path--" 
    InstallCondition="InstallMSI01 = &quot;true&quot;"> 
</MsiPackage> 
+0

Это, безусловно, то, о чем я до сих пор не думал. Тем не менее, это все равно потребует перестройки проекта Bootstrapper, что сделает вещи менее удобными. Также представьте, есть ли 100 версий для установщика. Для этого потребуется 100 записей в рамках проекта. Я хотел бы сохранить только один для каждого программного обеспечения и установить его соответственно в зависимости от версии, которую я хочу. – Marlyyy

+0

Если у вас есть пакеты из MSI 100, то этот подход нецелесообразен. – bradfordrg

+0

Если вам нужна программа lsuncher, которая читает Xml и запускает ряд установок MSI (возможно, с командной строкой, которая указывает местоположение установки), это не похоже на сложную задачу кодирования. Вам нужно больше, чем это? Или есть какая-то причина, по которой вы не можете программно изменить или построить загрузочный буткс WiX Xml и перестроить пакет? – PhilDW