#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
}
}
}
Если предварительное условие не установлено, установите некоторую переменную сеанса для отображения сообщения в пользовательском интерфейсе