wix определяет, установлены ли предварительные условия после дерева выбора объектов (настраиваемый lg)

#wix

#wix

Вопрос:

Я создаю установщик с использованием wix. Мой установщик устанавливает 2 функции.

  • Функция 1 зависит от предварительного условия-1
  • Функция 2 зависит от предварительного условия-2

В рамках установки, когда пользователь выбирает функцию 1 из дерева выбора функций (настраиваемый lg) и нажимает Далее, я хочу проверить, установлено ли предварительное условие для функции 1. Если нет, я хочу прервать установку.

Я могу найти необходимое условие с помощью RegistrySearch.

Как выполнить эту задачу?

Ответ №1:

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

Вместо этого пусть все идет своим обычным путем. Используется RegistrySearch для определения, установлены ли ваши два предварительных условия. В результате у вас будет два свойства PREREQ1INSTALLED и PREREQ2INSTALLED набор. Сделайте условия вашей функции зависимыми от этих свойств, и пользователь просто не сможет выбрать тот, который отключен.

Если у вас есть только эти 2 функции, и, следовательно, по крайней мере одна должна быть доступна для установки, создайте условие запуска, чтобы проверить, установлен ли хотя бы один из этих предварительных условий:

 <Condition>PREREQ1INSTALLED OR PREREQ2INSTALLED</Condition>
  

Ответ №2:

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

Для получения всех функций в пользовательском действии вы можете использовать этот пример кода:

  foreach (FeatureInfo fi in session.Features)
 {
     if (fi.RequestState == InstallState.Local || fi.RequestState == InstallState.Source || fi.RequestState == InstallState.Default)
     {           
         if (fi.Name == "Feature1")
         {
             //check for prerequisite for Feature1
         }
         if (fi.Name == "JobService")
         {
             //check for prerequisite for Feature2
         }
     }
}
  

Если предварительное условие не установлено, установите некоторую переменную сеанса для отображения сообщения в пользовательском интерфейсе