Набор инструментов WiX: Как запустить установщик в комплекте на основе выбора, сделанного в более раннем установщике в том же комплекте?

#installation #wix

Вопрос:

То, что я пытаюсь реализовать, — это способ установки только определенных сторонних зависимостей в комплекте, если пользователь решит установить программные компоненты, для которых требуются эти сторонние зависимости.

Наш более конкретный вариант использования: В комплекте мы сначала запускаем пользовательский установщик для нашего собственного программного обеспечения, где пользователь выбирает необходимые ему функции. Пользователь может выбрать установку программного обеспечения, которое использует лазерные сканеры для обнаружения предметов. Если пользователь все-таки выберет этот вариант, то позже в комплект поставки следует установить стороннее программное обеспечение для настройки лазерного сканера.

То, что я пробовал до сих пор, — это добавление следующего util:FileSearch элемента в Bundle элемент:

 <util:FileSearch Id="CheckOurSoftwareExists"
                 Path="[WindowsVolume]CompanySoftwareOurSoftwareOurSoftware.exe"
                 Variable="OURSOFTWAREEXISTS"
                 Result="exists" />
 

и используя это в ExePackage элементе внутри Chain элемента:

 <ExePackage Id="LaserScannerConfiguratorInstaller"
            SourceFile="3rd-party-installerspathtolaser-scanner-configurator-installer.exe"
            InstallCondition="OURSOFTWAREEXISTS" />
 

Это не работает, потому util:FileSearch что предположительно выполняется уже до запуска любого из входящих в комплект установщиков. Даже если InstallCondition атрибут оценивается непосредственно перед запуском стороннего установщика, переменной OURSOFTWAREEXISTS уже было присвоено значение ранее.

Итак, какие существуют обходные пути для решения этой проблемы?

Комментарии:

1. Происходит ли выбор функций в пользовательском интерфейсе загрузчика или в пользовательском интерфейсе msi?

2. @ChristopherPainter Выбор функций в настоящее время происходит в пользовательском интерфейсе MSI.

Ответ №1:

По — прежнему использование собственного пользовательского интерфейса MSI является основой вашей проблемы. Команда разработчиков WiX не рекомендует этого делать.

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

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

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