Синтаксис условной инструкции
В этом разделе описывается синтаксис условных инструкций, используемых функцией 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", а затем задайте свойство.
См. также