条件语句语法

本部分介绍 MsiEvaluateCondition 函数和作 序列表使用的条件语句的语法。 有关详细信息,请参阅 条件语句语法的示例。

条件语句语法摘要

下表和以下列表汇总了在条件表达式中使用的语法。

项目 语法
价值 symbol |literal |整数
comparison-operator < |> |<= |>= |= |<>
术语 value |value comparison-operator value |( 表达式 )|
布尔因子 term | 术语
Boolean-term 布尔因子 |布尔因子 AND 术语
表达 布尔术语 |布尔术语 OR 表达式
象征 属性 |%environment-variable |$component-action | ?component-state |&feature-action | !feature-state

 

  • 符号名称和值区分大小写。

  • 环境变量名称不区分大小写。

  • 文本文本必须括在引号(“text”)之间。

    注意

    包含引号的文本不能用于条件语句中,因为文本文本中没有引号的转义字符。 若要与包含引号的文本文本进行比较,文本文本应放在属性中。 例如,若要验证 SERVERNAME 属性是否不包含任何引号,请在 属性表中定义一个名为 QUOTES 的属性,其值为“,并将条件更改为 NOT SERVERNAME><QUOTES。

     

  • 不存在的属性值被视为空字符串。

  • 不支持浮点数值。

  • 运算符和优先级与 BASIC 和 SQL 语言相同。

  • 不支持算术运算符。

  • 括号可用于替代运算符优先级。

  • 运算符不区分大小写。

  • 对于字符串比较,前缀为运算符的波形符“~”执行不区分大小写的比较。

  • 不能转换为整数的字符串或属性值的整数比较始终 msiEvaluateConditionFalse,但比较运算符“<>”除外,该运算符返回 msiEvaluateConditionTrue

访问前缀

下表显示了用于访问各种系统和安装程序信息的前缀,以便在条件表达式中使用。

符号类型 前缀 价值
Installer 属性 (无) 属性的值(属性) 表。
环境变量 % 环境变量的值。
组件表键 $ 组件的作状态。
组件表键 ? 组件的已安装状态。
功能表键 & 功能的作状态。
功能表键 ! 该功能的已安装状态。

 

逻辑运算符

下表按高到低优先级的顺序显示条件表达式中的逻辑运算符。

算子 意义
前缀一元运算符;反转以下术语的状态。
如果两个术语均为 TRUE,则为 TRUE。
如果任一术语或两个术语均为 TRUE,则为 TRUE。
异或 如果两个术语都为 TRUE,则为 TRUE。
Eqv 如果两个术语均为 TRUE 或两个术语均为 FALSE,则为 TRUE。
小鬼 如果左术语为 FALSE 或右术语为 TRUE,则为 TRUE。

 

比较运算符

下表显示了条件表达式中使用的比较运算符。 这些比较运算符只能在两个值之间发生。

算子 意义
= 如果左值等于右值,则为 TRUE。
<> 如果左值不等于右值,则为 TRUE。
> 如果左值大于右值,则为 TRUE。
>= 如果左侧值大于或等于右值,则为 TRUE。
< 如果左值小于右值,则为 TRUE。
<= 如果左侧值小于或等于右侧值,则为 TRUE。

 

子字符串运算符

下表显示了条件表达式中使用的子字符串运算符。 子字符串运算符可以在两个字符串值之间发生。

算子 意义
>< 如果左侧字符串包含右侧字符串,则为 TRUE。
<< 如果左侧字符串以右字符串开头,则为 TRUE。
>> 如果左字符串以右字符串结尾,则为 TRUE。

 

按位数字运算符

下表显示了条件表达式中的按位数值运算符。 这些运算符可以在两个整数值之间发生。

算子 意义
>< 按位 AND,如果左右整数具有任何共同位,则为 TRUE。
<< 如此 如果左整数的高 16 位等于右整数。
>> 如此 如果左整数的低 16 位等于右整数。

 

功能和组件状态值

下表显示了使用功能和组件运算符符号的有效位置。

运算符 <状态> 此语法有效位置
$component作 条件 表中,在 序列 表中,CostFinalize作之后。
&功能作 条件 表中,在 序列 表中,CostFinalize作之后。
!feature-state 条件 表中,在 序列 表中,CostFinalize作之后。
?component-state 条件 表中,在 序列 表中,CostFinalize作之后。

 

下表显示了条件表达式中使用的功能和组件状态值。 在直接或通过 CostFinalize作调用 msiSetInstallLevel 之前,才会设置这些状态。

价值 意义
INSTALLSTATE_UNKNOWN -1 不对功能或组件执行任何作。
INSTALLSTATE_ADVERTISED 1 播发的功能。 此状态不适用于组件。
INSTALLSTATE_ABSENT 2 功能或组件不存在。
INSTALLSTATE_LOCAL 3 本地计算机上的功能或组件。
INSTALLSTATE_SOURCE 4 功能或组件从源运行。

 

例如,仅当 MyFeature 从当前状态更改为本地计算机上安装的状态时,条件表达式“&MyFeature=3”的计算结果为 True,INSTALLSTATE_LOCAL。

请注意,不应依赖于条件$Component 1=3 来检查是否在本地安装了 Component1。 如果 Component1 由多个产品安装,则可能会失败。 在 Product1 在本地安装 Component1 后,安装程序在安装 Product2 期间将条件 $Component 1=3 评估为 False。 这是因为安装程序使用组件的密钥路径确定组件的版本,如果组件的版本大于或等于已安装组件,则将其标记为安装。

请注意,安装程序不会在条件语句中直接比较 版本 数据类型。 例如,不能使用比较运算符比较条件语句中的“01.10”和“1.010”等版本。 请改用有效的方法来搜索版本,如 搜索现有应用程序、文件、注册表项或 .ini 文件条目,然后设置属性。

在条件语句中使用属性