Как использовать условные выражения
Очень часто сценарий инсталляции предусматривает различные варианты действий в зависимости от конфигурации компьютера пользователя или выбранных им опций. В данном примере мы покажем как можно выполнять или пропускать определенные команды в зависимости от значения различных переменных. Для простоты мы создадим окно с опциями, которые может менять пользователь, и в зависимости от их значений реализуем разные варианты установки. Аналогичным образом, вы можете использовать в ваших инсталляциях любые другие переменные (определенные пользователем или полученные из Реестра и других источников). Пусть у нас имеются следующие опции:
Диалог с опциями
Имеется три основных способа влиять на ход установки с помощью проверки условий:
- C помощью параметра Условие. Если в команде есть такой параметр и он не пустой, то команда выполнится только, если значение указанного выражения будет истина.
- С помощью команды Конструкция ЕСЛИ. Вы можете определить для нее комбинацию условий и если они выполняются, то будут выполнены внутренние команды.
- C помощью оператора if в команде Исходный код.
Рассмотрим эти случаи подробнее.
Параметр Условие
Если в команде есть такой параметр и он не пустой, то команда выполнится только, если значение указанного выражения будет истина. Вы можете прочитать в статье Как использовать Условие о допустимых форматах условия для этого параметра. У нас имеется опция Показать диалог приветствие с переменной showwelcome. Чтобы данный диалог показывался только когда чекбокс отмечен нам достаточно определить у него Условие как showwelcome. А у команды Диалог – Путь установки мы указали более сложное условие
!( macrox_getint("usernum") % 2 ) || macrox_get("userstr") %== "setup"
Это выражение означает, что диалог выбора пути показывать только, если пользователь ввел 0 или четное число или в строковом поле указал setup. Или предположим у нас есть две версии Full и Light. Одну группу файлов нужно копировать всегда, а другую только когда пользователь выбрал Full версию. У нас переменная userver равна 1 для Full версии, поэтому в дополнительной команде Установочные файлы в поле Условие достаточно указать один из следующих вариантов
Nuserver == 1 macrox_getint(“userver”) == 1
Так же, вы можете заметить что у всех команд Сообщение параметр Условие равен !skipmsg. Это сделано для того, чтобы не показывать их при отмеченной последней опции Skip any MessageBoxes.
Команда Конструкция ЕСЛИ
Не все команды имеют параметр Условие, также иногда необходимо привязать к условию не одну, а несколько команд. В этом случае, можно воспользоваться командой Конструкция ЕСЛИ и вставить другие команды внутрь её. Вы можете определить одно или несколько условий при выполнении которых будут исполнены внутренние команды.
В нашем проекте, мы данным способом обрабатываем чекбокс Create uninstall.exe & uninstall.log. Команда для создания деинсталлятора у нас помещена внутрь Конструкция ЕСЛИ и будет выполнена если переменная isun не равно нулю (чекбокс отмечен). С другой стороны, если чекбокс не отмечен, то нам необходимо отключить запись действий в uninstall.log. Для этого мы определили параметр Функция ИНАЧЕ, где указали имя команды-функции, которая будет выполнена в противном случае. Функция находится в начале скрипта. Туда мы добавим команду отключения записи в uninstall.log и показ одного сообщения.
Команда Исходный код
Самые продвинутые пользователи могут использовать оператор if языка программирования Gentee в командах Исходный код и подключаемых скриптах. Рассмотрим, что у нас указано в этой команде в нашем проекте.
if *macrox_get("userstr") { $body$ }
Как вы помните, у нас есть один строковый параметр в окне настроек. Он записывает введенное значение в переменную userstr. Здесь мы получаем значение переменной userstr и если оно не пустое, то выполняем внутренние команды. В качестве внутренней команды мы просто выведем сообщение со значением данной переменной.
Как видите, инсталлятор CreateInstall предоставляет достаточно возможностей для создания инсталляций со сложными сценариями. Вы можете использовать наиболее удобный вариант для каждой конкретной ситуации.
Скачать пример how-to-use-if-condition.ci