Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается синтаксис условных инструкций, используемых функцией MsiEvaluateCondition, а также таблицами последовательностей действий. Дополнительные сведения см. в примерах синтаксиса условного оператора.
Сводка синтаксиса условного оператора
В этой таблице и следующем списке приводится сводка синтаксиса для использования в условных выражениях.
| Пункт | Синтаксис |
|---|---|
| ценность | символ | литерал | целое число |
| оператор сравнения | < | > | <= | >= | = | <> |
| срок | значение | значение оператора сравнения значений | ( выражение )| |
| Логический фактор | термин | НЕ термин |
| Логический термин | Логический фактор | Логический фактор И термин |
| выражение | Логический термин | Логическое выражение ИЛИ |
| символ | свойство | %environment-variable | $component-action | ?component-state | &действие функции | !feature-state |
Имена символов и значения чувствительны к регистру.
Имена переменных среды не учитывает регистр.
Литеральный текст должен быть заключен между кавычками ("текст").
Заметка
Литеральный текст, содержащий кавычки, нельзя использовать в условных инструкциях, так как не существует escape-символа для кавычки внутри литерального текста. Для сравнения с литеральным текстом, содержащим кавычки, текст литерала должен быть помещен в свойство. Например, чтобы убедиться, что свойство SERVERNAME не содержит кавычек, определите свойство с именем QUOTES в таблице свойств со значением ", и измените условие на NOT SERVERNAME><QUOTES.
Несуществующие значения свойств рассматриваются как пустые строки.
Числовые значения с плавающей запятой не поддерживаются.
Операторы и приоритеты совпадают с базовыми и SQL-языками.
Арифметические операторы не поддерживаются.
Скобки можно использовать для переопределения приоритета оператора.
Операторы не учитывает регистр.
Для сравнения строк префикс "~" в операторе выполняется сравнение, которое не учитывает регистр.
Сравнение целого числа со значением строки или свойства, которое не может быть преобразовано в целое число, всегда msiEvaluateConditionFalse, за исключением оператора сравнения "<>", который возвращает msiEvaluateConditionTrue.
Префиксы access
В следующей таблице показаны префиксы, используемые для доступа к различным сведениям системы и установщика для использования в условных выражениях.
| Тип символа | Приставка | Ценность |
|---|---|---|
| Свойство установщика | (нет) | Значение таблицы свойств (свойство) . |
| Переменная среды | % | Значение переменной среды. |
| Ключ таблицы компонентов | $ | Состояние действия компонента. |
| Ключ таблицы компонентов | ? | Установленное состояние компонента. |
| Ключ таблицы компонентов | & | Состояние действия функции. |
| Ключ таблицы компонентов | ! | Установленное состояние компонента. |
Логические операторы
В следующей таблице показаны логические операторы в условных выражениях в порядке высокого к низкому приоритету.
| Оператор | Значение |
|---|---|
| Не | Унарный оператор префикса; инвертирует состояние следующего термина. |
| И | ЗНАЧЕНИЕ TRUE, если оба термина имеют значение TRUE. |
| Или | ЗНАЧЕНИЕ 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. |
| &действие компонента | В таблице условие и в последовательности таблиц после действия CostFinalize. |
| !feature-state | В таблице условие и в последовательности таблиц после действия CostFinalize. |
| ?component-state | В таблице условие и в последовательности таблиц после действия CostFinalize. |
В следующей таблице показаны значения состояния компонентов и компонентов, используемые в условных выражениях. Эти состояния не задаются, пока не вызывается msiSetInstallLevel напрямую или с помощью действия CostFinalize.
| Государство | Ценность | Значение |
|---|---|---|
| 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 записей файлов, а затем задайте свойство.
Связанные разделы