带格式

带格式数据类型是一个文本字符串,经过处理以解析嵌入的属性名称、表键、环境变量引用和其他特殊子字符串。 识别以下约定来解析字符串:

  • 没有匹配对的方括号 ([ ]) 或花括号 ({ }) 会保留在文本中。

  • 如果遇到形式为 [propertyname] 的子字符串,则将其替换为属性的值。 如果 propertyname 不是有效的属性名称,则子字符串解析为空。 例如,LaunchCondition 表的“描述”列采用带格式字符串。 如果 ERRORTXT 已设置为“请联系支持人员”,则因启动条件不满足而显示的文本将包含此字符串。 如果未设置 ERRORTXT,则因启动条件不满足而显示的文本将是“系统不符合安装要求”。

    条件 说明
    Version9X 系统不符合安装要求。 [ERRORTXT]

     

  • 方括号可能会被迭代,属性名称从内向外解析。例如,假设文本中是子字符串 [[PropertyA]]。 首先,检索属性 PropertyA 的值。 如果该值是有效的属性名称,例如 PropertyB,则检索 PropertyB 的值,并将整个子字符串 [[PropertyA]] 替换为 PropertyB 的值。 如果 PropertyA 不是有效的属性名称,或者如果 PropertyA 的值不是有效的属性名称,则子字符串为空。

  • 如果发现 [%environmentvariable] 形式的子字符串,则环境变量的值将替换该子字符串。

  • 如果发现形式为 [\x] 的子字符串,则将其替换为字符 x,其中 x 是一个字符,不进行任何进一步处理。 仅保留反斜杠后的第一个字符;其他部分全部删除。 例如,若要包括左方括号 ([),请使用 [\[]。 文本 [\[]Bracket Text[\]] 解析为 [Bracket Text]。

  • 如果子字符串括在花括号 ({ }) 中,并且不包含任何括在方括号 ([ ]) 中的属性名称,则子字符串保持不变,包括花括号。

  • 如果子字符串括在花括号 ({ }) 中,并且包含一个或多个括在方括号 ([ ]) 中的属性名称,则如果所有属性名称都有效,将显示文本(带有已解析的替换)而不含花括号。

  • 如果发现形式为 [~] 的子字符串,则将其替换为 null 字符。 这用于在注册表中编写 REG_MULTI_SZ 字符串。 请注意,[~] 还用于使用环境表为环境变量追加值或添加前缀值。

  • 如果发现形式为 [#filekey] 的子字符串,将其替换为文件的完整路径,并将值 filekey 作为关键字写入文件表。 在安装程序运行 CostInitialize 操作FileCost 操作CostFinalize 操作之前,[#filekey] 的值保持为空并且不会替换为路径。 [#filekey] 的值取决于文件所属组件的安装状态。 如果组件是从源运行的,则值是文件源位置的路径。 如果组件是在本地运行,则值是安装后文件目标位置的路径。 如果组件的操作状态为不存在,则使用组件的已安装状态来确定 [)。

  • 如果发现形式为 [$componentkey] 的子字符串,将其替换为组件的安装目录,并将值 componentkey 作为关键字写入组件表。 在安装程序运行 CostInitialize 操作FileCost 操作CostFinalize 操作之前,[#componentkey] 的值保持为空并且不会替换为目录。 [$componentkey] 的值取决于组件的安装状态及其出现的位置。 在注册表的“值”列中,此子字符串可能指的是组件的操作状态或请求的操作状态。 在所有其他情况下,此子字符串指的是组件的操作状态。 例如,如果组件是从源运行的,则值是文件的源目录。 如果组件是在本地运行,则值是安装后的目标目录。 如果组件不存在,则值为空。 Windows Installer 跟踪组件的操作状态和请求的安装状态。 例如,如果组件已安装,则它的请求状态可能是本地,操作状态可能是 null。 有关检查组件安装状态的详细信息,请参阅检查功能、组件、文件的安装

  • 请注意,如果组件已安装,并且在当前安装期间未被重新安装、删除或移动,则组件的操作状态为 null,字符串 [$componentkey] 评估为 null。

  • 如果发现形式为 [!filekey] 的子字符串,将其替换为文件的完整短路径,并将值 filekey 作为关键字写入文件表

    此语法仅在注册表或 IniFile 表的“值”列中使用时才有效。 在其他列中使用时,此语法视作 [#filekey]。