#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, либо завершает работу без его установки.