脚本条目中的大多数都可以嵌入常量。这些预定义的字符串被包含在大括号 { } 中。根据用户的选择和系统配置,安装或卸载程序会将常量翻译为其字面值。例如,如下面所述,{win} 在大多数系统上将翻译为 “C:\WINDOWS”。
字符 “{” 被视为常量的开始。如果希望在支持常量的位置使用该实际字符,则必须使用两个连续的 “{” 字符。(不需要双写 “}” 字符。)
当常量后面紧跟着反斜杠时,如果常量的值已经以反斜杠结尾,安装或卸载程序将自动移除该反斜杠。因此,如果某个特定常量的值是 "C:\"
,{constantname}\file
将被翻译为 "C:\file"
,而不是 "C:\\file"
。如果要防止这种情况发生,请将反斜杠用{ }
字符括起来,例如{app}{\}
。
以下是支持的常量列表。
目录常量
{app}
应用程序目录,用户在向导的“选择目标位置”页面上选择。
例如:如果在条目上使用 {app}\MYPROG.EXE
,并且用户选择 "C:\MYPROG"
作为应用程序目录,安装程序将其翻译为 "C:\MYPROG\MYPROG.EXE"
。
{win}
系统的 Windows 目录。
例如:如果在条目上使用 {win}\MYPROG.INI
,并且系统的 Windows 目录是C:\WINDOWS"
,安装或卸载程序将其翻译为 "C:\WINDOWS\MYPROG.INI"
。
{sys}
系统的 System32 目录。
例如:如果在条目上使用 {sys}\CTL3D32.DLL
,并且系统的 Windows System 目录是 "C:\WINDOWS\SYSTEM"
,安装或卸载程序将其翻译为 "C:\WINDOWS\SYSTEM\CTL3D32.DLL"
。
在 64 位 Windows 上,默认情况下,此常量返回的 System32 路径映射到包含 32 位系统文件的目录,就像在 32 位 Windows 上一样。(这可以通过启用 64 位安装模式来覆盖。)
{sysnative}
在 64 位 Windows 上,包含 64 位系统文件的目录。在 32 位 Windows 上,包含 32 位系统文件的目录。
{syswow64}
在 64 位 Windows 上,系统的 SysWOW64 目录,通常是 "C:\WINDOWS\SysWOW64"
。这是实际包含 32 位系统文件的目录。在 32 位 Windows 上,32 位系统文件不驻留在单独的 SysWOW64 目录中,因此如果在该位置使用此常量,它将解析为与 {sys} 相同的目录。
除非有特定需求需要获取实际包含 32 位系统文件的目录的名称,否则不要使用此常量。在 {sys} 就足够的地方随意使用 {syswow64} 可能会引起问题。(有关示例,请参阅 [Files] 部分的 sharedfile 标志的文档。)
{src}
Setup 文件所在的目录。
例如:如果在条目上使用 {src}\MYPROG.EXE
,并且用户从 "S:\"
安装,安装程序将其翻译为 "S:\MYPROG.EXE"
。
{sd}
系统驱动器。安装 Windows 的驱动器,通常是C:"
。此目录常量等同于 SystemDrive 环境变量。
{commonpf}
程序文件。系统 Program Files 目录的路径。除非安装以 64 位安装模式运行(在这种情况下它等同于 {commonpf64}),否则 {commonpf} 等同于 {commonpf32}。
{commonpf32}
32 位程序文件。系统 32 位 Program Files 目录的路径,在 32 位 Windows 上通常是 "C:\Program Files"
,在 64 位 Windows 上是 "C:\Program Files (x86)"
。
{commonpf64}
仅 64 位 Windows:64 位程序文件。系统 64 位 Program Files 目录的路径,通常是 "C:\Program Files"
。如果尝试在 32 位 Windows 上扩展此常量,将引发异常。
{commoncf}
公共文件。系统 Common Files 目录的路径。除非安装以 64 位安装模式运行(在这种情况下它等同于 {commoncf64}),否则 {commoncf} 等同于 {commoncf32}。
{commoncf32}
32 位公共文件。系统 32 位 Common Files 目录的路径,在 32 位 Windows 上通常是 "C:\Program Files\Common Files"
,在 64 位 Windows 上是 "C:\Program Files (x86)\Common Files"
。
{commoncf64}
仅 64 位 Windows:64 位公共文件。系统 64 位 Common Files 目录的路径,通常是 "C:\Program Files\Common Files"
。如果尝试在 32 位 Windows 上扩展此常量,将引发异常。
{tmp}
安装或卸载程序使用的临时目录。这不是用户 TEMP 环境变量的值。它是用户在安装或卸载程序启动时创建的临时目录的子目录(名称类似于 "C:\WINDOWS\TEMP\IS-xxxxx.tmp"
)。当安装或卸载程序退出时,此目录中的所有文件和子目录都将被删除。在安装过程中,这主要用于提取要在 [Run] 部分中执行但安装后不需要的文件。
Shell 文件夹常量
Inno Setup 支持另一组目录常量,称为 shell 文件夹常量。它们可以与其他目录常量以相同的方式使用。
“common”常量是指所有用户的配置文件。
“user”常量是指运行安装程序的用户的配置文件。此用户通常与当前登录的用户不同,因此请谨慎使用“user”常量。
{group}
用户在安装程序的“选择开始菜单文件夹”向导页面上选择的“开始”菜单文件夹的路径。除非安装以非管理员安装模式运行,否则此文件夹将在所有用户的配置文件中创建,在这种情况下,它将在当前用户的配置文件中创建。
{localappdata}
当前用户的本地(非漫游)应用程序数据文件夹的路径。
{userappdata}
和 {commonappdata}
应用程序数据文件夹的路径。
{usercf}
当前用户的“共用文件”目录的路径。仅 Windows 7 及更高版本支持 {usercf}
;如果在以前的 Windows 版本上使用,它将转换为与 {localappdata}\Programs\Common
相同的目录。
{userdesktop}
和 {commondesktop}
桌面文件夹的路径。
{userdocs}
和 {commondocs}
“我的文档”文件夹的路径。
{userfavorites}
当前用户的“收藏夹”文件夹的路径。(没有共用的“收藏夹”文件夹。)
{userfonts}
当前用户的“字体”文件夹的路径。仅 Windows 10 Version 1803 及更高版本支持 {userfonts}
。与 {localappdata}\Microsoft\Windows\Fonts
相同的目录。
{userpf}
当前用户的“Program Files”目录的路径。仅 Windows 7 及更高版本支持 {userpf}
;如果在以前的 Windows 版本上使用,它将转换为与 {localappdata}\Programs
相同的目录。
{userprograms}
和 {commonprograms}
“开始”菜单上“程序”文件夹的路径。
{usersavedgames}
当前用户的“保存的游戏”目录的路径。
{usersendto}
当前用户的“发送到”文件夹的路径。(没有共用的“发送到”文件夹。)
{userstartmenu}
和 {commonstartmenu}
“开始”菜单的顶级路径。
{userstartup}
和 {commonstartup}
“开始”菜单上“启动”文件夹的路径。
{usertemplates}
和 {commontemplates}
模板文件夹的路径。
自动常量
除了“common”和“user”常量之外,Inno Setup还支持“auto”常量。这些常量会自动映射到其“common”形式,除非安装以非管理员安装模式运行,在这种情况下,它们会映射到其“user”形式。
建议尽可能始终使用这些“auto”常量以避免错误。
Administrative | Non administrative | |
---|---|---|
autoappdata | commonappdata | userappdata |
autocf | commoncf | usercf |
autocf32 | commoncf32 | usercf |
autocf64 | commoncf64 | usercf |
autodesktop | commondesktop | userdesktop |
autodocs | commondocs | userdocs |
autofonts | commonfonts | userfonts |
autopf | commonpf | userpf |
autopf32 | commonpf32 | userpf |
这些“auto”常量提供了一种便捷的方式,让安装程序能够根据当前的用户权限和环境自动选择正确的文件夹路径。这将简化安装脚本的编写,确保在各种不同的情况下都能正确地访问和修改文件和文件夹。
重命名常量
Inno Setup 6 对一些目录和 Shell 文件夹常量进行了重命名。虽然旧名称仍然受支持,但建议将您的脚本更新为新名称(或“auto”形式),否则编译器会发出警告。
旧名称 | 新名称 |
---|---|
cf | commoncf |
cf32 | commoncf32 |
cf64 | commoncf64 |
fonts | commonfonts |
pf | commonpf |
pf32 | commonpf32 |
pf64 | commonpf64 |
sendto | usersendto |
请确保在更新脚本时使用这些新名称,以确保与最新版本的 Inno Setup 兼容,并避免在未来版本中可能出现的任何问题。
其他常量
{\}
一个反斜杠字符。请参阅本页顶部的注释,以了解使用 {\}
和仅使用\
之间的差异。
{%NAME|DefaultValue}
嵌入环境变量的值。
NAME
指定要使用的环境变量的名称。DefaultValue
确定如果用户系统上不存在指定的变量,则要嵌入的字符串。- 如果您想在常量中包含逗号、竖线(“|”)或闭合大括号(“}”),则必须通过“%-encoding”对其进行转义。将字符替换为“%”字符,后跟其两位十六进制代码。逗号是“%2c”,竖线是“%7c”,闭合大括号是“%7d”。如果您想包含实际的“%”字符,请使用“%25”。
NAME
和DefaultValue
可以包含常量。请注意,您不需要像上面描述的那样转义常量的闭合大括号;只有当闭合大括号在其他地方使用时才需要这样做。
示例:
{%COMSPEC}
{%PROMPT|$P$G}
{cmd}
系统标准命令解释器的完整路径名,Windows\System32\cmd.exe
。请注意,在扩展此常量时,不会使用 COMSPEC
环境变量。
{computername}
安装或卸载程序正在运行的计算机的名称(由 Windows GetComputerName
函数返回)。
{drive:Path}
从指定路径中提取并返回驱动器字母和冒号(例如“C:”
)。对于 UNC 路径,它返回服务器和共享名称(例如“\\SERVER\SHARE”
)。
- Path 指定路径。
- 如果您想在常量中包含逗号、竖线(“|”)或闭合大括号(“}”),则必须通过“%-encoding”对其进行转义。将字符替换为“%”字符,后跟其两位十六进制代码。逗号是“%2c”,竖线是“%7c”,闭合大括号是“%7d”。如果您想包含实际的“%”字符,请使用“%25”。
- Path 可以包含常量。请注意,您不需要像上面描述的那样转义常量的闭合大括号;只有当闭合大括号在其他地方使用时才需要这样做。
示例:
{drive:{src}}
{drive:c:\path\file}
{drive:\\server\share\path\file}
{groupname}
用户在安装程序的“选择开始菜单文件夹”向导页面上选择的文件夹的名称。这与 {group} 的不同之处在于它只是名称;它不包含路径。
{hwnd}
(特殊用途)转换为安装程序背景窗口的窗口句柄。
{wizardhwnd}
(特殊用途)转换为安装向导窗口的窗口句柄。如果在执行转换时窗口句柄不可用,则该句柄设置为 ‘0’。
{ini:Filename,Section,Key|DefaultValue}
从 .INI 文件中嵌入一个值。
- Filename 指定要读取的 .INI 文件的名称。
- Section 指定要读取的节的名称。
- Key 指定要读取的键的名称。
- DefaultValue 确定如果要嵌入的指定键不存在,则要嵌入的字符串。
- 如果您想在常量中包含逗号、竖线(“|”)或闭合大括号(“}”),则必须通过“%-encoding”对其进行转义。将字符替换为“%”字符,后跟其两位十六进制代码。逗号是“%2c”,竖线是“%7c”,闭合大括号是“%7d”。如果您想包含实际的“%”字符,请使用“%25”。
- Filename、Section、Key 和 DefaultValue 可以包含常量。请注意,您不需要像上面描述的那样转义常量的闭合大括号;只有当闭合大括号在其他地方使用时才需要这样做。
示例:
{ini:{win}\MyProg.ini,Settings,Path|{autopf}\My Program}
{language}
所选语言的内部名称。有关更多信息,请参阅 [Languages] 部分文档。
{cm:MessageName}
{cm:MessageName,Arguments}
基于活动语言嵌入自定义消息值。
- MessageName 指定要读取的自定义消息的名称。有关更多信息,请参阅 [CustomMessages] 部分文档。
- Arguments 可选地指定消息值的逗号分隔的参数列表。
- 如果您想在常量中包含逗号、竖线(“|”)或闭合大括号(“}”),则必须通过“%-encoding”对其进行转义。将字符替换为“%”字符,后跟其两位十六进制代码。逗号是“%2c”,竖线是“%7c”,闭合大括号是“%7d”。如果您想包含实际的“%”字符,请使用“%25”。
- Arguments 中的每个参数都可以包含常量。请注意,您不需要像上面描述的那样转义常量的闭合大括号;只有当闭合大括号在其他地方使用时才需要这样做。
示例:
{cm:LaunchProgram,Inno Setup}
如果英语是活动语言,则上面的示例将翻译为“Launch Inno Setup”。
{reg:HKxx\SubkeyName,ValueName|DefaultValue}
此语法用于嵌入注册表值。
HKxx
指定根键;请参阅 [Registry] 部分文档以获取可能的根键列表。SubkeyName
指定要读取的子键名称。ValueName
指定要读取的值的名称;如果希望读取键的“默认值”,请留空ValueName
。DefaultValue
确定在指定的注册表值不存在,或不是字符串类型(REG_SZ 或 REG_EXPAND_SZ)时要嵌入的字符串。- 如果要在常量中包含逗号、竖线(“|”)或闭括号(“}”),必须通过“%-encoding”进行转义。将字符替换为“%”字符,后跟其两位十六进制代码。逗号是“%2c”,竖线是“%7c”,闭括号是“%7d”。如果要包含实际的“%”字符,请使用“%25”。
SubkeyName
、ValueName
和DefaultValue
可以包含常量。请注意,不需要如上所述转义常量的闭括号;只有当闭括号在其他地方使用时才需要这样做。
示例:
{reg:HKA\Software\My Program,Path|{autopf}\My Program}
{param:ParamName|DefaultValue}
此语法用于嵌入命令行参数值。
ParamName
指定要读取的命令行参数的名称。DefaultValue
确定在指定的命令行参数不存在,或其值无法确定时要嵌入的字符串。- 如果要在常量中包含逗号、竖线(“|”)或闭括号(“}”),必须通过“%-encoding”进行转义。将字符替换为“%”字符,后跟其两位十六进制代码。逗号是“%2c”,竖线是“%7c”,闭括号是“%7d”。如果要包含实际的“%”字符,请使用“%25”。
ParamName
和DefaultValue
可以包含常量。请注意,不需要如上所述转义常量的闭括号;只有当闭括号在其他地方使用时才需要这样做。
示例:
{param:Path|{autopf}\My Program}
如果指定了命令行 /Path="c:\My Program"
,则上述示例将转换为 c:\My Program
。
{srcexe}
安装程序文件的完整路径名,例如“C:\SETUP.EXE”
。
{uninstallexe}
由安装程序提取的卸载程序的完整路径名,例如“C:\Program Files\My Program\unins000.exe”
。此常量通常用于 [Icons] 部分条目以创建卸载图标。仅当 Uninstallable
为 yes
(默认设置)时有效。
{sysuserinfoname}
和 {sysuserinfoorg}
分别表示 Windows 注册的用户名和组织名。此信息从注册表中读取。
{userinfoname}
、{userinfoorg}
和 {userinfoserial}
分别表示用户在“用户信息”向导页面上输入的名称、组织和序列号(可通过 UserInfoPage
指令启用)。通常,这些常量用于 [Registry] 或 [INI] 条目以保存其值供以后使用。
{username}
运行安装程序或卸载程序的用户的名称(由 GetUserName
函数返回)。
{log}
日志文件名称,如果未启用日志记录,则为空字符串。