Синтаксис условной инструкции

В этом разделе описывается синтаксис условных инструкций, используемых функцией MsiEvaluateCondition и таблицами последовательности действий. Дополнительные сведения см. в разделе "Примеры синтаксиса условного оператора".

Сводка синтаксиса условного оператора

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

Товар Синтаксис
значение символ | литерал | Целое число
оператор сравнения < | > | <= | >= | | | <>
term значение | значение оператора сравнения значений | ( выражение )|
Логический фактор термин | НЕ термин
Логический термин Логический фактор | Логический фактор И термин
выражение Логический термин | Логическое выражение OR
symbol свойство | %environment-variable | $component-action | ?component-state | &feature-action | !feature-state

 

  • Имена символов и значения чувствительны к регистру.

  • Имена переменных среды не учитывает регистр.

  • Литеральный текст должен быть заключен между кавычками ("текст").

    Примечание.

    Литеральный текст, содержащий кавычки, нельзя использовать в условных инструкциях, так как не существует escape-символа для кавычки внутри литерального текста. Для сравнения с литеральным текстом, содержащим кавычки, текст литерала должен быть помещен в свойство. Например, чтобы убедиться, что свойство SERVERNAME не содержит кавычек, определите свойство с именем QUOTES в таблице свойств со значением ", а условие — NOT SERVERNAME><QUOTES.

     

  • Несуществующие значения свойств рассматриваются как пустые строки.

  • Числовые значения с плавающей запятой не поддерживаются.

  • Операторы и приоритеты совпадают с базовыми и SQL-языками.

  • Арифметические операторы не поддерживаются.

  • Скобки можно использовать для переопределения приоритета оператора.

  • Операторы не учитывает регистр.

  • Для сравнения строк префикс "~" в операторе выполняется сравнение, которое не учитывает регистр.

  • Сравнение целого числа со строковым значением или значением свойства, которое нельзя преобразовать в целое число, всегда является msiEvaluateConditionFalse, за исключением оператора сравнения "<>", который возвращает msiEvaluateConditionTrue.

Префиксы access

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

Тип символа Префикс Значение
Свойство установщика (нет) Значение таблицы свойств (Свойство).
Переменная среды % Значение переменной среды.
Ключ таблицы компонентов $ Состояние действия компонента.
Ключ таблицы компонентов ? Установленное состояние компонента.
Ключ таблицы компонентов & Состояние действия функции.
Ключ таблицы компонентов ! Установленное состояние компонента.

 

Логические операторы

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

Оператор Значение
Not Унарный оператор префикса; инвертирует состояние следующего термина.
And ЗНАЧЕНИЕ TRUE, если оба термина имеют значение TRUE.
Or ЗНАЧЕНИЕ TRUE, если одно или оба термина имеют значение TRUE.
Xor ЗНАЧЕНИЕ TRUE, если оба термина не являются истинными.
Eqv ЗНАЧЕНИЕ TRUE, если оба термина имеют значение TRUE или оба термина имеют значение FALSE.
Вли Значение TRUE, если левый термин имеет значение FALSE или правое значение TRUE.

 

Операторы сравнения

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

Оператор Значение
= ЗНАЧЕНИЕ TRUE, если левое значение равно правому значению.
<> Значение TRUE, если левое значение не равно правому значению.
> ЗНАЧЕНИЕ TRUE, если левое значение больше правого значения.
>= ЗНАЧЕНИЕ TRUE, если левое значение больше или равно правому значению.
< ЗНАЧЕНИЕ TRUE, если левое значение меньше правого значения.
<= ЗНАЧЕНИЕ TRUE, если левое значение меньше или равно правому значению.

 

Операторы подстроки

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

Оператор Значение
>< ЗНАЧЕНИЕ TRUE, если левая строка содержит правую строку.
<< ЗНАЧЕНИЕ TRUE, если левая строка начинается с правой строки.
>> ЗНАЧЕНИЕ TRUE, если левая строка заканчивается правой строкой.

 

Побитовые числовые операторы

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

Оператор Значение
>< Побитовая И, если в левом и правом целых числах имеются все биты.
<< Значение True, если высокие 16-разрядные значения левого целого числа равны правому целочислению.
>> Значение True, если низкие 16-разрядные значения левого целого числа равны правому целочислению.

 

Значения состояния компонентов и компонентов

В следующей таблице показано, где допустимо использовать символы признаков и операторов компонентов.

Состояние оператора <> Где этот синтаксис действителен
действие $component В таблице условий и в таблицах последовательностей после действия CostFinalize.
&feature-action В таблице условий и в таблицах последовательностей после действия CostFinalize.
!feature-state В таблице условий и в таблицах последовательностей после действия CostFinalize.
?component-state В таблице условий и в таблицах последовательностей после действия CostFinalize.

 

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

State Значение Значение
INSTALLSTATE_UNKNOWN -1 Никаких действий для компонента или компонента.
INSTALLSTATE_ADVERTISED 1 Объявленная функция. Это состояние недоступно для компонентов.
INSTALLSTATE_ABSENT 2 Компонент или компонент отсутствует.
INSTALLSTATE_LOCAL 3 Компонент или компонент на локальном компьютере.
INSTALLSTATE_SOURCE 4 Компонент или компонент запускаются из источника.

 

Например, условное выражение "&MyFeature=3" оценивается как True, только если MyFeature изменяется с текущего состояния на состояние установки на локальном компьютере, INSTALLSTATE_LOCAL.

Обратите внимание, что не следует зависеть от условия $Component 1=3, чтобы проверка ли компонент1 локально установлен на компьютере. Это может завершиться ошибкой, если компонент 1 установлен несколькими продуктами. После локальной установки Компонента 1 установщик оценивает условие $Component 1=3 как false во время установки Product2. Это связано с тем, что установщик определяет версию компонента с помощью пути к ключу компонента и помечает компонент для установки, если его версия больше или равно установленному компоненту.

Обратите внимание, что установщик не будет напрямую сравнивать тип данных версии в условных инструкциях. Например, для сравнения версий, таких как "01.10" и "1.010", в условном операторе нельзя использовать операторы сравнения. Вместо этого используйте допустимый метод для поиска версии, например описанной в разделе "Поиск существующих приложений, файлов, записей реестра или ini File Entries", а затем задайте свойство.

Использование свойств в условных инструкциях