wix найти, установлены ли предпосылки после дерева выбора функций (customlg) - PullRequest
4 голосов
/ 11 октября 2011

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

  • Функция 1 зависит от Prerequisite-1
  • Функция 2 зависит от Prerequisite-2

Как часть установки, когда пользователь выбирает Компонент 1 из дерева выбора Компонентов (customlg) и нажимает Далее, я хочу проверить, установлена ​​ли необходимая предпосылка для Компонента 1. Если нет, я хочу прервать установку.

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

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

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

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

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

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

<Condition>PREREQ1INSTALLED OR PREREQ2INSTALLED</Condition>
2 голосов
/ 11 октября 2011

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

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

 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
         }
     }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...