Inno Setup 是什么？

Inno Setup 版本 5.5.4
版权所有 © 1997-2013 Jordan Russell. 保留所有权利。
部份版权所有 © 2000-2013 Martijn Laan. 保留所有权利。

本文档大部份译文归原汉化作者莫名所有；后期更新：风铃夜思雨。

Inno Setup 主页 [external link]

Inno Setup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年，Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件。

关键功能:

  • 支持现在所有正在使用的 Windows 版本: 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP, Windows Server 2003, 和 Windows 2000。(不需要服务包。)
  • 广泛支持在 64 位 的 Windows XP and Windows Server 2003 版本的操作系统中的 64 位应用程序安装。支持 x64 和 Itanium 两个结构。(在 Itanium 结构中，必须在 64 位模式安装 Service Pack 1。)
  • 支持创建单个 EXE 格式的安装程序，使你的程序可以很方便地在网络上发表。同时也支持磁盘延伸。
  • 标准的 Windows 2000/XP 样式向导界面。
  • 定制安装类型，例如：完整安装，最小安装，自定义安装。
  • 完整的卸载功能。
  • 文件安装:
    包括完全的“压缩”支持，bzip2 和 7-Zip LZMA/LZMA2 文件压缩。安装程序可以比较文件版本信息，替换正在使用的文件，使用共享文件计数，注册 DLL/OCX 和类型库，以及安装字体。
  • 可以在任意地方创建快捷方式，包括开始菜单和桌面。
  • 创建注册表 和 .INI 条目。
  • Running other programs before, during or after install。
  • 支持多语言安装，including right-to-left language support.
  • 支持密码和加密安装。
  • 支持 数字签名 安装和卸载。
  • 后台安装和后台卸载。
  • Unicode 安装。
  • Integrated preprocessor option for advanced compile-time customization.
  • 完整的 Pascal 脚本 引擎选项于运行期高级自定义安装和卸载。
  • 全部源代码公开 (Borland Delphi 2.0-5.0 和 2009)。

它是真正免费的软件，即使作为商业使用？

是，它可以完全免费使用，即使作为商业应用程序开发使用。

(注意: “完全免费”不完全是“完全自由”。Inno Setup 是有版权的软件，不是公共域软件，在发行和使用时有一些限制；查阅 LICENSE.TXT 文件获取详细资料。)


文档约定

等宽文本

当你在帮助中看到等宽文本，它表示脚本在中输入的引用的文字。


创建安装程序

安装程序用编译脚本的方式创建，脚本其实就是一个类似 .INI 文件格式的 ASCII 码文本文件。(它不象你想象的那么复杂!)。 Unicode Inno Setup支持 UTF-8 编码文本文件。

脚本用一个“.iss” (表示 Inno Setup 脚本) 的扩展名。脚本控制着安装程序的所有方面。由它指定哪些文件将被安装到什么地方，在哪里创建快捷方式，且被命名为什么。

脚本文件一般可以用安装程序编译器程序内置的编辑器进行编辑。在你编写完脚本后，下一个最终步骤就是选择安装程序编译器中的“编译”。创建完成后，就可以运行根据你脚本编译的安装程序了。按默认，这个安装程序创建在包含脚本文件目录下的名为“输出”目录中。

如果你想看看它是怎样工作的，启动安装程序编译器，单击“文件 | 打开”，并选择位于 Inno Setup 安装目录下的 Examples 子目录中的一个脚本文件。(你也可以将这些示例脚本作为你自己编写脚本的模板。)

请查阅
脚本格式概述


脚本格式概述

Inno Setup 准备了一些段。每个段控制一个不同方面的安装程序部分。每个段用包含在括号 [] 中的段名开始，每个段里面是一些相关的条目。

其中有两种不能主要类型的段: 有些就象 [Setup] 段，条目包含指令名和值 (格式为 Directive=Value)，还有一些就象 [Files] 段，条目被参数分隔。

这里是一个例子:

[Setup]
AppName=My Program

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"

注意，在脚本中指定多个相同名字的段是合法的。

你可以通过在行起始位置加个分号“;”在脚本中写入“注释” (编译时被编译时忽略)。例如:

; 这是一条注释，放在这里只是要提醒我自己...

支持 A C-like #include 指令，从个别文件放入行到 #include 指令位置的脚本。语法是:

#include "filename.txt"

如果文件名中未提供完整的路径，编译将在包含 #include 指令的同一目录中查找。文件名用“compiler:”作为前缀的场合中，在编译器目录中查找文件。

A #preproc directive is supported, which specifies whether to use the built-in preprocessor which only supports the above #include directive or to use Inno Setup Preprocessor (ISPP) which supports many more directives. The syntax is:

#preproc builtin
#preproc ispp

By default, scripts use ISPP if available, and .isl files use the built-in preprocessor.

查阅
段中参数
常量
公共参数
组件和任务参数
[Setup] 段
[Types] 段
[Components] 段
[Tasks] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Languages] 段
[Messages] 段
[CustomMessages] 段
[LangOptions] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
脚本: 介绍


段中参数

所有脚本中的段，除 [Setup]、[Messages]、[CustomMessages]、[LangOptions] 和 [Code] 段，包含的行中可有多个各自的参数。下列是 [Files] 段中的一个举例:

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.CHM"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme

每个参数都由一个名字组成，然后跟随一个冒号，然后是一个值。除非另外说明，如果参数未指定，将设定为一个默认值。一行中多个参数用分号隔开，并且可以以任何次序列出。

参数的值如果包含一个用户定义的字符串时，一般来说用双引号 (") 包含，例如象文件名。引号使用不是必需的，但这样做可能会在值中的首位或末位被加入空格，以及分号和双引号。

在要引用的值中使用一个双引号字符，用两个连续的双引号字符，例如:

"This "" contains "" embedded "" quotes"

安装程序编译器会将它视作:

This " contains " embedded " quotes

如果你希望参数值是一个单个双引号字符，用四个双引号字符: """"。外面的两个用于包含引用的字符；内部两个写入单个的双引号字符。


常量

脚本中的项目大部分可以嵌入常量。这些预定义的字符被包含在括弧 { } 中。安装程序或卸载程序会根据用户选择和系统配置将这些常量翻译为文字值。例如，{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}

系统的 Windows System 目录。
例如: 如果你在项目中使用了 {sys}\CTL3D32.DLL，且系统的 Windows System 目录是“C:\WINDOWS\SYSTEM”，安装程序或卸载程序将它传送到“C:\WINDOWS\SYSTEM\CTL3D32.DLL”。

在 64 位 Windows 中，按默认，the System32 path returned by this constant maps to the directory containing 32-bit system files, just like on 32-bit Windows. (This can be overridden by enabling 64 位模式.)

{syswow64}

在 64 位 Windows 中，系统的 SysWOW64 目录，一般是“C:\WINDOWS\SysWOW64”。这是在 32 位系统文件驻留的真实目录。在 32 位 Windows 中，32 位系统文件驻留在“System32”或“System”中，不是在单独的的“ {syswow64}” 目录，因此如果在这种情况下使用，这个常量将解析到与 {sys} 相同的目录。

Do not use this constant unless you have a specific need to obtain the name of the actual directory in which 32-bit system files reside. Gratuitously using {syswow64} in places where {sys} will suffice may cause problems. (请查阅帮助文档 [Files] 段 sharedfile 标记示例。)

{src}

安装程序文件所在目录。
例如: 你在项目中使用了 {src}\MYPROG.EXE，且用户正在从“S:\”进行安装，安装程序将它传送到“S:\MYPROG.EXE”。

{sd}

Windows 系统所在的驱动器。一般来说是“C:”。这个目录常量等同于 SystemDrive 环境变量。

{pf}

程序文件夹位置。系统的 Program Files 目录的路径。{pf} 等于 {pf32}，除非安装程序运行于 64 位模式，在这种情况下它等于 {pf64}。

{pf32}

32 位程序文件夹。系统的 32 位程序文件目录路径。一般来说它在 32 位 Windows 是“C:\Program Files”，在 64 位 Windows 中是“C:\Program Files (x86)”。

{pf64}

仅指 64 位 Windows: 64 位程序文件夹。系统的 64 位程序文件目录路径，一般来说是“C:\Program Files”。如果尝试在 32 位的 Windows 中展开这个常量，将会出现异常。

{cf}

公共文件。系统公共文件目录路径。{cf} 等于 {cf32}，除非安装程序运行于 64 位模式，在这种情况下它等于 {cf64}。

{cf32}

32 位公共文件。系统的 32 位公共文件目录路径。一般来说它在 32 位 Windows 是“C:\Program Files\Common Files”，在 64 位 Windows 中是“C:\Program Files (x86)\Common Files”。

{cf64}

仅指 64 位 Windows: 64 位公共文件。系统的 64 位公共文件目录路径，一般来说是“C:\Program Files\Common Files”。如果尝试在 32 位的 Windows 中展开这个常量，将会出现异常。

{tmp}

用于安装程序或卸载程序的临时目录。这不是用户的 TEMP 环境变量值。它是在安装程序启动后在用户临时目录中创建的子目录 (象名为“C:\WINDOWS\TEMP\IS-xxxxx.tmp”)。目录中的所有文件和子目录在安装程序或卸载程序退出时删除。在安装时，这主要用于提取在 [Run] 段运行、但安装后不再需要的文件。

{fonts}

字体目录。通常是在 Windows 下面的名字“FONTS”的目录。

{dao}

DAO 目录，等同于 {cf}\Microsoft Shared\DAO。

{dotnet11}

32位 .NET Framework 版本 1.1 根目录。

如果所使用的系统上没有 .NET Framework 版本 1.1，则显示内部错误原因。

{dotnet20}

.NET Framework 版本 2.0 根目录。 {dotnet20} is equivalent to {dotnet2032} unless the install is running in 64位模式 , in which case it is equivalent to {dotnet2064} .

如果所使用的系统上没有 .NET Framework 版本 2.0，则显示内部错误原因。

{dotnet2032}

32位 .NET Framework 版本 2.0 根目根。

如果所使用的系统上没有 .NET Framework 版本 2.0，则显示内部错误原因。

{dotnet2064}

仅64位Windows: 64位 .NET Framework 版本 2.0 根目录。

如果所使用的系统上没有 .NET Framework 版本 2.0，则显示内部错误原因。

{dotnet40}

.NET Framework 版本 4.0 根目录。 {dotnet40} is equivalent to {dotnet4032} unless the install is running in 64位模式 , in which case it is equivalent to {dotnet4064} .

如果所使用的系统上没有 .NET Framework 版本 4.0，则显示内部错误原因。

{dotnet4032}

32-bit .NET Framework 版本 4.0 根目录。

如果所使用的系统上没有 .NET Framework 版本 4.0，则显示内部错误原因。

{dotnet4064}

仅64位Windows: 64位 .NET Framework 版本 4.0 根目录。

如果所使用的系统上没有 .NET Framework 版本 4.0，则显示内部错误原因。

外壳文件夹常量

Inno Setup 支持其它目录常量设置，作为外壳文件夹常量引用。它们可以与其它目录常量相同方法使用。

“common”常量引用到所有用户配置文件。

下面的“user”常量引用到当前登录的用户配置文件进行安装。This user is often not the same as the currently logged-in user, so use the "user" constants with caution.

除非有另外的注释，外壳文件夹常量工作于 Inno Setup 支持的所有 Windows 版本。

* = The "common" form of this constant is mapped to the "user" form if the logged-in user lacks administrative privileges, or if PrivilegesRequired is set to lowest.

{group}

开始菜单文件夹路径，由用户在安装程序的选择开始菜单文件夹向导页中选定。这个文件夹总是创建在所有用户配置文件下，除非非用户安装程序的用户没有管理员权限，这种情况下它将创建在用户配置文件下。

{localappdata}

本地Application Data文件夹。

{sendto}

当前用户的 Send To 文件夹路径。(这里不是指公共 Send To 文件夹。)

{userappdata} & {commonappdata}

Application Data文件夹路径。

{usercf}

The path to the current user's Common Files directory. Only Windows 7 and later supports {usercf} ; if used on previous Windows versions, it will translate to the same directory as {localappdata}\Programs\Common .

{userdesktop} & {commondesktop} *

桌面文件夹路径。

{userdocs} & {commondocs}

我的文档 (My Documents) 文件夹路径。

{userfavorites} & {commonfavorites} *

收藏夹文件夹路径。

{userpf}

The path to the current user's Program Files directory. Only Windows 7 and later supports {userpf} ; if used on previous Windows versions, it will translate to the same directory as {localappdata}\Programs .

{userprograms} & {commonprograms} *

开始菜单中程序文件夹路径。

{userstartmenu} & {commonstartmenu} *

开始菜单顶层路径。

{userstartup} & {commonstartup} *

开始菜单启动文件夹路径。

{usertemplates} & {commontemplates} *

模板文件夹路径。

其它常量

{\}

反斜杠字符。查阅本页顶部的注释获取使用 {\} 和只使用一个 \ 字符之间的差异。

{% 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 可以包含常量。注意，你不需要将常量中的括弧替换成上面所说的字符；上面所说的括弧后半部只在使用于其它地方时需要替换。
示例:
{ini:{win}\MyProg.ini,Settings,Path|{pf}\My Program}
{language}

选定语言的内部名字。查阅 [Languages] 段帮助文档获取更多信息。

{cm: MessageName }
{cm: MessageName , Arguments }

根据活动语言嵌入一个自定义消息值。

  • MessageName 用于指定要读取的自定义消息名。查阅 [CustomMessages] 段帮助文档获取更多信息。
  • Arguments 可随意在消息值中指定逗号分隔的声明列表。
  • 如果你想在常量内部包含一个逗号，垂直条 (“|”)，或括号 (“}”)，你必须使用“%-encoding.”避开它，用“%”字符，后面跟随它的两位数十六进制代码替换。逗号是“%2c”，垂直条是“%7c”，括号是“%7d”，如果你想包含一个实际的“%”字符，用“%25”。
  • 每个 Arguments 中的声明可以包含常量。注意，你不需要避开上面描述的常量中的括号，只有在别处使用这种括号时需要避开。
示例:
{cm:LaunchProgram,Inno Setup}

如果活动语言是简体中文，上面的示例被翻译为“运行 Inno Setup”。

{reg:HK xx \ SubkeyName , ValueName | DefaultValue }

插入一个注册表值。

  • HKxx 指定注册表根键；查阅 [Registry] 段帮助文档获取可用根键列表。
  • SubkeyName 指定要读取的子键名。
  • ValueName 指定要读取的值名；如果你想读取键的“默认”值，将 ValueName 留空。
  • DefaultValue 确定在指定的注册表值不存在，或不是一个字符串类型的值 (REG_SZ 或 REG_EXPAND_SZ) 时要插入的字符。
  • 如果你想在常量内部包含一个逗号、竖条 (“|”)，或括弧后半部 (“}”)，你必须通过“%-encoding.”先用一个“%”字符然后跟随它的两上数字的十六进制代码替换，从而避开它。逗号是“%2c”，竖条是“%7c”括弧后半部是“%7d”。如果你想实际使用“%”，使用“%25”。
  • SubkeyName, ValueName， 和 DefaultValue 可以包含常量。注意，你不需要将常量中的括弧替换成上面所说的字符；上面所说的括弧后半部只在使用于其它地方时需要替换。
示例:
{reg:HKLM\Software\My Program,Path|{pf}\My Program}
{param: ParamName | DefaultValue }

插入一个命令行参数值。

  • ParamName 指定要读取的命令行参数名。
  • DefaultValue 确定如果指定的命令行参数不存在，或它的值不能确定时要插入的字符。
  • 如果你想在常量内部包含一个逗号、竖条 (“|”)，或括弧后半部 (“}”)，你必须通过“%-encoding.”先用一个“%”字符然后跟随它的两上数字的十六进制代码替换，从而避开它。逗号是“%2c”，竖条是“%7c”括弧后半部是“%7d”。如果你想实际使用“%”，使用“%25”。
  • ParamName 和 DefaultValue 可以包含常量。注意，你不需要将常量中的括弧替换成上面所说的字符；上面所说的括弧后半部只在使用于其它地方时需要替换。
示例:
{param:Path|{pf}\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}

日志文件的名称，如果 logging 没启用则返回一个空字符。


公共参数

有三个可选的被所有段条目支持的参数，它们是:

Languages

一个用空格分隔的语言名列表，告诉安装程序条目属于哪种语言。如果最终用户从列表中选择了一个语言，该条目就执行(例如: 安装文件)。

不带 Languages 参数的条目总是安装，除非其它参数中有限制。

除用空格将它们隔开外，你也可以使用 boolean 表达式。查阅组件和任务参数获取 boolean 表达式的示例。

示例:
Languages: en nl
MinVersion

指定条目要进行处理的最小 Windows 版本。如果你在版本中的一个使用“0”，那么条目将永远不进行处理.构建号和/或安全服务包级别可能包含在版本号中。这将忽略任何在脚本 [Setup] 段中的 MinVersion 指令。

不带 MinVersion 参数的条目总是安装，除非其它参数中有限制。

For compatibility with previous versions of Inno Setup, separate Windows 95/98/Me and Windows NT version numbers may be specified, separated by a comma. Example: 4.1,5.0 . The Windows 95/98/Me version number (the first number) isn't used, however, as Inno Setup no longer supports Windows 95/98/Me.

示例:
MinVersion: 5.1
OnlyBelowVersion

根本上是和 MinVersion 相对。指定条目不进行处理的最小 Windows 版本。例如，如果你加入 6.0，用户正在运行 Windows 2000或XP，那么条目将进行处理，但如果用户正运行于 Windows Vista (报告它的版本是 6.0)或之后的，它将不进行处理。版本中的一个放入“0”表示不受版本上限。 构建号和/或安全服务包级别可能包含在版本号中。这将忽略任何在脚本 [Setup] 段中的 MinVersion 指令。

不带 OnlyBelowVersion 参数的条目总是安装，除非其它参数中有限制。

For compatibility with previous versions of Inno Setup, separate Windows 95/98/Me and Windows NT version numbers may be specified, separated by a comma. Example: 4.1,5.0 . The Windows 95/98/Me version number (the first number) isn't used, however, as Inno Setup no longer supports Windows 95/98/Me.

示例:
OnlyBelowVersion: 6.0


组件和任务参数

这里有两个可选的参数，被除 [Types]、[Components] 和 [Tasks] 段以外所有其它段中的条目支持。它们是:

Components

用空格分隔的组件名列表，告诉安装程序条目属于哪个组件。如果最终用户从列表中选择了一个组件，那么该条目就进行处理 (例如: 安装文件)。

不带 Components 参数的条目总是安装，除非其它参数对其有限制。

示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Components: main
Source: "MYPROG.CHM"; DestDir: "{app}"; Components: help
Source: "README.TXT"; DestDir: "{app}"
Tasks

用空格分隔的任务名列表，告诉安装程序条目属于哪个任务。如果最终用户从列表中选择了一个任务，那么该条目就进行处理 (例如: 安装文件)。

不带 Tasks 参数的条目总是安装，除非其它参数对其有限制。

“不创建开始菜单文件夹”选项框不控制 [Icons] 带 Tasks 参数的条目 (它们有自己的选项框)。因此，如果你已经定义了带 Tasks 参数的快捷方式，安装程序将改变“不创建开始菜单文件夹”的文字到“不创建开始菜单文件夹”。

示例:
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"; Components: main; Tasks: startmenu
Name: "{group}\My Program Help"; Filename: "{app}\MyProg.chm"; Components: help; Tasks: startmenu
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Components: main; Tasks: desktopicon

除用空格分隔外，你也可以使用 boolean 表达式作为组件和任务参数。支持包含 not、and 和 or 操作。例如:

[Components]
Name: a; Description: a
Name: b; Description: b

[Tasks]
Name: p; Description: a or b; Components: a or b
Name: q; Description: a and b; Components: a and b
Name: r; Description: not a or b; Components: not a or b
Name: s; Description: not (a or b); Components: not (a or b)
Name: t; Description: a or b - old style; Components: a b


[Setup] 段

这个段包含用于安装程序和卸载程序的全局设置。某些提示对于你创建的任何安装程序都是必需的。这是 [Setup] 段的一个示例:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

按默认，指令值的所有首位或末位无显示字符将被分离。这可以通过将指令的值包含在双引号 (" 中避免。

下列指令可以放置到 [Setup] 段中:

(粗体为必需项)

编译器相关

  • Compression
  • CompressionThreads
  • DiskClusterSize
  • DiskSliceSize
  • DiskSpanning
  • Encryption
  • InternalCompressLevel
  • LZMAAlgorithm
  • LZMABlockSize
  • LZMADictionarySize
  • LZMAMatchFinder
  • LZMANumBlockThreads
  • LZMANumFastBytes
  • LZMAUseSeparateProcess
  • MergeDuplicateFiles
  • OutputBaseFilename
  • OutputDir
  • OutputManifestFile
  • ReserveBytes
  • SignedUninstaller
  • SignedUninstallerDir
  • SignTool
  • SlicesPerDisk
  • SolidCompression
  • SourceDir
  • TerminalServicesAware
  • UseSetupLdr
  • VersionInfoCompany
  • VersionInfoCopyright
  • VersionInfoDescription
  • VersionInfoProductName
  • VersionInfoProductTextVersion
  • VersionInfoProductVersion
  • VersionInfoTextVersion
  • VersionInfoVersion

安装程序相关

功能:这些指令影响安装程序的操作，或保存和被卸载程序使用。

  • AllowCancelDuringInstall
  • AllowNetworkDrive
  • AllowNoIcons
  • AllowRootDirectory
  • AllowUNCPath
  • AlwaysRestart
  • AlwaysShowComponentsList
  • AlwaysShowDirOnReadyPage
  • AlwaysShowGroupOnReadyPage
  • AlwaysUsePersonalGroup
  • AppendDefaultDirName
  • AppendDefaultGroupName
  • AppComments
  • AppContact
  • AppId
  • AppModifyPath
  • AppMutex
  • AppName
  • AppPublisher
  • AppPublisherURL
  • AppReadmeFile
  • AppSupportPhone
  • AppSupportURL
  • AppUpdatesURL
  • AppVerName
  • AppVersion
  • ArchitecturesAllowed
  • ArchitecturesInstallIn64BitMode
  • ChangesAssociations
  • ChangesEnvironment
  • CloseApplications
  • CloseApplicationsFilter
  • CreateAppDir
  • CreateUninstallRegKey
  • DefaultDialogFontName
  • DefaultDirName
  • DefaultGroupName
  • DefaultUserInfoName
  • DefaultUserInfoOrg
  • DefaultUserInfoSerial
  • DirExistsWarning
  • DisableDirPage
  • DisableFinishedPage
  • DisableProgramGroupPage
  • DisableReadyMemo
  • DisableReadyPage
  • DisableStartupPrompt
  • DisableWelcomePage
  • EnableDirDoesntExistWarning
  • ExtraDiskSpaceRequired
  • InfoAfterFile
  • InfoBeforeFile
  • LanguageDetectionMethod
  • LicenseFile
  • MinVersion
  • OnlyBelowVersion
  • Password
  • PrivilegesRequired
  • RestartApplications
  • RestartIfNeededByRun
  • SetupLogging
  • ShowLanguageDialog
  • ShowUndisplayableLanguages
  • TimeStampRounding
  • TimeStampsInUTC
  • TouchDate
  • TouchTime
  • Uninstallable
  • UninstallDisplayIcon
  • UninstallDisplayName
  • UninstallDisplaySize
  • UninstallFilesDir
  • UninstallLogMode
  • UninstallRestartComputer
  • UpdateUninstallLogAppName
  • UsePreviousAppDir
  • UsePreviousGroup
  • UsePreviousLanguage
  • UsePreviousSetupType
  • UsePreviousTasks
  • UsePreviousUserInfo
  • UserInfoPage

修饰:这些指令只只影响安装程序外观。

  • AppCopyright
  • BackColor
  • BackColor2
  • BackColorDirection
  • BackSolid
  • FlatComponentsList
  • SetupIconFile
  • ShowComponentSizes
  • ShowTasksTreeLines
  • WindowShowCaption
  • WindowStartMaximized
  • WindowResizable
  • WindowVisible
  • WizardImageBackColor
  • WizardImageFile
  • WizardImageStretch
  • WizardSmallImageFile

已废弃

这些指令已被废弃，不要在任何新的脚本中使用。

  • AlwaysCreateUninstallIcon
  • DisableAppendDir
  • DontMergeDuplicateFiles
  • MessagesFile
  • UninstallIconFile
  • UninstallIconName
  • UninstallStyle
  • WizardSmallImageBackColor
  • WizardStyle


[Types] 段

这个段是可选的。它用来定义安装程序向导在选择组件面时可供选择的所有安装类型。如果你在 [Components] 段定义了组件，但没有定义类型，在编译时将创建一个默认的安装类型设置。如果你正在使用默认 (简体中文) 消息文件，这些类型等同于下面示例中的类型。

这里是一个 [Types] 段的示例:

[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

下列是所支持的参数列表:

Name (必需的)

类型的内部名字。用于定义 [Components] 段中组件参数，告诉安装程序组件属于哪个类型。

示例:
Name: "full"
Description (必需的)

类型的描述，可以包含常量。这个描述在安装期间显示。

示例:
Description: "完全安装"
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

iscustom

告诉安装程序这个类型是自定义类型。只在最终用户在安装期间手动改变了组件选择，安装程序就将安装类型设置为自定义类型。请注意，如果你未定义自定义类型，安装程序将只允许用户选择一个安装类型，并且不能手动选择/取消选择组件。

仅一种类型可包含在该标记。

示例:
Flags: iscustom

公共参数


[Components] 段

这个段是可选的。它定义安装程序向导的选择组件页中显示的所有组件，以便于用户定制安装类型。

光用它一个组件不会做任何事情: 它需要“链接”到其它安装条目。请查阅组件和任务参数。

这里是一个 [Components] 段的示例:

[Components]
Name: "main"; Description: "主文件"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "帮助文件"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\chinese"; Description: "简体中文"; Types: full

上面的示例生成四种组件: “main”组件在最终用户选择一个名为“full”和“compact”的类型时都将安装。带有两个子组件的“help”组件类型仅在最终用户选择“full”类型时安装。

下列是所支持的参数列表:

Name (必需的)

组件的内部名字。

在组件名字中的 \ 或 / 字符合计数是调用组件的层次。任何在层次 1 或更高层次的组件是子组件。在子组件前列出的小于子组件一个层次的组件是上级组件。其它有相同上级组件的组件之间是同级组件。

如果上级组件未选定，则不能选定一个它的子组件。如果所有的子组件均未选定，则上级组件也不能选定，除非 Components 参数引用上级组件或上级组件包含 checkablealone 标记。

如果同级组件已经标有 exclusive 标记，那么它们之中只有一个可选。

示例:
Name: "help"
Description (必需的)

组件的描述，可以包含常量。这个描述用于在安装期间显示给最终用户参考。

示例:
Description: "帮助文件"
Types

用空格隔开所属组件的类型列表。如果最终用户从这个列表中选择了一个类型，这个组件将被安装。

如果未使用 fixed 标记 (看下面)，这个列表中的任何自定义类型 (使用 iscustom 标记的类型) 均被安装程序忽略。

示例:
Types: full compact
ExtraDiskSpaceRequired

这个组件所需要的额外磁盘空间，类似于 [Setup] 段中的 ExtraDiskSpaceRequired。

示例:
ExtraDiskSpaceRequired: 0
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

checkablealone

指定当一个组件的子组件选中时，该组件是否可以选中。按默认，如果没有 Components 参数直接引用到该组件，未选中所有子组件将会使该组件变成未选中状态。

dontinheritcheck

指定当该组件的上级被选中时，该组件应该不自动变成已选中状态。这对顶层的组件不影响，且不能与 exclusive 标记组合使用。

exclusive

告诉安装程序这个组件与它的也使用 exclusive 标记的同级组件是互相排斥的。

fixed

告诉安装程序这个组件不能在安装期间被最终用户手动选择或取消选择。

restart

告诉安装程序如果用户安装了这个组件，将询问用户重新启动系统，不管它是不是需要 (例如，因为 [Files] 段条目用了 restartreplace 标记)。有点象 AlwaysRestart，但不是每个组件。

disablenouninstallwarning

如果这个组件已经安装在用户机器中，重新安装时在用户取消这个组件选择后，这条标记告诉安装程序不警告用户不卸载该组件。

考虑到你的组件的复杂性，你可以尝试使用 [InstallDelete] 段和这个标记为自动“卸载”取消选定的组件。

示例:
Flags: fixed

公共参数


[Tasks] 段

这个段是只选的。它定义安装程序在执行安装期间所有由用户定制的任务。这些任务以选项框和单选项形式在附加任务向导页中出现。

光任务本身是不会做任何事情的: 它需要“链接”到其它安装条目。查阅组件和任务参数。

这里是一个 [Tasks] 段的示例:

[Tasks]
Name: desktopicon; Description: "创建桌面快捷方式(&D)"; GroupDescription: "添加快捷方式:"; Components: main
Name: desktopicon\common; Description: "对于所有用户"; GroupDescription: "添加快捷方式:"; Components: main; Flags: exclusive
Name: desktopicon\user; Description: "仅对当前用户"; GroupDescription: "添加快捷方式: quicklaunchicon; Description: "创建快速运行栏快捷方式(&Q)"; GroupDescription: "添加快捷方式:"; Components: main; Flags: unchecked
Name: associate; Description: "文件关联(&A)"; GroupDescription: "其它任务:"; Flags: unchecked

下列是所支持的参数列表:

Name (必需的)

任务的内部名字。

在任务名字中的 \ 或 / 字符合计数是调用任务的层次。任何在层次 1 或更高层次的任务是子任务。在子任务前列出的小于子任务一个层次的任务是上级任务。其它有相同上级任务的任务之间是同级任务。

如果上级任务未选定，则不能选定一个它的子任务。如果所有的子任务均未选定，则上级任务也不能选定，除非 Tasks 参数引用上级任务或上级任务包含 checkablealone 标记。

如果同级任务已经标有 exclusive 标记，那么它们之中只有一个可选。

示例:
Name: "desktopicon"
Description (必需的)

任务的描述，可以包含常量。这个描述用于在安装期间显示给最终用户参考。

示例:
Description: "创建桌面快捷方式(&D)"
GroupDescription

任务组的组描述，可以包含常量。用相同组描述的任务将被连续组合到文字标签下。文字标签显示组描述。

示例:
GroupDescription: "附加图标"
Components

这个任务属于一个用空格隔开的组件列表。如果最终用户从这个列表中选择了一个组件，这个任务将显示。不带组件参数的任务条目总显示。

示例:
Components: main
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

checkablealone

指定当一个任务的子任务选中时，该任务是否可以选中。按默认，如果没有 Tasks 参数直接引用到该任务，未选中所有子任务将会使该任务变成未选中状态。

checkedonce

告诉安装程序当安装程序找到已经安装的相同应用程序先前版本时，这个任务开始应该不选中。

If the UsePreviousTasks [Setup]如果 [Setup] 段的 UsePreviousTasks 指令是 no，这个标记是被禁用的。

dontinheritcheck

指定当该任务的上级被选中时，该任务应该不自动变成已选中状态。这对顶层的任务不影响，且不能与 exclusive 标记组合使用。

exclusive

告诉安装程序这个任务是与同样有 exclusive 标记的同级任务互斥的。

restart

告诉安装程序如果用户安装了这个任务，将询问用户重新启动系统，不管它是不是需要 (例如，因为 [Files] 段条目用了 restartreplace 标记)。有点象 AlwaysRestart，但不是每个任务。

unchecked

告诉安装程序这个任务在最初应该是不选中。

示例:
Flags: unchecked

公共参数


[Dirs] 段

这个可选段用来定义除创建用户选择的应用程序目录外安装程序自动创建的另外目录。在主应用程序目录下创建子目录对于这个段是公共使用的。

请注意，在使用 [Files] 段安装文件前你无需一定要创建目录，这个段起初用于创建一个空的目录。

这里是一个 [Dirs] 段的示例:

[Dirs]
Name: "{app}\data"
Name: "{app}\bin"

上面的示例中，在安装程序创建应用程序目录后，又在应用程序目录下创建了两个子目录。

下列是所支持的参数列表:

Name (必需的)

要创建的目录名，通常用一个目录常量开始。

示例:
Name: "{app}\MyDir"
Attribs

指定目录的其它属性。这可以包含下面属性中的一个或多个: readonly，hidden，system。如果这个参数未指定，安装程序不会在目录中分配任何特殊的属性。

如果目录已经存在，指定的属性将与目录现有的属性组合。

示例:
Attribs: hidden system
Permissions

指定访问目录 ACL (访问控制列表) 另外的认可权限。如果你不熟悉 ACL 或不知道为什么要改变它们，则不推荐你使用这个参数，因为误用会发生系统冲突，影响安全性。

使用这个参数还有一个问题用户目录必须位于支持 ACL (象 NTFS) 的分区，并且当前的用户有改变目录许可的权限。如果这些条件不满足，不会显示错误消息，并且不会设置任何许可。

这个参数只应该用于你应用程序的目录隐私。决不会改变顶层目录，象 {sys} 或 {pf} 的 ACL，否则你可以打开你的用户系统的安全漏洞。

另外，推荐你避免使用这个参数，同意在包含程序文件的目录的定入访问。例如，每个人都可以修改 {app} 目录的许可将允许没有权限的用户损坏你的应用程序的程序文件；这个创建会留下潜在的增加别个攻击的问题。(可是，在你的应用程序目录下的子目录的许可是安全的，它们不包含程序文件，例如，{app}\data。)

指定的许可设置不考虑安装前已有的目录。

这个参数可以包含象下列格式一样一个或多个空格分隔的值:

<用户或组标识>-<访问类型>

下列是 [Dirs] 段支持的访问类型:

full

同意“完全控制”许可，它与下面的 modify 一样，但另加上允许指定的用户/组获取目录的所有权并改变它的许可。保守一点使用，一般 modify 就足够了。

modify

同意“修改”许可，允许指定的用户/组读取，执行，修改和删除目录和它的子目录中的文件。

readexec

同意“读取和执行”许可，允许指定的用户/组阅读和执行目录和它的子目录中的文件。

示例:
Permissions: users-modify
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

deleteafterinstall

告诉安装程序照常创建目录，但当安装完成 (或中断) 后，如果它是空的，则删除它。比如，你在脚本 [Run] 段定义了一个安装时要执行的文件，可以将它提取到临时数据然后执行后这个标记就相当有用。

这个标记不会导致安装前已经存在的目录被删除。

setntfscompression

Instructs Setup to enable NTFS compression on the directory. If it fails to set the compression state for any reason (for example, if compression is not supported by the file system), no error message will be displayed.

If the directory already exists, the compression state of any files present in the directory will not be changed.

uninsalwaysuninstall

告诉卸载程序如果目录是空的，允许删除该目录。通常卸载程序只尝试删除在安装前不存在的目录。

uninsneveruninstall

告诉卸载程序不要删除目录。按默认，如果在 [Dirs] 段中指定的目录已经是空的，卸载程序将删除目录。

unsetntfscompression

Instructs Setup to disable NTFS compression on the directory. If it fails to set the compression state for any reason (for example, if compression is not supported by the file system), no error message will be displayed.

If the directory already exists, the compression state of any files present in the directory will not be changed.

示例:
Flags: uninsneveruninstall

组件和任务参数

公共参数


[Files] 段

这是定义安装程序安装文件到用户系统中的可选文件段。

这里是一个 [Files] 段的示例:

[Files]
Source: "CTL3DV2.DLL"; DestDir: "{sys}"; Flags: onlyifdoesntexist uninsneveruninstall
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.CHM"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme

查阅本页底部的备注段获取一些重要注意事项。

下列是所支持的参数列表:

Source (必需的)

来源文件的名字。如果你不指定一个完整的路径名，编译器将预先考虑你的安装程序来源目录的路径。

这里可以在一个条目中用通配符指定一个文件组。当使用通配符时，所有与它匹配的文件使用相同的选项。

当指定 external 标记后，来源必须是发布的媒介或用户系统中现有文件 (或作用通配符) 的完整路径 (例如“{src}\license.ini”)。

当指定 external 标记后，只能使用常量，因为编译器自身不能执行常量翻译。

示例:
Source: "MYPROG.EXE"
Source: "Files\*"
DestDir (必需的)

文件安装到用户系统中的目录。基本上都是用一个目录常量开头。如果指定的路径在用户系统中不存在，它会自动创建，并在卸载后如果是空的，卸载程序会自动删除。

示例:
DestDir: "{app}"
DestDir: "{app}\subdir"
DestName

这个参数用来指定将该文件使用新的文件名安装到用户系统中，按默认，安装程序使用 Source 参数中的名字，因此大多数场合中你不需要指定这个参数。

示例:
DestName: "MYPROG2.EXE"
Excludes

指定要排除的格式列表，用逗号分隔。这个参数不能与 external 标记组合使用。

格式可以包含通配符 (“*”和“?”)。

如果格式用反斜杠符号 (“\”) 如果格式用反斜杠符号 (“\”) 开始，表示它只匹配反斜杠符号左边的路径名，否则它一直匹配到路径名末端。因此“\foo”只排除树根部的名为“foo”的文件，“foo”将排除树中任何地方的名字“foo”的文件。

该格式可以包含反斜框符号。“foo\bar”表示排除“foo\bar”和“subdir\foo\bar”两者。“\foo\bar”只排除“foo\bar”。

示例:
Source: "*"; Excludes: "*.~*"
Source: "*"; Excludes: "*.~*,\Temp\*"; Flags: recursesubdirs
ExternalSize

This parameter must be combined with the external flag and specifies the size of the external file in bytes. If this parameter is not specified, Setup retrieves the file size at startup. Primarily useful for files that aren't available at startup, for example files located on a second disk when disk spanning is being used。

示例:
ExternalSize: 1048576; Flags: external
CopyMode

你不要在一些新的脚本中使用这个参数。不赞成用这个参数，用 Inno Setup 3.0.5 中用下列标记替换:

CopyMode: normal -> Flags: promptifolder
CopyMode: alwaysskipifsameorolder -> no flags
CopyMode: onlyifdoesntexist -> Flags: onlyifdoesntexist
CopyMode: alwaysoverwrite -> Flags: ignoreversion
CopyMode: dontcopy -> Flags: dontcopy

什么是 CopyMode: alwaysskipifsameorolder 现在是默认动作。(以前默认是 CopyMode: normal。)

Attribs

指定文件的附加属性。这可以包含下列中的一个或多个: readonly，hidden，system。如果未指定这个参数，安装程序不会在文件中分配任何特殊属性。

示例:
Attribs: hidden system
Permissions

指定操作 ACL (访问控制列表) 的附加许可。如果不熟悉 ACL 或不知道为什么或更改它们，推荐你不要使用，因为误用会导致冲突，影响系统安全。

用户文件必须位于支持 supports ACL (象 NTFS) 的分区中，以及当前用户必须可以更改文件许可。如果这些条件不东路，不会显示错误消息，也不会设置许可。

这个参数应该只在你的应用程序么人文件中使用，不要改变共享系统文件的 ACL，否则，你打开了你的用户系统的安全漏洞。

该指定的许可设置不考虑安装前文件是否存在。

这个参数可以包含象下列格式一样一个或多个空格分隔的值:

<用户或组标识>-<访问类型>

[Files] 段支持下列访问类型:

full

同意“完全控制”许可，与修改相同 (看下面)，但又加上允许指定的用户/用户组获取文件所有权，并改变它的许可。通常保守的使用 modify 就足够了。

modify

同意“修改”许可，允许指定的用户/用户组读取、执行、修改和删除文件。

readexec

同意“读取和执行”许可，允许指定的用户/用户组读取和执行文件。

示例:
Permissions: authusers-modify
FontInstall

告诉安装程序需要安装的文件是一个字体文件，这个参数值是被保存到注册表或 WIN.INI 文件中的字体名，这个名称必须与和在资源管理器中双击字体文件看到的名字相同。注意，安装程序会在字体名后自动添加“(TrueType)”。

如果这个字体文件不是一个 TrueType 字体，你必须在标记参数中标记 fontisnttruetype。

这里建议你在安装字体到 {fonts} 目录时，使用 onlyifdoesntexist 和 uninsneveruninstall 标记。

要成功安装字体，用户必须是超级用户或管理组成员。

为与 64 位 Windows 兼容，字体不应该安装到 {sys} 目录。请改为 {fonts} 作为目标目录。

示例:
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; Flags: onlyifdoesntexist uninsneveruninstall
StrongAssemblyName

Specifies the strong assembly name of the file. 仅适用于卸载。

This parameter is ignored if the gacinstall flag isn't also specified.

示例:
StrongAssemblyName: "MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdef123456, ProcessorArchitecture=MSIL"
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

32bit

当在 Source 和 DestDir 参数使用时，确保 {sys} 常量映射到 32 位系统目录，regserver 和 regtypelib 标记将文件视为 32 位，以及 sharedfile 标记更新 32 位 SharedDLLs 注册表键。这是在 32 位模式安装时的默认动作。

64bit

当在 Source 和 DestDir 参数使用时，确保 {sys} 常量映射到 64 位系统目录，regserver 和 regtypelib 标记将文件视 64 位，以及 sharedfile 标记更新 64 位 SharedDLLs 注册表键。这是在 64 位模式安装时的默认动作。

allowunsafefiles

禁止编译器自动检查不安全文件。强烈推荐你不要使用这个标记，除非你有绝对的把握。

comparetimestamp

(不推荐，看下面)
如果安装的文件已经在用户系统中存在，以及至少下列条件中的一个为 true，则告诉安装程序进行时间戳比较:

  • 现有的文件和安装的文件都没有版本信息。
  • 条目中同时使用了 ignoreversion 标记。
  • 未使用 replacesameversion 标记，并且现有的文件和要安装的文件版本号相同 (用文件的版本信息决定)。

如果现有的文件的时间戳比安装的文件老，现有的文件将被替换。否则，将不替换。

如果还没有其它方法，不推荐使用这个标记，因为其中有一个内部问题: NTFS 分区在 UTC (不同于 FAT 分区) 贮存时间戳，因本地时间戳原因 -- Inno Setup 按默认工作 -- 只要用户改变他们系统的时间区域，或转到或使夏令时生效。这可能会导致用户不希望替换的文件被替换，或用户希望替换的文件未被替换。

confirmoverwrite

替换现有的文件前总是询问用户确认。

createallsubdirs

按默认，当编译器包含子目录搜索源文件名/通配符时，将跳过空目录。这个标记会使这些目录在安装时被创建 (就象在 [Dirs] 段创建一样)。

必须和 recursesubdirs 组合使用。

deleteafterinstall

告诉安装程序象平常一样安装文件，但一旦安装完成 (或中断) 则删除。这在提取脚本中的 [Run] 段指定要执行的临时程序时有用。

这个标记不会导致安装期间未被替换的现有文件被删除。

这个标记不能与 isreadme，regserver，regtypelib，restartreplace，sharedfile，或 uninsneveruninstall 标记组合使用。

dontcopy

在正常的文件复制阶段不复制文件到用户系统，但会静态编译到安装文件中。这个标记是有用的，如果要处理该文件是通过 [Code] 区段专门处理和使用提取函数 ExtractTemporaryFile 处理。

dontverifychecksum

防止安装程序在提取后校验文件。在你想修改的已编译到安装程序中的文件使用这个标记。

必须与 nocompression 组合。

external

这个标记告诉 Inno Setup 不要编译 Source 参数指定的文件到安装程序文件中，改为从分布的媒介或用户系统中复制。查阅 Source 参数的描述获取更多信息。

fontisnttruetype

如果用 FontInstall 参数的条目安装一个非 TrueType 字体，则使用这个标记。

gacinstall

Install the file into the .NET Global Assembly Cache. When used in combination with sharedfile , the file will only be uninstalled when the reference count reaches zero.

To uninstall the file Uninstaller uses the strong assembly name specified by parameter StrongAssemblyName .

An exception will be raised if an attempt is made to use this flag on a system with no .NET Framework present.

ignoreversion

不比较版本信息；不考虑版本号替换现有的文件。

这个标记应该用于你私人的程序中，不要用于共享的系统文件。

isreadme

表示文件为“自述”文件。安装程序中只有一个文件可以使用这个标记。当文件使用这个标记时，在安装完成后询问用户是否想查看自述文件。如果选择是，安装程序将使用与这个文件类型默认的程序打开该文件。因上，自述文件应该总是使用象 .txt，.wri 或 .doc 扩展名。

请注意，如果安装程序重新启动了用户的电脑 (安装了一个带 restartreplace 标记的文件或 [Setup] 段的 AlwaysRestart 指令设为 yes)，用户将没有查看自述文件的选项。

nocompression

预防编译器尝试压缩文件。在你知道压缩没有什么好处的文件 (例如 JPEG 图像) 上使用这个标记，可以加速编译进度，并可以使生成的安装程序更小。

noencryption

防止文件被加密贮存。如果你已经使用了 Encryption (用 [Setup] 段指令 Encryption)，但想让它可以在用户输入正确的密码之前用 [Code] 段支持函数 ExtractTemporaryFile 提取该文件，则使用这个标记)。

noregerror

当与 regserver 或 regtypelib 标记中的任一一个组合使用时，安装程序将在注册失败时不显示任何错误消息。

onlyifdestfileexists

仅在用户系统中已经存在相同名字的文件时安装文件。如果你的安装程序是已经安装的软件的补丁，并且你希望安装用户没有安装的文件时，这个标记可能有用。

onlyifdoesntexist

仅在用户系统中不存在时安装文件。

overwritereadonly

总是覆盖只读文件。如果不带这个标记，安装程序在遇到只读文件时询问用户是否覆盖。

promptifolder

按默认，当安装的文件比现有的文件是个较老的版本 (或当使用 comparetimestamp 时发现较早的时间戳)安装程序将不替换现有的文件 (查阅这个主题下面的备注段获取详细资料)。当使用这个标记时，安装程序将询问用户是否替换文件，默认的回答是保留现有的文件 。

recursesubdirs

告诉编译器或安装程序同时也搜索 Source 目录下子目录中的源文件名/通配符。

regserver

注册 OLE 服务 (a.k.a. ActiveX 控件)。使用这个标记，安装程序将查找和执行 DLL/OCX 的 DllRegisterServer 输出。卸载程序调用 DllUnregisterServer。当用于与共享文件结合时，DLL/OCX 只将在涉及的计数为零时取消注册。

在 64 位模式安装时，文件假定为 64 位映像，将按 64 位处理进行注册。你可以通过指定 32bit 标记忽略。

查阅这个主题下面的备注段获取详细资料。

regtypelib

注册类型库 (.tlb)。卸载程序将撤销类型库注册 (除非指定了 uninsneveruninstall 标记)。与 regserver 标记一样，当用于与共享文件结合时，文件只将在涉及的计数为零时取消注册。

在 64 位模式安装运行于x64版本的Windows时，类型库将按 64 位处理进行注册。你可以通过指定 32bit 标记忽略。

Registering type libraries in 64-bit mode on Itanium editions of Windows is not supported.

查阅这个主题下面的备注段获取详细资料。

replacesameversion

当使用这个标记，并且文件已经在用户系统中存在，以及它与要安装的文件版本号相同，安装程序将比较文件，如果它们的内部不同，则替换现有的文件。

默认动作 (例如，当这个标记未使用) 是不替换版本号相同的已有的文件。

restartreplace

这个标记通常用于替换系统核心文件。如果文件预先已经存在，且发现被锁定，以至于安装程序不能替换，安装程序将注册该文件 (用 WININIT.INI 可通过使用 MoveFileEx，分别用于 Windows 和 Windows NT) 在下次系统重新启动时替换。当出现这种情况时，将在安装完成时提示用户重新启动电脑。

重要提示: 这个 restartreplace 标记只能在用户有管理员权限时才能成功替换使用中的文件。如果用户没有管理员权限，将显示下列消息: “RestartReplace 失败: MoveFileEx 失败; 代码 5。”因此，当使用 restartreplace 时，强烈推荐你在 [Setup] 段设置“PrivilegesRequired=admin”，让你的安装程序必需有管理员权限才能安装。

setntfscompression

Instructs Setup to enable NTFS compression on the file (even if it didn't replace the file). If it fails to set the compression state for any reason (for example, if compression is not supported by the file system), no error message will be displayed。

sharedfile

使用这个标记的大多数文件被安装到 Windows 系统目录，包含 .OCX、.BPL 和 .DPL 文件。

使用 Windows 共享文件计数功能 (位于注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs)。这个功能是用于让文件在应用程序之间共享使用，不要不注意将它删除了。每次安装该文件，涉及的文件计数将增加，当使用这个文件的应用程序卸载，涉及的文件计数减少。如果计数减少到零，该文件被删除 (会通知用户确认，除非同时指定了 uninsnosharedfileprompt 标记)。

If Setup is run more than once, the reference count for the file will be incremented more than once. The uninstaller will decrement the reference count the same number of times, however, so no references are leaked (provided the UninstallLogMode [Setup] section directive isn't changed from its default setting of append)。

When this flag is used, do not specify {syswow64} in the DestDir parameter; use {sys} instead. Even though {sys} and {syswow64} map to the same underlying directory in a 32-bit mode install, the path name must exactly match what every other existing installer is using; otherwise, a second reference count for the file would be created, which could result in the file being removed prematurely. If you need to install a shared file to the 32-bit System directory in a 64-bit mode install, specify {sys} in the DestDir parameter and additionally include the 32bit flag。

skipifsourcedoesntexist

这个标记告诉编译器 -- 或安装程序，如果同时使用了 external 标记 -- 如果源文件不存在，只是跳过该条目，而不是显示一个错误消息。

solidbreak

When solid compression is enabled, this flag instructs the compiler to finalize the current compression stream and begin a new one before compressing the file(s) matched by Source. This allows Setup to seek to the file instantly without having to decompress any preceding files first. May be useful in a large, multi-component installation if you find too much time is being spent decompressing files belonging to components that weren't selected。

sortfilesbyextension

这个标记告诉编译器在按路径名排序前，先按文件扩展名排序压缩找到的文件。如果同时使用 solid compression，可以进一步减小安装程序大小。

sortfilesbyname

This flag instructs the compiler to compress the found files sorted by name befores it sorts by path name. This potentially decreases the size of Setup if solid compression is also used. If sortfilesbyextension is also used, files are first sorted by extension.

touch

这个标记命令安装程序设置安装的文件的时间/日期戳为 [Setup] 段 TouchDate 和 TouchTime 指令指定的值。

如果与 external 标记同时使用，这个标记无效。

uninsnosharedfileprompt

当卸载共享文件时，如果共享计数为零，不询问用户自动删除文件。必须与 sharedfile 标记组合使用才有效。

uninsremovereadonly

当卸载文件时，在删除文件前选删除它的只读属性。

uninsrestartdelete

当使用这个标记、并且该文件在卸载时正在被使用，卸载将文件放置到删除队列，直到系统重新启动经。卸载结束时会询问用户是否重新启动。这个标记通常在卸载不能用程序停止的外壳扩展的文件时有用。注意，要使用这个标记生效，必需要有管理员权限。

uninsneveruninstall

不删除这个文件。这个标记在安装在任何情况下不删除的公共共享文件时有用，象 MFC DLL。

请注意，如果这个标记与 sharedfile 标记组合使用，该文件将在卸载时不被删除，但涉及的计数仍将正确减少。

unsetntfscompression

Instructs Setup to disable NTFS compression on the file (even if it didn't replace the file). If it fails to set the compression state for any reason (for example, if compression is not supported by the file system), no error message will be displayed。

示例:
Flags: isreadme

组件和任务参数

公共参数

备注

如果文件已经在用户系统中存在，按默认，将根据下列规则替换:

  1. 1. 如果现有的文件版本老于安装的文件版本 (通过文件的版本信息确定)，现有的文件将被替换。
  2. 2. 如果现有的文件版本与安装的文件版本相同，不替换现有的文件，除非使用了 replacesameversion 标记，且两个文件的内容不一致。
  3. 3. 如果现有的文件版本新于安装的文件版本，或如果现有的文件有版本信息，但安装的文件没有，将不替换现有的文件。
  4. 4. 如果现有的文件没有版本信息，将被替换。

某些标记像 onlyifdoesntexist，ignoreversion，和 promptifolder 会更改上述的规则。

If Setup is unable to replace an existing file because it is in use by another process, 安装程序不能替换现有的文件，它将继续进行四次文件替换尝试，每次尝试延时一秒。如果所有尝试失败，将显示一个错误消息。

安装程序用 regserver 或 regtypelib 标记注册所有文件为安装的最后一个步骤。但是，如果 [Setup] 段指令 AlwaysRestart 设为 yes，或如果有用 restartreplace 标记的文件，所有文件在下次重新启动后注册 (通过在 Windows RunOnce 注册表键中创建一个条目)。

当卸载带扩展名 .HLP (Windows 帮助文件) 文件后，相应的 .GID 和 .FTS 文件也同样将自动卸载。


[Icons] 段

这个可选段定义所有创建在开始菜单和/或其它位置 (比如桌面) 的快捷方式。

这里是 [Icons] 段的例子:

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
Name: "{group}\Uninstall My Program"; Filename: "{uninstallexe}"

下列是所支持的参数列表:

Name (必需的)

要创建的快捷方式的名字和位置。在这个参数中可以使用任何外壳文件夹常量或目录常量。

请注意，快捷方式是贮存为文字文件，因此在普通文件名中不能使用的字符不这里也同样不能使用。同样，因为不可能有两个相同名字的文件一样，也不可能有两个相同名字的快捷方式。

示例:
Name: "{group}\My Program"
Name: "{group}\Subfolder\My Program"
Name: "{commondesktop}\My Program"
Name: "{commonprograms}\My Program"
Name: "{commonstartup}\My Program"
Filename (必需的)

快捷方式的命令行文件名，通常用一个目录常量开头。

除了文件和文件夹的名称，网址(网站地址)也可以指定。如果指定的是 URL，安装程序将创建一个 “Internet 快捷方式” (.url) 文件，并忽略 Parameters，WorkingDir，HotKey，和 Comment 参数。

在 64 位 Windows，注意当快捷方式是由一个 64 位程序运行，{sys} 常数将映射到本地 64 位系统目录，例如 Windows 资源管理器。This is true regardless of whether the install is running in 64 位模式。创建快捷方式总是指到 32 位系统目录，反而使用 {syswow64}。(这同样适用于该 WorkingDir 和 IconFilename 参数。)

示例:
Filename: "{app}\MYPROG.EXE"
Filename: "{uninstallexe}"
Filename: "{app}\FolderName"
Filename: "http://www.example.com/"
Parameters

快捷方式的可选命令行参数，可以包含常量。

示例:
Parameters: "/play filename.mid"
WorkingDir

The working (or Start In ) directory for the shortcut, which specifies the initial current directory for the program. This parameter can include constants.

If this parameter is not specified or is blank, Setup will try to extract a directory name from the Filename parameter. If that fails (unlikely), the working directory will be set to {sys} .

示例:
WorkingDir: "{app}"
HotKey

快捷方式的热键 (或快捷键) 设置，就是可以用于启动程序的组合键。

注意: 如果你改变了快捷键并重新安装了应用程序，Windows 可以继续认可老的快捷键，直到你注销并返回或重新启动系统。

示例:
HotKey: "ctrl+alt+k"
Comment

指定快捷方式的注释 (或描述) 对象。此参数可以包括常量。

示例:
Comment: "This is my program"
IconFilename

要显示的自定义图标文件名 (位于用户系统)。这可以是一个包含图标文件的可执行映像 (.exe, .dll)或一个 .ico 文件。如果这个参数未指定或空白，Windows 将使用文件的默认图标，这个参数可以包含常量。

示例:
IconFilename: "{app}\myicon.ico"

Note: when Setup is running on 64-bit Windows, it will automatically replace {pf32}\ in the filename with '%ProgramFiles(x86)%\' to work around a bug in 64-bit Windows: 64-bit Windows replaces {pf32}\ with '%ProgramFiles%\' which is incorrect.

IconIndex

用 IconFilename 指定的文件中使用的以零为基点的图标索引。

如果 IconIndex 非零值，以及 IconFilename 未指定或空白，它将默认为 IconFilename 与 Filename 名相同。

示例:
IconIndex: 0
AppUserModelID

Specifies the Windows 7 Application User Model ID for the shortcut. 忽略对早期Windows版本。此参数可以包括常量。

示例:
AppUserModelID: "MyCompany.MyProg"
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

closeonexit

当设置这个标记时，安装程序将设置快捷方式的“退出时关闭”属性。这个标记只在快捷方式指向 MS-DOS 应用程序时有效 (如果它是 .pif 扩展名)。如果没有这个标记也没有指定 dontcloseonexit 标记，安装程序将尝试改变“退出时关闭”属性。

createonlyiffileexists

当设置这个标记时，安装程序将只在用 Filename 参数指定的文件存在时尝试创建图标。

dontcloseonexit

等同于 closeonexit，除了它导致安装程序不选中“退出时关闭”属性。

excludefromshowinnewinstall

Prevents the Start menu entry for a newly installed application shortcut from receiving a highlight on Windows 7 (or later). Ignored on earlier Windows versions.

foldershortcut

创建一个特殊的象“文件夹快捷方式”的快捷方式类型。一般来说，文件夹快捷方式出现在开始菜单中，单击该快捷方式会打开资源管理器窗口显示文件夹内容。与此相反，“文件夹快捷方式”将象菜单一样显示目标文件夹的内容，而不是单独打开一个窗口。

This flag is currently ignored when running on Windows 7 (or later), as folder shortcuts do not expand properly on the Start Menu anymore. It is not known whether this is a bug in Windows 7 or a removed feature.

当使用这个标记，文件夹名必须在 Filename 参数中指定。指定一个文件名字将导致毫无用处的快捷方式。

preventpinning

Prevents a Start menu entry from being pinnable to Taskbar or the Start Menu on Windows 7 (or later). This also makes the entry ineligible for inclusion in the Start menu's Most Frequently Used (MFU) list. Ignored on earlier Windows versions.

runmaximized

当设置这个标记时，安装程序设置图标的“运行”设置为“最大化”，使程序在启动后初始状态为最大化。

runminimized

当设置这个标记时，安装程序设置图标的“运行”设置为“最小化”，使程序在启动后初始状态为最小化。

uninsneveruninstall

通知卸载程序不删除图标。

useapppaths

当设置这个标记时，只在 Filename 参数中指定文件名 (无路径)，安装程序将从
“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths”注册表键获取路径名，并自动添加到文件名前面。

示例:
Flags: runminimized

组件和任务参数

公共参数


[INI] 段

这是你希望安装程序在用户系统中设置 .INI 文件条目的可选段。

这里是 [INI] 段的例子:

[INI]
Filename: "MyProg.ini"; Section: "InstallSettings"; Flags: uninsdeletesection
Filename: "MyProg.ini"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"

下列是所支持的参数列表:

Filename (必需的)

你希望安装程序修改的 .INI 文件的名字，可以包含常量。如果这个参数是空白的，它写入到系统的 Windows 目录中的 WIN.INI 中。

示例:
Filename: "{app}\MyProg.ini"
Section (必需的)

要创建的用于放置 INI 条目的区段名，可以包含常量。

示例:
Section: "Settings"
Key

要设置的键名，可以包含常量。如果这个参数未指定或是空白的，将不创建键。

示例:
Key: "Version"
String

分配给键的值，可以使用常量。如果这个参数未指定，将不创建键。

示例:
String: "1.0"
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

createkeyifdoesntexist

仅在如果键名不存在时分配到键。

uninsdeleteentry

当程序卸载时删除条目。这可以写 uninsdeletesectionifempty 标记组合使用。

uninsdeletesection

当程序卸载时，删除条目所在的整个区段。这对于在 Windows 它自身包含的 INI 文件 (象一些 WIN.INI 中的区段) 中使用，这具有很大的危险性。你应该只在应用程序私有的文件中使用这个标记。

uninsdeletesectionifempty

等同于 uninsdeletesection，但只在没有键剩余的情况下删除段，它可以与 uninsdeleteentry 标记组合使用。

示例:
Flags: uninsdeleteentry

组件和任务参数

公共参数


[InstallDelete] 段

这个可选段格式与 [UninstallDelete] 一样，除了它的条目处理在安装步骤之前。


[Languages] 段

Inno Setup 支持多语言安装。[Languages] 段用来定义安装程序中可使用的语言。

安装程序用下列顺序确定在消息中默认使用的语言:

Non-Unicode Inno Setup:

  1. 1. 搜索 LanguageID 设置的语言 (通常指定在语言文件 .isl 的 [LangOptions] 段) 匹配首选语言标识和当前用户界面语言或本地 (根据 LanguageDetectionMethod) 子语言标识两者，and whose LanguageCodePage setting matches the system code page.
  2. 1. 如果未发现，只搜索匹配的首选语言标识。如果两个或多个可用文有相同的首选语言标识，它将使用在 [Languages] 段中列出的第一个。
  3. 3. 如果未发现，默认为指定在 [Languages] 段的第一个语言。

Unicode Inno Setup :

  1. It searches for a language whose LanguageID setting (normally specified in the [LangOptions] section of the language's .isl file) matches both the primary language identifier and sublanguage identifier of the current user's UI language or locale (depending on the setting of LanguageDetectionMethod ).
  2. If no match is found, it searches for just a primary language identifier match. If two or more available languages have the same primary language identifier, it selects the first one listed in the [Languages] section.
    Exception: Simplified Chinese is excluded from consideration in this step if the user's UI language or locale (depending on the setting of LanguageDetectionMethod ) is Traditional Chinese, and vice versa.
  3. If no match is found, it defaults to the first language specified in the [Languages] section.

如果 [Setup] 段的 ShowLanguageDialog 指令设置为 yes (默认)，将显示一个选择语言对话框，使用户有机会忽略语言安装选择。在用户系统中不能正确显示的(non Unicode Inno Setup)语言将被隐藏。请查阅 [LangOptions] 段帮助主题获取详细信息。

下面是 [Languages] 段的一个示例。它定义两个语言: 简体中文，根据标准的汉化版的 Default.isl 文件，以及英语原版的语言文件。

[Languages]
Name: "chs"; MessagesFile: "compiler:Default.isl"
Name: "en"; MessagesFile: "compiler:English.isl"
Name (必需的)

语言的内部名字，你可以设置为你喜欢的任何东西。这可以用作 [LangOptions] 或 [Messages] 段条目的前缀，使这些条目只用一种语言。{language} 常量返回选定语言的内部名字。

示例:
Name: "en"
MessagesFile (必需的)

指定要读取的默认消息的文件名。这个文件必须位于你的安装程序的来源目录，除非你指定了文件的完整路径或用“compiler:”作为前缀，在这种场合下它会在编译器目录下查找文件。

当指定多个文件时，它按指定的顺序读取，因此最后的消息文件将覆盖前面的所有文件。

查阅 [Messages] 段帮助主题获取 .isl 文件格式中的详细资料。

示例:
MessagesFile: "compiler:English.isl"
MessagesFile: "compiler:Default.isl,compiler:MyMessages.isl"
LicenseFile

指定可选的许可协议文件名字，用 .txt 或 .rtf (富文本) 格式，它显示在用户选择程序的目标目录之前。在运行安装程序编译器时，这个文件必须位于你的安装程序的来源目录，除非你指定了文件的完整路径或用“compiler:”作为前缀，在这种场合下它会在编译器目录下查找文件。

示例:
LicenseFile: "license-English.txt"
InfoBeforeFile

指定可选的“自述”文件名字，用 .txt 或 .rtf (富文本) 格式，它显示在用户选择程序的目标目录之前。在运行安装程序编译器时，这个文件必须位于你的安装程序的来源目录，除非你指定了文件的完整路径或用“compiler:”作为前缀，在这种场合下它会在编译器目录下查找文件。

示例:
InfoBeforeFile: "infobefore-English.txt"
InfoAfterFile

指定可选的“自述”文件名字，用 .txt 或 .rtf (富文本) 格式，它显示在完成安装之后。在运行安装程序编译器时，这个文件必须位于你的安装程序的来源目录，除非你指定了文件的完整路径或用“compiler:”作为前缀，在这种场合下它会在编译器目录下查找文件。

这与 isreadme 文件不同，它里面的文字显示这一个向导页中，而不是一个单独的记事本窗口。

示例:
InfoAfterFile: "infoafter-English.txt"


[Messages] 段

[Messages] 段用于定义显示在安装程序和卸载程序中的消息。通常，你不需要在你的脚本中创建 [Messages] 段，按默认，所有的消息在 Inno Setup 的 Default.isl 文件 (或在 [Languages] 段指定的条目) 中已经包含。

但是，一些特殊的消息可以用创建在脚本文件 [Messages] 段的内容覆盖。要覆盖消息，首先你需要知道你想更的消息 ID。这可以通过搜索 Default.isl 很容易地找到。例如，你想改变向导页“下一步(&N) >”按钮为“前进(&F) >”，此消息的 ID 是“ButtonNext”，所以你只要在 [Messages] 段写入下面的内容:

[Messages]
ButtonNext=前进(&F) >

一些消息包含变量，象 %1 和 %2。你可以重新排列变量顺序 (例如将 %2 移到 %1 之前)，也可以在需要的情况下重复使用同一变量 (例如“%1 ... %1 %2”)。在带变量的消息中，使用两个连续的“%”字符，表示要置入单个“%”。“%n”表示换行符。

如果你想翻译所有 Inno Setup 的文本其它语言，而不是修改 Default.isl 或覆盖在你创建的所有脚本中的每个消息，将 Default.isl 复制一份，用其它名字象 MyTranslation.isl 命名。在你想使用 MyTranslation.isl 的安装程序中，创建一个[Languages] 段指向该文件。

在一些场合中，这里有多个 [Languages] 段条目，在你的脚本中指定一个 [Messages] 段条目 (与 .isl 文件中指定的条目不同) 将按默认不考虑所有语言消息。要应用一个 [Messages] 段条目到只使用于一种语言，在语言的内部名字前加到前缀并跟随一个点。例如:

en.ButtonNext=前进(&F) >

特殊用途标识

BeveledLabel 消息的特殊用途是可以用于指定显示在向导窗口和卸载程序窗口左下角的文本行，下面是一个示例:

[Messages]
BeveledLabel=Inno Setup


[CustomMessages] 段

[CustomMessages] 段用于定义 {cm:...} 常量的自定义消息值。查阅常量帮助文档内容获取更多信息。

从 [CustomMessages] 段使用 {cm:...} 常量获取的带描述的任务示例:

[CustomMessages]
CreateDesktopIcon=创建桌面快捷方式(&D)

[Tasks]
Name: desktopicon; Description: "{cm:CreateDesktopIcon}"

消息可以获取从 %1 到 %9 的声明。你可以重新排列它们的顺序 (例如，将 %2 移到 %1 之前)，也可以在需要时重复声明 (例如“%1 ... %1 %2”)。在带声明的消息中，使用两个连续的“%”字符表示嵌入单个“%”。“%n”创建一个换行符。

在一些多个 [Languages] 段条目的场合下，在你的脚本中指定一个 [CustomMessages] 段条目 (对于 .isl 文件) 将按默认覆盖所有语言的消息。要只在一种语言中使用 [CustomMessages] 段条目，用语言的内部名字作为前缀，然后跟随一个句点。例如:

nl.CreateDesktopIcon=Maak een snelkoppeling op het &bureaublad

通常所有有下列自定义消息定义和每种语言的翻译已经包含在各自的语言 .isl 文件中 (以简体中文语言为例):

NameAndVersion=%1 版本 %2
AdditionalIcons=附加快捷方式:
CreateDesktopIcon=创建桌面快捷方式(&D)
CreateQuickLaunchIcon=创建快速运行栏快捷方式(&Q)
ProgramOnTheWeb=%1 网站
UninstallProgram=卸载 %1
LaunchProgram=运行 %1
AssocFileExtension=将 %2 文件扩展名与 %1 建立关联(&A)
AssocingFileExtension=正在将 %2 文件扩展名与 %1 建立关联...

你可以在脚一中使用这些预定的自定义消息。下列是在 UninstallProgram 中使用的示例:

[Icons]
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"


[LangOptions] 段

[LangOptions] 段用于定义特殊语言设置，象字体一样，被安装程序和卸载程序使用。通常，你不需要在你的脚本中创建 [LangOptions] 按默认，所有的特殊语言设置在 Inno Setup 的 Default.isl 文件 (或在 [Languages] 段指定的条目) 中已经包含。

下面是 [LangOptions] 段的一个例子。(下面列出的设置是默认值。)

[LangOptions]
LanguageName=English
LanguageID=$0409
LanguageCodePage=0
DialogFontName=
DialogFontSize=8
WelcomeFontName=Verdana
WelcomeFontSize=12
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8
RightToLeft=no

LanguageName 是语言的本地名字 (不一定是英文名字)。它显示在多语言安装程序中的选择语言对话框可用语言列表中。它以 Unicode 字符形式贮存在内部。要嵌入 Unicode 字符，使用“<nnnn>”，这里的“nnnn”是 4 位数的十六进制 Unicode 字符集。你可以在 Windows 2000 及更高版本中的附件中用字符映射表查找字符的 Unicode 字符集。

LanguageID 是语言的数字化“语言标识”。查阅 在MSDN 中获取有效的语言标识列表 [external link] 。这是用来自动侦测默认使用的语言，请确保它格式使用正确，总是用一个“$”符号作为开头，因为语言标识是十六进制格式。如果该语言当前不存在语言标识，将这个设为 0。

Non Unicode Inno Setup LanguageCodePage :
LanguageCodePage 用来指定显示语言所需要的“代码页”。当在多语言安装的选择语言对话框中加上可用语言列表时，它的 LanguageCodePage 值与系统代码页(如果设置了 ShowUndisplayableLanguages)进行比较以确定应该列出哪些语言。只有那些 LanguageCodePage 的值与系统代码页匹配的语言才能显示。目的是不显示在用户系统中不能正确显示的语言。例如，俄语文字不能在除代码页为 1251 的系统中正确显示，因此如果系统运行在其它代码页中，俄语没有必要列出。
如果 LanguageCodePage 设为 0，该语言将总是在列表中列出，且不考虑系统的代码页。它可以判断在包含纯 ASCII 的语言中使用 0。例如象 English，因为 ASCII 同样可以在所有代码页中使用。

Unicode Inno Setup LanguageCodePage :
LanguageCodePage specifies the "code page" (character set) needed for the compiler to convert the text in the language's .isl file to Unicode. Note that text in the .iss file such as a [CustomMessages] entry for the language is not converted and should be in Unicode already.
如果 LanguageCodePage 设为 0，the system code page will be used.

DialogFontName 和 DialogFontSize 指定在对话框中使用的字体名和大小 (磅)。如果 DialogFontName 设置不存在，然后设置 DefaultDialogFontName [Setup] 区段指令将用于字体名称。如果指定的字体名在用户系统中不存在，或是一个空字串，将用 8 磅大小的 Microsoft Sans Serif 或 MS Sans Serif 替换。

WelcomeFontName 和 WelcomeFontSize 指定在欢迎向导页和安装完成向导页中的字体名和大小 (磅)。如果指定的字体名在用户系统中不存在，或是一个空的字符，将用 12 磅大小的 Microsoft Sans Serif 或 MS Sans Serif 替换。

TitleFontName 和 TitleFontSize 指定在背景窗口顶部 (仅在 WindowVisible=yes 时可见) 使用的字体名和大小 (磅)。如果指定的字体名在用户系统中不存在，将用 29 磅的 Arial 代替。如果指定的字体名是空的，将用 29 磅的 Microsoft Sans Serif 或 MS Sans Serif 代替。

CopyrightFontName 和 CopyrightFontSize 指定在背景窗口中 AppCopyright 消息 (仅在 WindowVisible=yes 时可见) 使用的字体名和大小 (磅)。如果指定的字体名在用户系统中不存在，将用 8 磅的 Arial 代替。如果指定的字体名是空的，将用 8 磅的 Microsoft Sans Serif 或 MS Sans Serif 代替。

RightToLeft specifies whether the language is written from right to left. If set to yes, text alignment and reading order will be reversed (with some intentional exceptions), and controls will be arranged from right to left ("flipped")。

在有多个 [Languages] 段条目的情况下，在脚本中指定一个 [LangOptions] 段指令 (不同于 an .isl 文件) 将按默认不覆盖所有语言指令。要应用 [LangOptions] 段指令到其中一种语言，用语言的内部名字跟随一个点作为前缀。例如:

en.LanguageName=English


[Registry] 段

这个可选段用来定义一些你想用安装程序在用户系统中创建、修改或删除的注册表键/值。

按默认，用安装程序创建的注册表键和值在卸载时不删除。如果你想让卸载程序删除键或值，你必须包含下面 uninsdelete* 标记中的一个。

下面是 [Registry] 段的一个示例:

[Registry]
Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"

下列是所支持的参数列表:

Root (必需的)

根键。必须是下列值中的一个:

HKCR | (HKEY_CLASSES_ROOT)
HKCU | (HKEY_CURRENT_USER)
HKLM | (HKEY_LOCAL_MACHINE)
HKU | (HKEY_USERS)
HKCC | (HKEY_CURRENT_CONFIG)

该值可以带有 32 或 64 的后缀。带 32 后缀的根键值 (例如 HKLM32) 映射到 32 位系统注册表，带 64 后缀的根键值 (例如 HKLM64) 映射到 64 位系统注册表。

带 64 后缀的根键值只能在安装程序在 64 位 Windows 运行时使用，否则将会出错。在支持 32 和 64 位结构的安装程序中，这可以通过添加 Check: IsWin64 参数检查来避免，这会在运行于 32 位 Windows 时该条目自动跳过。

不带后缀的根键值 (例如 HKLM) 等于带后缀 32 的值 (例如 HKLM32)，除非安装程序运行于 64 位模式，在这种情况下，该值等于带后缀 64 的值 (例如 HKLM64)。

示例:
Root: HKCU
Subkey (必需的)

子键名，可以包含常量。

示例:
Subkey: "Software\My Company\My Program"
ValueType

值的数据类型。必须是下面中的一个:

none
string
expandsz
multisz
dword
qword
binary

如果指定了 none (默认设置)，安装程序将创建一个没有键值的键，在这种情况下，ValueName 和 ValueData 参数将被忽略。
如果指定了 string，安装程序将创建一个字符串 (REG_SZ) 值。
如果指定了 expandsz，安装程序将创建一个扩展字符串 (REG_EXPAND_SZ) 值。
如果指定了 multisz，安装程序将创建一个多行文本 (REG_MULTI_SZ) 值。
如果指定了 dword，安装程序将创建一个32位整数 (REG_DWORD) 值。
如果指定了 qdword，安装程序将创建一个64位整数 (REG_QDWORD) 值。
如果指定了 binary，安装程序将创建一个二进制 (REG_BINARY) 值。

示例:
ValueType: string
ValueName

要创建的值名，可以包含常量。如果是空白的，将写入到“默认”值。如果 ValueType 参数设置为 none，这个参数被忽略。

示例:
ValueName: "Version"
ValueData

值的数据。如果 ValueType 参数是 string，expandsz 或 multisz，这是这一个可以包含常量的字符串。如果数据类型是 dword或qdword，这可以是一个十进制整数 (例如“123”)，一个十六进制整数 (例如“$7B”) 或解析为整数的常量。如果数据类型是 binary，这可以是下列形式的十六进制字节序列: “00 ff 12 34”。如果数据类型是 none，将被忽略。

在 string，expandsz 或 multisz 类型值中，你可以在这个参数中使用一个特殊的常量调用 {olddata}。{olddata} 用先前的注册表值数据替换。如果你想添加一个字串到现有的值中，{olddata} 常量非常有用。例如，{olddata};{app}。如果该值不存在或现有的值不是一个字符串类型，{olddata} 常量将被删除。如果创建的值是一个 multisz 类型，但现有的值不是多行字符类型(例如，它是 REG_SZ 或 REG_EXPAND_SZ)，{olddata} 常量也将被删除。反这亦然。

在 multisz 类型值中，你可以在参数中使用一个特殊常量调用 {break} 以插入换行符。

示例:
ValueData: "1.0"
Permissions

指定登录注册表键 ACL (访问控制列表) 的附加权限。如果你不熟悉 ACL 或你不知道为什么要列改，不推荐你使用这个参数，因为误用会导致重大的系统安全问题。

这个参数在当前用户必须有更改注册表的权限时才有效。这些条件不满足时，不会显示错误消息，权限也不会被设置。

这个参数应该只使用于你的应用程序特有的注册表键中。不要更改顶级键象 HKEY_LOCAL_MACHINE\SOFTWARE 的 ACL，否则你自己打开了用户系统的安全漏洞。

指定的权限不考虑注册表键在安装前是否存在。如果 ValueType 是 none 和使用了 deletekey 或 deletevalue 标记时，不要设置这个权限。

On Itanium editions of Windows, this parameter is only effectual on 32-bit registry keys. (There is no such limitation on x64 editions of Windows.)

这个参数可以包含象下列格式一样一个或多个空格分隔的值:

<用户或组标识>-<访问类型>

下面是 [Registry] 段支持的访问类型:

full

同意“完全控制”许可，与 modify 相同 (看下面)，但又加上允许指定的用户/用户组获取注册表键所有权，并改变它的许可。通常保守的使用 modify 就足够了。

modify

同意“修改”许可，允许指定的用户/用户组读取、修改和删除注册表值或子键。

read

同意“读取和执行”许可，允许指定的用户/用户组读取注册表值或子键。

示例:
Permissions: users-modify
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

createvalueifdoesntexist

当指定了这个标记，安装程序只在如果没有相同名字的值存在时创建值。如果值类型是 none，或如果你指定了 deletevalue 标记，这个标记无效。

deletekey

当指定了这个标记，安装程序在如果条目存在的情况下，先将尝试删除它，包括其中的所有值和子键。如果 ValueType 不是 none，那么它将创建一个新的键和值。

要防止意外，如果 Subkey 是空白的或只包含反斜框符号，安装时这个标记被忽略。

deletevalue

当指定了这个标记，安装程序在如果值存在的情况下，先将尝试删除值，如果 ValueType 是 none，那么在键不存在的情况下，它将创建键以及新值。

dontcreatekey

当指定了这个标记，如果键已经在用户系统中不存在，安装程序将不尝试创建键或值。如果键不存在，不显示错误消息。

一般来说，这个键与 uninsdeletekey 标记组合使用，在卸载时删除键，但安装时不创建键。

noerror

如果安装程序因任何原因创建键或值失败，不显示错误消息。

preservestringtype

这只在当 ValueType 参数是 string 或 expandsz 时适用。当指定这个标记，并且值不存在或现有的值不是 string 类型 (REG_SZ 或 REG_EXPAND_SZ)，它将用 ValueType 指定的类型创建。如果值存在，并且是 string 类型，它将用先存在值的相同值类型替换。

uninsclearvalue

当卸载程序时，设置值数据为空字符 (类型 REG_SZ)。这个标记不能与 uninsdeletekey 标记组合使用。

uninsdeletekey

当卸载程序时，删除整个键，包含其中的所有值和子键。这对于 Windows 自身使用的键明显不是一个好方法。你只能用于你的应用程序特有的键中。

为防止意外，安装期间如果 Subkey 空白或只包含反斜框符号，这个标记被忽略。

uninsdeletekeyifempty

当程序卸载时，如果这个键的内部没有值或子键，则删除这个键。这个标记可以与 uninsdeletevalue 组合使用

为防止意外，安装期间如果 Subkey 空白或只包含反斜框符号，这个标记被忽略。

uninsdeletevalue

当程序卸载时删除该值。这个标记不能与 uninsdeletekeyifempty 组合使用

注意: 在早于 1.1 的 Inno Setup 版本中，你可以使用这个标记连同数据类型 none，那么它的功能与“如果空则删除键”标记一样。这个方法已经不支持了。你必须使用 uninsdeletekeyifempty 标记实现。

示例:
Flags: uninsdeletevalue

组件和任务参数

公共参数


[Run] & [UninstallRun] 段

[Run] 段是可选的，用来指定程序完成安装后、在安装程序显示最终对话框之前要执行的程序数，[UninstallRun] 段也可样是可选的，用来指定在卸载第一步要执行的程序数。除在下面有注释的外，两个段用相同的语法。

程序按它们在脚本中的出现顺序执行。按默认，当处理 [Run]/[UninstallRun] 段条目时，安装程序/卸载程序将在处理下一个任务之前等待，直到程序终止。除非使用了 nowait，shellexec 或 waituntilidle 标记。

注意，按默认，如果 [Run] 段队列文件中的一个正在执行的程序要在下一次重新启动后替换 (通过调用 MoveFileEx 或通过修改 wininit.ini)，安装程序将进行侦测，并在安装结束后提示用户重新启动电脑。如果你不想这么做，设置 RestartIfNeededByRun 指令为 no。

下面是 [Run] 段的一个示例:

[Run]
Filename: "{app}\INIT.EXE"; Parameters: "/x"
Filename: "{app}\README.TXT"; Description: "查看自述文件"; Flags: postinstall shellexec skipifsilent
Filename: "{app}\MYPROG.EXE"; Description: "运行应用程序"; Flags: postinstall nowait skipifsilent unchecked

下列是所支持的参数列表:

Filename (必需的)

要执行的程序，或要打开的文件/文件夹。如果 Filename 不是一个可执行文件 (.exe 或 .com) 或批处理文件 (.bat 或 .cmd)，你必须在条目中使用该 shellexec 标记。这个参数可以包含常量。

示例:
Filename: "{app}\INIT.EXE"
Description

仅在 [Run] 段有效。这是条目的描述，可以包含常量。这个描述用于带 postinstall 标记的条目。如果条目的描述未指定，安装程序将使用一个默认描述。这个描述根据条目的类型(normal 或 shellexec)。

示例:
Description: "查看自述文件"
Parameters

程序的可选命令行参数，可以包含常量。

示例:
Parameters: "/x"
WorkingDir

默认初始化为当前目录启动。如果这个参数未指定或是空白的，它使用 Filename 参数中的目录。如果 Filename 不包含路径，它将使用默认目录。这个参数可以包含常量。

示例:
WorkingDir: "{app}"
StatusMsg

仅在 [Run] 段有效。确定程序执行时显示在向导页的消息。如果这个参数未指定可是空白的，将使用默认的消息“正在完成安装...”。这个参数可以包含常量。

示例:
StatusMsg: "正在安装 BDE..."
RunOnceId

仅在 [UninstallRun] 段有效。如果已经安装了相同的应用程序，卸载日志文件中的“run”条目将被复制一个副本。通过分配一个字符给 RunOnceId，可以确保在卸载期间特殊的 [UninstallRun] 条目只执行一次。例如，如果卸载日志中有两个或更多“run”条目用“DelService”的 RunOnceId 设置，只执行最后一个用“DelService”的 RunOnceId 设置的条目；其它的将被忽略。注意 RunOnceId 比校是区分大小写的。

示例:
RunOnceId: "DelService"
Verb

Specifies the action to be performed on the file. Must be combined with the shellexec flag. Commonly available verbs include "open" and "print". If this parameter is not specified or is blank, the default verb for the file type will be used (typically "open")。

示例:
Verb: "print"
Flags

这个参数是额外选项设置。多个选项可以使用空格隔开。支持下面的选项:

32bit

Causes the {sys} constant to map to the 32-bit System directory when used in the Filename and WorkingDir parameters. This is the default behavior in a 32-bit mode install。

这个标记不能与 shellexec 组合使用。

64bit

Causes the {sys} constant to map to the 64-bit System directory when used in the Filename and WorkingDir parameters. This is the default behavior in a 64-bit mode install。

This flag can only be used when Setup is running on 64-bit Windows, otherwise an error will occur. On an installation supporting both 32- and 64-bit architectures, it is possible to avoid the error by adding a Check: IsWin64 parameter, which will cause the entry to be silently skipped when running on 32-bit Windows。

这个标记不能与 shellexec 组合使用。

hidewizard

如果指定了这个标记，向导将在程序运行期间隐藏。

nowait

如果指定了这个标记，它将在处理下一个 [Run] 条目前或完成安装前不等待进程执行完成。不能与 waituntilidle 或 waituntilterminated 组合使用。

postinstall

仅在 [Run] 段有效。告诉安装程序在安装完成向导页创建一个选择框，用户可以选中或不选中这个选择框从而决定是否处理这个条目。以前这个标记调用 showcheckbox。

如果安装程序已经重新启动了用户的电脑 (安装了一个带 restartreplace 标记的文件或如果 [Setup] 段的 AlwaysRestart 指令是 yes 引起的)，选择框没有机会出现，因此这些条目不会被处理。

[Files] 段条目中的 isreadme 标记现在已被废弃。如果编译器带 isreadme 标记的条目，它将从 [Files] 段条目中忽略这个标记，并在 [Run] 段条目列表的开头插入一个生成的 [Run] 条目。这相生成的 [Run] 段条目运行自述文件，并带有 shellexec，skipifdoesntexist，postinstall 和 skipifsilent 标记。

runascurrentuser

如果指定了这个标记，the spawned process will inherit Setup/Uninstall's user credentials (typically, full administrative privileges)。

This is the default behavior when the postinstall flag is not used。

这个标记不能与 runasoriginaluser 组合使用。

runasoriginaluser

仅在 [Run] 段有效。If this flag is specified and the system is running Windows Vista or later, the spawned process will execute with the (normally non-elevated) credentials of the user that started Setup initially (i.e., the "pre-UAC dialog" credentials)。

This is the default behavior when the postinstall flag is used。

If a user launches Setup by right-clicking its EXE file and selecting "Run as administrator", then this flag, unfortunately, will have no effect, because Setup has no opportunity to run any code with the original user credentials. The same is true if Setup is launched from an already-elevated process. Note, however, that this is not an Inno Setup-specific limitation; Windows Installer-based installers cannot return to the original user credentials either in such cases。

这个标记不能与 runascurrentuser 组合使用。

runhidden

如果指定了这个标记，它将在隐藏窗口中运行程序。请在执行一个要提示用户输入的程序中不要使用这个标记。

runmaximized

如果指定了这个标记，将在最大化窗口运行程序或文档。

runminimized

如果指定了这个标记，将在最小化窗口运行程序或文档。

shellexec

如果 Filename 不是一个直接可执行文件 (.exe 或 .com 文件)，这个标记是必需的。当设置这个标记时，Filename 可以是一个文件夹或任何已注册的文件类型 -- 包括 .hlp，.doc 等。该文件将用用户系统中与这个文件类型关联的应用程序打开，与在资源管理器双击文件的方法是相同的。

按默认，当使用 shellexec 标记时，将不等待，直到生成的进程终止。
如果你需要，你必须添加标记 waituntilterminated。注意，如果新进程未生成，它不能执行也将不等待 -- 例如，文件指定指定为一个文件夹。

skipifdoesntexist

如果这个标记在 [Run] 段中指定，如果 Filename 不存在，安装程序不显示错误消息。

如果这个标记在 [UninstallRun] 段中指定，如果 Filename 不存在，卸载程序不显示“一些元素不能删除”的警告。

在使用这个标记时， Filename 必须是一个绝对路径。

skipifnotsilent

仅在 [Run] 段有效。告诉安装程序如果安装程序未在后台运行则跳过这个条目。

skipifsilent

仅在 [Run] 段有效。告诉安装程序如果安装程序在后台运行则跳过这个条目。

unchecked

仅在 [Run] 段有效。告诉安装程序初始为不选中选择框。如果用户希望处理这个条目，可以通过选取选择框执行。如果 postinstall 标记未同时指定，这个标记被忽略。

waituntilidle

如果指定了这个标记，它将在未输入期间等待，直到进程等待用户输入，而不是等待进程终止。(调用 WaitForInputIdle Win32 函数。) 不能与 nowait 或 waituntilterminated 组合使用。

waituntilterminated

如果指定这个标记，将等待到进程完全终止。注意这是一个默认动作 (也就是你不需要指定这个标记)，除非你使用了 shellexec 标记，在这种情况下，如果你要等待，需要指定这个标记。不能与 nowait 或 waituntilidle 组合使用。

示例:
Flags: postinstall nowait skipifsilent

组件和任务参数

公共参数


[UninstallDelete] 段

这个可选段定义你想让卸载程序删除除用 [Files] 或 [Dirs] 条目安装/创建外的其它文件或目录，或由你应用程序创建的一些公共使用的 .INI 文件。卸载程序在卸载时最后一步处理这些条目。

这里是 [UninstallDelete] 段的例子:

[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"

下列是所支持的参数列表:

Type (必需的)

指定卸载程序要删除的是什么。必须是下面中的一个:

files

该 Name 参数指定一个详细的文件名，或带通配符的文件名。

filesandordirs

除同时还匹配目录名外，功能与 files 相同，并删除任何名字匹配的目录以及包含它们中的所有文件和子目录。

dirifempty

当使用这个参数时，Name 参数必须是目录名，但它不能包含通配符。该目录只在不包含任何文件或子目录的情况下才被删除。

示例:
Type: files
Name (必需的)

要删除的文件或目录名。

注意: 不要尝试在这里使用通配符用来删除 {app} 目录中的所有文件。有两个原因强烈推荐你不要这么做。首先，用户通常不希望将他们放置在应用程序目录中的数据文件在没有警告的情况下被删除 (例如，如果用户将它移动到其它驱动器，那么有些不用删除的内容将被卸载)。最好是保留它让最终用户在卸载后手动删除。同时，如果用户由于过失刚好将程序安装在危险的目录(例如，C:\WINDOWS)，如果这时卸载将后果严重。再说一遍，不要这么做!

示例:
Name: "{win}\MYPROG.INI"

组件和任务参数

公共参数


Pascal 脚本: 介绍

Pascal 脚本功能 (modern Delphi-like Pascal) 增加了许多新的功能定制你的安装程序和卸载程序，一些例子:

  • 支持自定义条件的情况下的中断安装和卸载。
  • 支持的安装程序运行时添加自定义向导页。
  • 在安装前、安装期间、安装后从 Pascal 脚本提取或调用 DLL 或其它文件。
  • 支持当作任何普通常量的脚本化常量，从注册表读取，从 ini 读取和从命令行读取常量等。
  • 支持运行时自定义条件下的类型、组件和/或任务的删除。
  • 根据自定义条件支持有条件的 [Files] 、 [Registry] 、 [Run] 等条目安装。
  • 几乎 Inno Setup 自身可以执行的许多支持函数来自 Pascal 脚本。

也可以使用一个完整的 run-time 调试器调试你的自定义 Pascal 脚本。

用于 Inno Setup 的脚本引擎是来自 Innerfuse 的 Carlo Kok 编写的 Innerfuse Pascal 脚本，Innerfuse Pascal 脚本是免费使用，并带有源代码。查阅 http://www.remobjects.com/ps [external link] 获取更多信息。

注: Pascal 脚本工作于运行期间，它与编译期间的行为无关。

请查阅
创建 [Code] 段
事件函数
脚本化常量
检查参数
BeforeInstall 和 AfterInstall 参数
卸载代码
示例
支持的函数参考
支持的类参考
使用自定义向导页
使用 DLL
使用 COM 自动操作对象


Pascal 脚本: 创建 [Code] 段

[Code] 段是一个可选的指定 Pascal 脚本的段。Pascal 脚本可以用于通过多种方法定制安装程序或卸载程序。请注意，创建 Pascal 脚本不是很方便，需要有丰富的 Inno Setup 使用经验，以及 Pascal 或至少一种其它类型语言的设计知识。

Inno Setup 目录的“Examples”子目录下有一些“Code*.iss”和“UninstallCode*.iss”文件，包含各种 [Code] 段的使用示例。请在创建你自己的 Pascal 脚本前仔细学习。

注意: 要学习更多 Pascal 程序语言，你可查找一些有用的 Marco Cantu 免费的基本 Pascal 书籍。请查阅 http://www.marcocantu.com/epascal/ [external link] 。


Pascal 脚本: 事件函数

Pascal 脚本可以包含单独的在适当时间调用的事件函数。

安装事件函数

安装支持下列事件函数:

function InitializeSetup (): Boolean;

在安装程序初始化时调用，返回 False 中断安装，返回 True 反之。

procedure InitializeWizard ();

使用这个事件函数启动时改变向导或向导页。你不能在它触发之后使用 InitializeSetup 事件函数，向导窗体不退出。

procedure DeinitializeSetup ();

仅在安装程序终止前调用。注意这个函数在即使用户在任何内容安装之前退出安装程序时也会调用。

procedure CurStepChanged (CurStep: TSetupStep );

你可以用这个事件函数执行你自己的预安装和安装后任务。

在实际安装开始之前用 CurStep=ssInstall 调用，或在实际安装完成之后用 CurStep=ssPostInstall 调用，或在安装程序终止之前和安装完成之后用 CurStep=ssDone 调用。

procedure CurInstallProgressChanged (CurProgress, MaxProgress: Integer);

You can use this event function to monitor progress while Setup is extracting files, creating shortcuts, creating INI entries, and creating registry entries.

function NextButtonClick ( CurPageID : Integer): Boolean;

当用户单击下一步按钮时调用。如果你返回 True，向导将移到下一页；如果返回 False，它仍保留在当前页 (用 CurPageID 指定)。

注意，这个函数在静寂安装时也会调用，即使没有下一步按钮让用户单击。安装程序会模拟单击下一步按钮。在静寂安装中，如果你的 NextButtonClick 函数在安装之前返回 False，安装程序将自动退出。

function BackButtonClick ( CurPageID : Integer): Boolean;

当用户单击上一步按钮时调用。如果你返回 True，向导将移到上一页；如果返回 False，它仍保留在当前页 (用 CurPageID 指定)。

procedure CancelButtonClick ( CurPageID : Integer; var Cancel, Confirm: Boolean);

当用户单击取消按钮或单击窗口中的关闭按钮时调用。 Cancel 参数指定是否是一般的取消进程；默认为 True。 Confirm 参数指定是否显示“退出安装程序吗？”的消息框；一般它默认为 True。如果 Cancel 设为 False，那么 Confirm 值被忽略。

function ShouldSkipPage ( PageID : Integer): Boolean;

向导调用这个事件函数确定是否在所有页或不在一个特殊页 (用 PageID 指定) 显示。如果返回 True，将跳过该页；如果你返回 False，该页被显示。

注意: 这个事件函数不被 wpWelcome、wpPreparing 和 wpInstalling 页调用，还有安装程序已经确定要跳过的页也不会调用 (例如，没有包含组件安装程序的 wpSelectComponents)。

procedure CurPageChanged ( CurPageID : Integer);

在新向导页 (用 CurPageID 指定) 显示后调用。

function CheckPassword (Password: String): Boolean;

如果安装程序在 Pascal 脚本中发现 CheckPassword 事件函数，它自动显示密码页并调用 CheckPassword 检查密码。返回 True 表示接受密码，返回 False 拒绝。

要避免在编译的安装程序的 [Code] 段内部贮存真实的密码，你应该用其它无用的信息进行比较: 计算你自己密码的 SHA1 的无用信息，然后编译到 GetSHA1OfString (Password) 。通过这种方法保护实际密码值。

注意: 如果你已经用 CheckPassword 事件函数，并且你的用户带“/PASSWORD=”和“/SILENT” 安装命令行参数 运行安装程序，你的 CheckPassword 函数将在其它事件函数调用之前调用，包括 InitializeSetup 。

function NeedRestart (): Boolean;

返回 True 告诉安装程序提示用户在安装结束时重新启动系统，False 则反之。

function UpdateReadyMemo (Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;

如果安装程序在 Pascal 脚本中发现 UpdateReadyMemo 事件函数，当 准备安装 向导页变为激活页时自动调用。它返回的文字显示在 准备安装 向导页的备注注册中，该文字是用 NewLine 参数 换行 的字符。参数空间包含一个带安全可靠的字符。其它参数将包含安装程序用于设置段的字符 (可能是空的)。 MemoDirInfo 参数包含象 选择目录 段的字符。

procedure RegisterPreviousData (PreviousDataKey: Integer);

要在自定义向导页中贮存用户输入的设置，在 Pascal 脚本中放入一个 RegisterPreviousData 事件函数，并调用 SetPreviousData(PreviousDataKey, ...) 替换它，每个设置一次。

function CheckSerial (Serial: String): Boolean;

如果安装程序在 Pascal 脚本中发现 CheckSerial 事件函数，将在用户信息向导页中自动出现一个序列号对象 (必须在你的 [Setup] 段中使用 UserInfoPage=yes !)。返回 True 表示接受序列号，返回 False 拒绝。当使用序列号时，请一定要记住，这个软件无加密可言，况且 Inno Setup 源代码是免费获取的，它对于有经验的人从安装程序中删除序列号保护并不是很困难的事。使用这个只是方便用户在你的应用程序中仔细检查输入的序列号 (贮存在 {userinfoserial} 常量)。

function GetCustomSetupExitCode : Integer;

返回一个非零值命令安装程序返回一个自定义退出代码。这个函数只在安装程序运行完成并且退出代码已是零时调用。同时请查阅 安装退出代码 。

function PrepareToInstall (var NeedsRestart: Boolean): String;

You can use this event function to detect and install missing prerequisites and/or to shutdown any application which is about to be updated.

Return a non empty string to instruct Setup to stop at the 正在准备安装 向导页，显示返回的字符串作为错误信息。 Set NeedsRestart to True if a restart is needed. This function is only called if Setup didn't already determine it can't continuere files specified in the [Files] and [InstallDelete] sections were queued (by some other installation) to be replaced or deleted on the next restart.

This event function is called before Setup checks for files being in-use if CloseApplications is set to yes .

procedure RegisterExtraCloseApplicationsResources ;

To register extra files which Setup should check for being in-use if CloseApplications is set to yes , place a RegisterExtraCloseApplicationsResources event function in the Pascal script and call RegisterExtraCloseApplicationsResource inside it, once per file.

卸载事件函数

卸载支持下列函数:

function InitializeUninstall (): Boolean;

返回 False 中断卸载，True 则反之。

procedure InitializeUninstallProgressForm ();

Use this event function to make changes to the progress form at startup. You can't use the InitializeUninstall event function for this since at the time it is triggered, the progress form does not yet exist.

procedure DeinitializeUninstall ();
procedure CurUninstallStepChanged (CurUninstallStep: TUninstallStep );
function UninstallNeedRestart (): Boolean;

返回 True 命令卸载程序提示用户在卸载完成后重新启动系统，False 则反之。

常量

这里是这些函数使用的常量列表:

  • CurStep 值
    ssInstall, ssPostInstall, ssDone
  • CurUninstallStep 值
    usAppMutexCheck, usUninstall, usPostUninstall, usDone
  • 预定义 向导页 PageID 值
    wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

这些函数不需要在 Pascal 脚本中出现。


Pascal 脚本: 脚本化常量

Pascal 脚本可以包含当安装程序想知道脚本化的 {code:...} 常量的值时调用的函数，调用的函数必须有 1 个名为 Param 的字符串参数，并且必须返回一个字符串或一个布尔值。

{code:...} 常量语法是:: {code: FunctionName | Param }

  • FunctionName 指定 Pascal 脚一函数的名字。
  • Param 指定用于函数的字符参数。如果你省略 Param ，将使用一个空字符串。
  • 如果你想在常量内部包含一个逗号，垂直条(“|”)，或括弧 (“}”)，你必须通过“%-encoding”避开它。用“%”字符串替换该字符串，后面再跟随它的两位数的十六进制代码。逗号是“%2c”，垂直条是“%7c”，括弧是“%7d”。如果你想包含一个实际的“%”字符串，使用“%25”。
  • Param 可以包含常量。请注意，你 不 需要将常量的括弧替换为上面所说的结构；它只在别处使用时才需要替换。
示例:
DefaultDirName={code:MyConst}\My Program

这里是一个包含上述使用的函数的 [Code] 段的示例。

[Code]
function MyConst(Param: String): String;
begin
  Result := ExpandConstant('{pf}');
end;

如果通过 {code:...} 常量指定的函数不包含在 {code:...} 段，它必须是一个 支持的函数 。这是一个示例。

[INI]
FileName: "{app}\MyIni.ini"; Section: "MySettings"; Key: "ShortApp"; String: "{code:GetShortName|{app}}"

请查阅
常量


Pascal 脚本: 检查参数

这里是一个被所有段中被参数分开的条目支持的可选 参数 这就是:

Check

确定是否被处理或不处理的检查函数名。函数必须是一个 [Code] 段中的自定义函数或 支持函数 。

除单一的名字外，你也可以使用 boolean 表达式。查阅 组件和任务参数 获取 boolean 表达式的详细资料。

对于每个检查函数，可以包含一个安装程序用于检查函数的逗号隔开的参数列表。允许的参数类型是字符串，整数和布尔数。字符串参数可以包含常量。

这是一个可以从参数列表内部调用的 支持函数 : ExpandConstant 。

示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: MyProgCheck
Source: "A\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck(ExpandConstant('{app}\A'))
Source: "B\MYFILE.TXT"; DestDir: "{app}"; Check: DirExists(ExpandConstant('{app}\B'))

所有检查函数必须有一个布尔返回值。如果检查函数 (或布尔表达式) 返回 True，那么条目将被处理，否则跳过。

安装程序可能随时调用检查函数，即使只有一个条目使用检查函数。如果你的函数执行一个长的代码段，你可以通过在全局变量中“缓冲”结果执行代码来优化它。

如果安装程序已经确定不处理条目，那么检查函数不被调用。

A check function for a [Files] section entry using a wildcard is called once per file matching the wildcard. Use CurrentFileName to check for which file the function is called.

这里是上述使用的包含检查函数的 [Code] 段的示例。函数 DirExists 是 支持函数 ，因此不包含在这个 [Code] 段内。

[Code]
var
  MyProgChecked: Boolean;
  MyProgCheckResult: Boolean;

function MyProgCheck(): Boolean;
begin
  if not MyProgChecked then begin
    MyProgCheckResult := MsgBox('Do you want to install MyProg.exe to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes;
    MyProgChecked := True;
  end;
  Result := MyProgCheckResult;
end;

function MyDirCheck(DirName: String): Boolean;
begin
  Result := DirExists(DirName);
end;


Pascal 脚本: BeforeInstall 和 AfterInstall 参数

这里有两个可选的被除 [Languages]、[Types]、[Components] 和 [Tasks] 之外的所有段中的那些分隔到参数中的条目支持的 参数 。它们是:

BeforeInstall

该函数名只在条目安装之前调用一次。该函数必须是 [Code] 段的自定义函数或一个 支持函数 。

可以包含一个安装程序用于函数的逗号隔开的参数列表。允许的参数类型是字符、整数和布尔数。字符参数可以包含常量。

这里是一个可以从参数列表内部调用的 支持函数 : ExpandConstant 。

示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall
Source: "A\MYFILE.TXT"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall2('{app}\A\MYFILE.TXT')
Source: "B\MYFILE.TXT"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall2('{app}\B\MYFILE.TXT')
Source: "MYPROG.CHM"; DestDir: "{app}"; BeforeInstall: Log('Before MYPROG.CHM Install')
AfterInstall

该函数名只在条目安装之后调用一次。该函数必须是 [Code] 段的自定义函数或一个 支持函数 。可以包含一个安装程序用于函数的参数。这个参数可以包含常量。

可以包含一个安装程序用于函数的逗号隔开的参数列表。允许的参数类型是字符、整数和布尔数。字符参数可以包含常量。

这里是一个可以从参数列表内部调用的 支持函数 : ExpandConstant 。

示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; AfterInstall: MyAfterInstall
Source: "A\MYFILE.TXT"; DestDir: "{app}"; AfterInstall: MyAfterInstall2('{app}\A\MYFILE.TXT')
Source: "B\MYFILE.TXT"; DestDir: "{app}"; AfterInstall: MyAfterInstall2('{app}\B\MYFILE.TXT')
Source: "MYPROG.CHM"; DestDir: "{app}"; AfterInstall: Log('After MYPROG.CHM Install')

所有 BeforeInstall 和 AfterInstall 函数不需要有返回值。

如果安装程序已经确认不处理条目，则不调用 BeforeInstall 或 AfterInstall 函数。

A BeforeInstall or AfterInstall function for a [Files] section entry using a wildcard is called once per file matching the wildcard. Use CurrentFileName to check for which file the function is called.

这里是一个包含上述函数使用的 [Code] 段示例，函数 CurrentFileName 和 Log 是一个 支持函数 ，因此不包含在这个 [Code] 段。

[Code]
procedure MyBeforeInstall();
begin
  MsgBox('About to install MyProg.exe as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;

procedure MyBeforeInstall2(FileName: String);
begin
  MsgBox('About to install ' + FileName + ' as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;

procedure MyAfterInstall();
begin
  MsgBox('Just installed MyProg.exe as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;

procedure MyAfterInstall2(FileName: String);
begin
  MsgBox('Just installed ' + FileName + ' as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;


Pascal 脚本: 卸载代码

Pascal 脚本也可以包含卸载时调用的代码。查看 事件函数 主题获取更多信息。

当设计在卸载时执行的代码时，这是你所要知道的重要内容: 当彼此安装多个版本的应用程序时，卸载时只运行 一 个 Pascal 脚本。一般来说，脚本从最近安装的进行选择。如果这样，会卸载最新版本的应用程序，你最新版本的 Inno Setup 会被 降级 。相似情况，当安装较老版本的应用程序时，有可能会覆盖新版本的应用程序。

当生成其它安装程序的补丁安装程序时，补丁安装程序将与原始安装程序共享相同的卸载日志 (就象 Uninstallable 设为 yes 以及 AppId 设置为与原始安装程序相同)，确保补丁包含与原始安装程序完整的 [Code] 段副本，否则，卸载时不会运行代码。

可是，补丁安装程序中 Uninstallable 设为 no ，那么安装程序不用知道现有的卸载程序或卸载日志，在这种情况下，补丁安装程序不需要包含与原始安装程序的 [Code] 段副本。


Pascal 脚本: 示例

Pascal 脚本示例脚本位于单独的文件夹。打开 Inno Setup 安装目录下的“Examples”子目录中的“Code*.iss”文件中的一个。


Pascal 脚本: 支持的函数参数

Pascal 脚本可以内部调用的支持函数。

支持函数

这里是可以从 Pascal 脚本内部调用的支持的函数列表。

安装或卸载信息 函数

function GetCmdTail: String;
function ParamCount: Integer;
function ParamStr(Index: Integer): String;

function ActiveLanguage: String;

function CustomMessage(const MsgName: String): String;
function FmtMessage(const S: String; const Args: array of String): String;
function SetupMessage(const ID: TSetupMessageID): String;

function WizardDirValue: String;
function WizardGroupValue: String;
function WizardNoIcons: Boolean;
function WizardSetupType(const Description: Boolean): String;
function WizardSelectedComponents(const Descriptions: Boolean): String;
function WizardSelectedTasks(const Descriptions: Boolean): String;
function WizardSilent: Boolean;

function IsUninstaller: Boolean;
function UninstallSilent: Boolean;

function CurrentFileName: String;

function ExpandConstant(const S: String): String;
function ExpandConstantEx(const S: String; const CustomConst, CustomValue: String): String;

function IsComponentSelected(const Components: String): Boolean;
function IsTaskSelected(const Tasks: String): Boolean;

procedure ExtractTemporaryFile(const FileName: String);
function ExtractTemporaryFiles(const Pattern: String): Integer;

function GetPreviousData(const ValueName, DefaultValueData: String): String;
function SetPreviousData(const PreviousDataKey: Integer; const ValueName, ValueData: String): Boolean;

function Terminated: Boolean;

function RegisterExtraCloseApplicationsResource(const DisableFsRedir: Boolean; const AFilename: String): Boolean;
function RmSessionStarted: Boolean;

异常 函数

procedure Abort;
procedure RaiseException(const Msg: String);

function GetExceptionMessage: String;
procedure ShowExceptionMessage;

                系统
             函数

function IsAdminLoggedOn: Boolean;
function IsPowerUserLoggedOn: Boolean;
function GetWindowsVersion: Cardinal;
procedure GetWindowsVersionEx(var Version: TWindowsVersion);
function GetWindowsVersionString: String;

function IsWin64: Boolean;
function Is64BitInstallMode: Boolean;
function ProcessorArchitecture: TSetupProcessorArchitecture;

function InstallOnThisVersion(const MinVersion, OnlyBelowVersion: String): Boolean;

function GetEnv(const EnvVar: String): String;
function GetUserNameString: String;
function GetComputerNameString: String;

function GetUILanguage: Integer;

function FontExists(const FaceName: String): Boolean;

function FindWindowByClassName(const ClassName: String): HWND;
function FindWindowByWindowName(const WindowName: String): HWND;
function SendMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Longint;
function PostMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Boolean;
function SendNotifyMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Boolean;
function RegisterWindowMessage(const Name: String): Longint;
function SendBroadcastMessage(const Msg, WParam, LParam: Longint): Longint;
function PostBroadcastMessage(const Msg, WParam, LParam: Longint): Boolean;
function SendBroadcastNotifyMessage(const Msg, WParam, LParam: Longint): Boolean;

procedure CreateMutex(const Name: String);
function CheckForMutexes(Mutexes: String): Boolean;

procedure MakePendingFileRenameOperationsChecksum: String;

procedure UnloadDLL(Filename: String);
function DLLGetLastError(): Longint;

                字符
             函数

function Chr(B: Byte): Char;
function Ord(C: Char): Byte;
function Copy(S: String; Index, Count: Integer): String;
function Length(s: String): Longint;
function Lowercase(S: String): String;
function Uppercase(S: String): String;
function AnsiLowercase(S: String): String;
function AnsiUppercase(S: String): String;
function StringOfChar(c: Char; I : Longint): String;
procedure Delete(var S: String; Index, Count: Integer);
procedure Insert(Source: String; var Dest: String; Index: Integer);
function StringChange(var S: String; const FromStr, ToStr: String): Integer;
function StringChangeEx(var S: String; const FromStr, ToStr: String; const SupportDBCS: Boolean): Integer;
function Pos(SubStr, S: String): Integer;
function AddQuotes(const S: String): String;
function RemoveQuotes(const S: String): String;
function ConvertPercentStr(var S: String): Boolean;

function CompareText(const S1, S2: string): Integer;
function CompareStr(const S1, S2: string): Integer;

function Format(const Format: string; const Args: array of const): string;

function Trim(const S: string): String;
function TrimLeft(const S: string): String;
function TrimRight(const S: string): String;

function StrToIntDef(s: string; def: Longint): Longint;
function StrToInt(s: string): Longint;
function StrToInt64Def(s: string; def: Int64): Int64;
function StrToInt64(s: string): Int64;
function IntToStr(i: Int64): String;

function CharLength(const S: String; const Index: Integer): Integer;

function AddBackslash(const S: String): String;
function RemoveBackslashUnlessRoot(const S: String): String;
function RemoveBackslash(const S: String): String;
function AddPeriod(const S: String): String;
function ChangeFileExt(const FileName, Extension: string): String;
function ExtractFileExt(const FileName: string): String;
function ExtractFileDir(const FileName: string): String;
function ExtractFilePath(const FileName: string): String;
function ExtractFileName(const FileName: string): String;
function ExtractFileDrive(const FileName: string): String;
function ExtractRelativePath(const BaseName, DestName: String): String;
function ExpandFileName(const FileName: string): String;
function ExpandUNCFileName(const FileName: string): String;

function GetDateTimeString(const DateTimeFormat: String; const DateSeparator, TimeSeparator: Char): String;

procedure SetLength(var S: String; L: Longint);
procedure CharToOemBuff(var S: AnsiString);
procedure OemToCharBuff(var S: AnsiString);

function GetMD5OfString(const S: AnsiString): String;
function GetMD5OfUnicodeString(const S: String): String;
function GetSHA1OfString(const S: AnsiString): String;
function GetSHA1OfUnicodeString(const S: String): String;

function SysErrorMessage(ErrorCode: Integer): String;

function MinimizePathName(const Filename: String; const Font: TFont; MaxLen: Integer): String;

数组 函数

function GetArrayLength(var Arr: Array): Longint;
procedure SetArrayLength(var Arr: Array; I: Longint);

                Variant
             函数

function Null: Variant;
function Unassigned: Variant;

function VarIsEmpty(const V: Variant): Boolean;
function VarIsNull(const V: Variant): Boolean;
function VarType(const V: Variant): TVarType;

                文件系统
             函数

function DirExists(const Name: String): Boolean;
function FileExists(const Name: String): Boolean;
function FileOrDirExists(const Name: String): Boolean;
function FileSize(const Name: String; var Size: Integer): Boolean;
function GetSpaceOnDisk(const Path: String; const InMegabytes: Boolean; var Free, Total: Cardinal): Boolean;
function GetSpaceOnDisk64(const Path: String; var Free, Total: Int64): Boolean;

function FileSearch(const Name, DirList: string): String;
function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean;
function FindNext(var FindRec: TFindRec): Boolean;
procedure FindClose(var FindRec: TFindRec);

function GetCurrentDir: String;
function SetCurrentDir(const Dir: string): Boolean;
function GetWinDir: String;
function GetSystemDir: String;
function GetSysWow64Dir: String;
function GetTempDir: String;
function GetShellFolder(Common: Boolean; const ID: TShellFolderID): String;
function GetShellFolderByCSIDL(const Folder: Integer; const Create: Boolean): String;

function GetShortName(const LongName: String): String;
function GenerateUniqueName(Path: String; const Extension: String): String;

function GetVersionNumbers(const Filename: String; var VersionMS, VersionLS: Cardinal): Boolean;
function GetVersionNumbersString(const Filename: String; var Version: String): Boolean;

function IsProtectedSystemFile(const Filename: String): Boolean;

function GetMD5OfFile(const Filename: String): String;
function GetSHA1OfFile(const Filename: String): String;

function EnableFsRedirection(const Enable: Boolean): Boolean;

                文件
             函数

function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;
function ExecAsOriginalUser(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;
function ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;
function ShellExecAsOriginalUser(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;

function RenameFile(const OldName, NewName: string): Boolean;
function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;
function DeleteFile(const FileName: string): Boolean;
procedure DelayDeleteFile(const Filename: String; const Tries: Integer);
function SetNTFSCompression(const FileOrDir: String; Compress: Boolean): Boolean;

function LoadStringFromFile(const FileName: String; var S: AnsiString): Boolean;
function LoadStringsFromFile(const FileName: String; var S: TArrayOfString): Boolean;
function SaveStringToFile(const FileName, S: AnsiString; const Append: Boolean): Boolean;
function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;
function SaveStringsToUTF8File(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;

function CreateDir(const Dir: string): Boolean;
function ForceDirectories(Dir: string): Boolean;
function RemoveDir(const Dir: string): Boolean;
function DelTree(const Path: String; const IsDir, DeleteFiles, DeleteSubdirsAlso: Boolean): Boolean;

function CreateShellLink(const Filename, Description, ShortcutTo, Parameters, WorkingDir, IconFilename: String; const IconIndex, ShowCmd: Integer): String;

procedure RegisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean);
function UnregisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean): Boolean;
procedure RegisterTypeLibrary(const Is64Bit: Boolean; const Filename: String);
function UnregisterTypeLibrary(const Is64Bit: Boolean; const Filename: String): Boolean
procedure IncrementSharedCount(const Is64Bit: Boolean; const Filename: String; const AlreadyExisted: Boolean);
function DecrementSharedCount(const Is64Bit: Boolean; const Filename: String): Boolean;
procedure RestartReplace(const TempFile, DestFile: String);
procedure UnregisterFont(const FontName, FontFilename: String);
function ModifyPifFile(const Filename: String; const CloseOnExit: Boolean): Boolean;

                注册表
             函数

function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;
function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;

function RegGetSubkeyNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;
function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;

function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean;
function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: AnsiString): Boolean;

function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal): Boolean;
function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName, Data: AnsiString): Boolean;

function RegDeleteKeyIncludingSubkeys(const RootKey: Integer; const SubkeyName: String): Boolean;
function RegDeleteKeyIfEmpty(const RootKey: Integer; const SubkeyName: String): Boolean;
function RegDeleteValue(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;

                INI 文件
             函数

function IniKeyExists(const Section, Key, Filename: String): Boolean;
function IsIniSectionEmpty(const Section, Filename: String): Boolean;

function GetIniBool(const Section, Key: String; const Default: Boolean; const Filename: String): Boolean
function GetIniInt(const Section, Key: String; const Default, Min, Max: Longint; const Filename: String): Longint;
function GetIniString(const Section, Key, Default, Filename: String): String;

function SetIniBool(const Section, Key: String; const Value: Boolean; const Filename: String): Boolean;
function SetIniInt(const Section, Key: String; const Value: Longint; const Filename: String): Boolean;
function SetIniString(const Section, Key, Value, Filename: String): Boolean;

procedure DeleteIniSection(const Section, Filename: String);
procedure DeleteIniEntry(const Section, Key, Filename: String);

                自定义安装程序向导页
             函数

function CreateInputQueryPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputQueryWizardPage;
function CreateInputOptionPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; Exclusive, ListBox: Boolean): TInputOptionWizardPage;
function CreateInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage;
function CreateInputFilePage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputFileWizardPage;
function CreateOutputMsgPage(const AfterID: Integer; const ACaption, ADescription, AMsg: String): TOutputMsgWizardPage;
function CreateOutputMsgMemoPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; const AMsg: AnsiString): TOutputMsgMemoWizardPage;
function CreateOutputProgressPage(const ACaption, ADescription: String): TOutputProgressWizardPage;
function CreateCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TWizardPage;

function CreateCustomForm: TSetupForm;

function PageFromID(const ID: Integer): TWizardPage;
function PageIndexFromID(const ID: Integer): Integer;
function ScaleX(X: Integer): Integer;
function ScaleY(Y: Integer): Integer;

                对话框
             函数

function MsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons: Integer): Integer;
function SuppressibleMsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons, Default: Integer): Integer;
function GetOpenFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean;
function GetSaveFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean;
function BrowseForFolder(const Prompt: String; var Directory: String; const NewFolderButton: Boolean): Boolean;
function ExitSetupMsgBox: Boolean;

                COM 自动操作对象支持
             函数

function CreateOleObject(const ClassName: string): Variant;
function GetActiveOleObject(const ClassName: string): Variant;
function IDispatchInvoke(Self: IDispatch; PropertySet: Boolean; const Name: String; Par: array of variant): variant;
function CreateComObject(const ClassID: TGUID): IUnknown;
function StringToGUID(const S: String): TGUID;
procedure OleCheck(Result: HResult);
procedure CoFreeUnusedLibraries;

安装程序记录 函数

procedure Log(const S: String);

                其它
             函数

procedure Sleep(const Milliseconds: LongInt);
function Random(const Range: Integer): Integer;
procedure Beep;

procedure BringToFrontAndRestore;

                不建议使用
             函数

function LoadDLL(const DLLName: String; var ErrorCode: Integer): Longint;
function CallDLLProc(const DLLHandle: Longint; const ProcName: String; const Param1, Param2: Longint; var Result: Longint): Boolean;
function FreeDLL(const DLLHandle: Longint): Boolean;

function CastStringToInteger(var S: String): Longint;
function CastIntegerToString(const L: Longint): String;

常量

这里是用于这些函数的常量列表:

CurStep 值
ssInstall, ssPostInstall, ssDone

CurPage 值
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

TMsgBoxType
mbInformation, mbConfirmation, mbError, mbCriticalError

MsgBox - 按钮标记
MB_OK, MB_OKCANCEL, MB_ABORTRETRYIGNORE, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL, MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB_SETFOREGROUND

MsgBox - 返回值
IDOK, IDCANCEL, IDABORT, IDRETRY, IDIGNORE, IDYES, IDNO

TGetShellFolderID
sfDesktop, sfStartMenu, sfPrograms, sfStartup, sfSendTo, sfFonts, sfAppData, sfDocs, sfTemplates, sfFavorites, sfLocalAppData

Reg* - 返回值 (请查阅 [Registry] 帮助文档)
HKEY_CLASSES_ROOT, HKEY_CLASSES_ROOT_32, HKEY_CLASSES_ROOT_64,
HKEY_CURRENT_USER, HKEY_CURRENT_USER_32, HKEY_CURRENT_USER_64,
HKEY_LOCAL_MACHINE, HKEY_LOCAL_MACHINE_32, HKEY_LOCAL_MACHINE_64,
HKEY_USERS, HKEY_USERS_32, HKEY_USERS_64,
HKEY_PERFORMANCE_DATA,
HKEY_CURRENT_CONFIG, HKEY_CURRENT_CONFIG_32, HKEY_CURRENT_CONFIG_64,
HKEY_DYN_DATA,
HKCR, HKCR32, HKCR64, HKCU, HKCU32, HKCU64, HKLM, HKLM32, HKLM64, HKU, HKU32, HKU64, HKCC, HKCC32, HKCC64

TShouldProcessEntryResult
srNo, srYes, srUnknown

TSetupMessageID
用 'msg' + 消息名。 示例: SetupMessage(msgSetupAppTitle)

Exec 和 ShellExec - ShowCmd 值
SW_SHOW, SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE, SW_HIDE


Pascal 脚本: 支持的类参考

下面是你可以在 Pascal 脚本中使用的支持类的列表。也有两个支持对象可用: 类型 MainForm: TMainForm，类型 WizardForm: TWizardForm 和类型 UninstallProgressForm: TUninstallProgressForm，以及一个特殊常量: 类型 crHand: TControl.Cursor。注意: MainForm 只在 WindowVisible 时可见。

注意: 你也可以从 Embarcadero Technologies 的 Delphi Visual Component Library (VCL) 帮助查找，下面的类主要是简单地包装 VCL 类在 Inno Setup 中使用。请查阅 http://info.borland.com/techpubs/delphi/ [external link] 和 ftp://ftp.borland.com/pub/delphi/techpubs/delphi3/d3cs.zip [external link] 。

TObject = class
  constructor Create;
  procedure Free;
end;

TPersistent = class(TObject)
  procedure Assign(Source: TPersistent);
end;

TComponent = class(TPersistent)
  function FindComponent(AName: String): TComponent;
  constructor Create(AOwner: TComponent);
  property Owner: TComponent; read write;
  procedure DestroyComponents;
  procedure Destroying;
  procedure FreeNotification(AComponent: TComponent);
  procedure InsertComponent(AComponent: TComponent);
  procedure RemoveComponent(AComponent: TComponent);
  property Components[Index: Integer]: TComponent; read;
  property ComponentCount: Integer; read;
  property ComponentIndex: Integer; read write;
  property ComponentState: Byte; read;
  property DesignInfo: Longint; read write;
  property Name: String; read write;
  property Tag: Longint; read write;
end;

TStrings = class(TPersistent)
  function Add(S: String): Integer;
  procedure Append(S: String);
  procedure AddStrings(Strings: TStrings);
  procedure Clear;
  procedure Delete(Index: Integer);
  function IndexOf(const S: String): Integer;
  procedure Insert(Index: Integer; S: String);
  property Count: Integer; read;
  property Text: String; read write;
  property CommaText: String; read write;
  procedure LoadFromFile(FileName: String);
  procedure SaveToFile(FileName: String);
  property Strings[Index: Integer]: String; read write;
  property Objects[Index: Integer]: TObject; read write;
end;

TNotifyEvent = procedure(Sender: TObject);

TStringList = class(TStrings)
  function Find(S: String; var Index: Integer): Boolean;
  procedure Sort;
  property Duplicates: TDuplicates; read write;
  property Sorted: Boolean; read write;
  property OnChange: TNotifyEvent; read write;
  property OnChanging: TNotifyEvent; read write;
end;

TStream = class(TObject)
  function Read(Buffer: String; Count: Longint): Longint;
  function Write(Buffer: String; Count: Longint): Longint;
  function Seek(Offset: Longint; Origin: Word): Longint;
  procedure ReadBuffer(Buffer: String; Count: Longint);
  procedure WriteBuffer(Buffer: String; Count: Longint);
  function CopyFrom(Source: TStream; Count: Longint): Longint;
  property Position: Longint; read write;
  property Size: Longint; read write;
end;

THandleStream = class(TStream)
  constructor Create(AHandle: Integer);
  property Handle: Integer; read;
end;

TFileStream = class(THandleStream)
  constructor Create(Filename: String; Mode: Word);
end;

TGraphicsObject = class(TPersistent)
  property OnChange: TNotifyEvent; read write;
end;

TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut);

TFontStyles = set of TFontStyle;

TFont = class(TGraphicsObject)
  constructor Create;
  property Handle: Integer; read;
  property Color: Integer; read write;
  property Height: Integer; read write;
  property Name: String; read write;
  property Pitch: Byte; read write;
  property Size: Integer; read write;
  property PixelsPerInch: Integer; read write;
  property Style: TFontStyles; read write;
end;

TCanvas = class(TPersistent)
  procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
  procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
  procedure Draw(X, Y: Integer; Graphic: TGraphic);
  procedure Ellipse(X1, Y1, X2, Y2: Integer);
  procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: Byte);
  procedure LineTo(X, Y: Integer);
  procedure MoveTo(X, Y: Integer);
  procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
  procedure Rectangle(X1, Y1, X2, Y2: Integer);
  procedure Refresh;
  procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);
  function TextHeight(Text: String): Integer;
  procedure TextOut(X, Y: Integer; Text: String);
  function TextWidth(Text: String): Integer;
  property Handle: Integer; read write;
  property Pixels: Integer Integer Integer; read write;
  property Brush: TBrush; read;
  property CopyMode: Byte; read write;
  property Font: TFont; read;
  property Pen: TPen; read;
end;

TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor);

TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame);

TPen = class(TGraphicsObject)
  constructor Create;
  property Color: TColor; read write;
  property Mode: TPenMode; read write;
  property Style: TPenStyle; read write;
  property Width: Integer; read write;
end;

TBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross);

TBrush = class(TGraphicsObject)
  constructor Create;
  property Color: TColor; read write;
  property Style: TBrushStyle; read write;
end;

TGraphic = class(TPersistent)
  procedure LoadFromFile(const Filename: String);
  procedure SaveToFile(const Filename: String);
  property Empty: Boolean; read write;
  property Height: Integer; read write;
  property Modified: Boolean; read write;
  property Width: Integer; read write;
  property OnChange: TNotifyEvent; read write;
end;

TBitmap = class(TGraphic)
  procedure LoadFromStream(Stream: TStream);
  procedure SaveToStream(Stream: TStream);
  property Canvas: TCanvas; read write;
  property Handle: HBITMAP; read write;
end;

TAlign = (alNone, alTop, alBottom, alLeft, alRight, alClient);

TControl = class(TComponent)
  constructor Create(AOwner: TComponent);
  procedure BringToFront;
  procedure Hide;
  procedure Invalidate;
  procedure Refresh;
  procedure Repaint;
  procedure SendToBack;
  procedure Show;
  procedure Update;
  procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
  property Left: Integer; read write;
  property Top: Integer; read write;
  property Width: Integer; read write;
  property Height: Integer; read write;
  property Hint: String; read write;
  property Align: TAlign; read write;
  property ClientHeight: Longint; read write;
  property ClientWidth: Longint; read write;
  property ShowHint: Boolean; read write;
  property Visible: Boolean; read write;
  property Enabled: Boolean; read write;
  property Hint: String; read write;
  property Cursor: Integer; read write;
end;

TWinControl = class(TControl)
  property Parent: TWinControl; read write;
  property ParentBackground: Boolean; read write;
  property Handle: Longint; read write;
  property Showing: Boolean; read;
  property TabOrder: Integer; read write;
  property TabStop: Boolean; read write;
  function CanFocus: Boolean;
  function Focused: Boolean;
  property Controls[Index: Integer]: TControl; read;
  property ControlCount: Integer; read;
end;

TGraphicControl = class(TControl)
end;

TCustomControl = class(TWinControl)
end;

TScrollBarKind = (sbHorizontal, sbVertical);

TScrollBarInc = SmallInt;

TScrollingWinControl = class(TWinControl)
  procedure ScrollInView(AControl: TControl);
end;

TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin);

TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp);

TBorderIcons = set of TBorderIcon;

TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter);

TCloseAction = (caNone, caHide, caFree, caMinimize);

TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction);

TCloseQueryEvent = procedure(Sender: TObject; var CanClose: Boolean);

TEShiftState = (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

TShiftState = set of TEShiftState;

TKeyEvent = procedure(Sender: TObject; var Key: Word; Shift: TShiftState);

TKeyPressEvent = procedure(Sender: TObject; var Key: Char);

TForm = class(TScrollingWinControl)
  constructor CreateNew(AOwner: TComponent);
  procedure Close;
  procedure Hide;
  procedure Show;
  function ShowModal: Integer;
  procedure Release;
  property Active: Boolean; read;
  property ActiveControl: TWinControl; read write;
  property BorderIcons: TBorderIcons; read write;
  property BorderStyle: TFormBorderStyle; read write;
  property Caption: String; read write;
  property AutoScroll: Boolean; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property FormStyle: TFormStyle; read write;
  property KeyPreview: Boolean; read write;
  property Position: TPosition; read write;
  property OnActivate: TNotifyEvent; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
  property OnClose: TCloseEvent; read write;
  property OnCloseQuery: TCloseQueryEvent; read write;
  property OnCreate: TNotifyEvent; read write;
  property OnDestroy: TNotifyEvent; read write;
  property OnDeactivate: TNotifyEvent; read write;
  property OnHide: TNotifyEvent; read write;
  property OnKeyDown: TKeyEvent; read write;
  property OnKeyPress: TKeyPressEvent; read write;
  property OnKeyUp: TKeyEvent; read write;
  property OnResize: TNotifyEvent; read write;
  property OnShow: TNotifyEvent; read write;
end;

TCustomLabel = class(TGraphicControl)
end;

TAlignment = (taLeftJustify, taRightJustify, taCenter);

TLabel = class(TCustomLabel)
  property Alignment: TAlignment; read write;
  property AutoSize: Boolean; read write;
  property Caption: String; read write;
  property Color: TColor; read write;
  property FocusControl: TWinControl; read write;
  property Font: TFont; read write;
  property WordWrap: Boolean; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
end;

TCustomEdit = class(TWinControl)
  procedure Clear;
  procedure ClearSelection;
  procedure SelectAll;
  property Modified: Boolean; read write;
  property SelLength: Integer; read write;
  property SelStart: Integer; read write;
  property SelText: String; read write;
  property Text: String; read write;
end;

TBorderStyle = TFormBorderStyle;

TEditCharCase = (ecNormal, ecUpperCase, ecLowerCase);

TEdit = class(TCustomEdit)
  property AutoSelect: Boolean; read write;
  property AutoSize: Boolean; read write;
  property BorderStyle: TBorderStyle; read write;
  property CharCase: TEditCharCase; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property HideSelection: Boolean; read write;
  property MaxLength: Integer; read write;
  property PasswordChar: Char; read write;
  property ReadOnly: Boolean; read write;
  property Text: String; read write;
  property OnChange: TNotifyEvent; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
  property OnKeyDown: TKeyEvent; read write;
  property OnKeyPress: TKeyPressEvent; read write;
  property OnKeyUp: TKeyEvent; read write;
end;

TNewEdit = class(TEdit)
end;

TCustomMemo = class(TCustomEdit)
  property Lines: TStrings; read write;
end;

TScrollStyle = (ssNone, ssHorizontal, ssVertical, ssBoth);

TMemo = class(TCustomMemo)
  property Lines: TStrings; read write;
  property Alignment: TAlignment; read write;
  property BorderStyle: TBorderStyle; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property HideSelection: Boolean; read write;
  property MaxLength: Integer; read write;
  property ReadOnly: Boolean; read write;
  property ScrollBars: TScrollStyle; read write;
  property WantReturns: Boolean; read write;
  property WantTabs: Boolean; read write;
  property WordWrap: Boolean; read write;
  property OnChange: TNotifyEvent; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
  property OnKeyDown: TKeyEvent; read write;
  property OnKeyPress: TKeyPressEvent; read write;
  property OnKeyUp: TKeyEvent; read write;
end;

TNewMemo = class(TMemo)
end;

TCustomComboBox = class(TWinControl)
  property DroppedDown: Boolean; read write;
  property Items: TStrings; read write;
  property ItemIndex: Integer; read write;
end;

TComboBoxStyle = (csDropDown, csSimple, csDropDownList, csOwnerDrawFixed, csOwnerDrawVariable);

TComboBox = class(TCustomComboBox)
  property Style: TComboBoxStyle; read write;
  property Color: TColor; read write;
  property DropDownCount: Integer; read write;
  property Font: TFont; read write;
  property MaxLength: Integer; read write;
  property Sorted: Boolean; read write;
  property Text: String; read write;
  property OnChange: TNotifyEvent; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
  property OnDropDown: TNotifyEvent; read write;
  property OnKeyDown: TKeyEvent; read write;
  property OnKeyPress: TKeyPressEvent; read write;
  property OnKeyUp: TKeyEvent; read write;
end;

TNewComboBox = class(TComboBox)
end;

TButtonControl = class(TWinControl)
end;

TButton = class(TButtonControl)
  property Cancel: Boolean; read write;
  property Caption: String; read write;
  property Default: Boolean; read write;
  property Font: TFont; read write;
  property ModalResult: Longint; read write;
  property OnClick: TNotifyEvent; read write;
end;

TNewButton = class(TButton)
end;

TCustomCheckBox = class(TButtonControl)
end;

TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed);

TCheckBox = class(TCustomCheckBox)
  property Alignment: TAlignment; read write;
  property AllowGrayed: Boolean; read write;
  property Caption: String; read write;
  property Checked: Boolean; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property State: TCheckBoxState; read write;
  property OnClick: TNotifyEvent; read write;
end;

TNewCheckBox = class(TCheckBox)
end;

TRadioButton = class(TButtonControl)
  property Alignment: TAlignment; read write;
  property Caption: String; read write;
  property Checked: Boolean; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
end;

TNewRadioButton = class(TRadioButton)
end;

TCustomListBox = class(TWinControl)
  property Items: TStrings; read write;
  property ItemIndex: Integer; read write;
  property SelCount: Integer; read;
  property Selected[Index: Integer]: Boolean; read write;
end;

TListBoxStyle = (lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable);

TListBox = class(TCustomListBox)
  property BorderStyle: TBorderStyle; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property MultiSelect: Boolean; read write;
  property Sorted: Boolean; read write;
  property Style: TListBoxStyle; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
  property OnKeyDown: TKeyEvent; read write;
  property OnKeyPress: TKeyPressEvent; read write;
  property OnKeyUp: TKeyEvent; read write;
end;

TNewListBox = class(TListBox)
end;

TBevelShape = (bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine, bsRightLine, bsSpacer);

TBevelStyle = (bsLowered, bsRaised);

TBevel = class(TGraphicControl)
  property Shape: TBevelShape; read write;
  property Style: TBevelStyle; read write;
end;

TCustomPanel = class(TCustomControl)
end;

TPanelBevel = (bvNone, bvLowered, bvRaised, bvSpace);

TBevelWidth = Longint;

TBorderWidth = Longint;

TPanel = class(TCustomPanel)
  property Alignment: TAlignment; read write;
  property BevelInner: TPanelBevel; read write;
  property BevelOuter: TPanelBevel; read write;
  property BevelWidth: TBevelWidth; read write;
  property BorderWidth: TBorderWidth; read write;
  property BorderStyle: TBorderStyle; read write;
  property Caption: String; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
end;

TNewStaticText = class(TWinControl)
  function AdjustHeight: Integer;
  property AutoSize: Boolean; read write;
  property Caption: String; read write;
  property Color: TColor; read write;
  property FocusControl: TWinControl; read write;
  property Font: TFont; read write;
  property ForceLTRReading: Boolean; read write;
  property ShowAccelChar: Boolean; read write;
  property WordWrap: Boolean; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
end;

TCheckItemOperation = (coUncheck, coCheck, coCheckWithChildren);

TNewCheckListBox = class(TCustomListBox)
  function AddCheckBox(const ACaption, ASubItem: String; ALevel: Byte; AChecked, AEnabled, AHasInternalChildren, ACheckWhenParentChecked: Boolean; AObject: TObject): Integer;
  function AddGroup(ACaption, ASubItem: String; ALevel: Byte; AObject: TObject): Integer;
  function AddRadioButton(const ACaption, ASubItem: String; ALevel: Byte; AChecked, AEnabled: Boolean; AObject: TObject): Integer;
  function CheckItem(const Index: Integer; const AOperation: TCheckItemOperation): Boolean;
  property Checked[Index: Integer]: Boolean; read write;
  property State[Index: Integer]: TCheckBoxState; read write;
  property ItemCaption[Index: Integer]: String; read write;
  property ItemEnabled[Index: Integer]: Boolean; read write;
  property ItemLevel[Index: Integer]: Byte; read;
  property ItemObject[Index: Integer]: TObject; read write;
  property ItemSubItem[Index: Integer]: String; read write;
  property Flat: Boolean; read write;
  property MinItemHeight: Integer; read write;
  property Offset: Integer; read write;
  property OnClickCheck: TNotifyEvent; read write;
  property BorderStyle: TBorderStyle; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property Sorted: Boolean; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
  property OnKeyDown: TKeyEvent; read write;
  property OnKeyPress: TKeyPressEvent; read write;
  property OnKeyUp: TKeyEvent; read write;
  property ShowLines: Boolean; read write;
  property WantTabs: Boolean; read write;
  property RequireRadioSelection: Boolean; read write;
end;

TNewProgressBarState = (npbsNormal, npbsError, npbsPaused);

TNewProgressBarStyle = (npbstNormal, npbstMarquee);

TNewProgressBar = class(TWinControl)
  property Min: Longint; read write;
  property Max: Longint; read write;
  property Position: Longint; read write;
  property State: TNewProgressBarState; read write;
  property Style: TNewProgressBarStyle; read write;
  property Visible: Boolean; read write;
end;

TRichEditViewer = class(TMemo)
  property RTFText: AnsiString; write;
  property UseRichEdit: Boolean; read write;
end;

TPasswordEdit = class(TCustomEdit)
  property AutoSelect: Boolean; read write;
  property AutoSize: Boolean; read write;
  property BorderStyle: TBorderStyle; read write;
  property Color: TColor; read write;
  property Font: TFont; read write;
  property HideSelection: Boolean; read write;
  property MaxLength: Integer; read write;
  property Password: Boolean; read write;
  property ReadOnly: Boolean; read write;
  property Text: String; read write;
  property OnChange: TNotifyEvent; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
  property OnKeyDown: TKeyEvent; read write;
  property OnKeyPress: TKeyPressEvent; read write;
  property OnKeyUp: TKeyEvent; read write;
end;

TCustomFolderTreeView = class(TWinControl)
  procedure ChangeDirectory(const Value: String; const CreateNewItems: Boolean);
  procedure CreateNewDirectory(const ADefaultName: String);
  property: Directory: String; read write;
end;

TFolderRenameEvent = procedure(Sender: TCustomFolderTreeView; var NewName: String; var Accept: Boolean);

TFolderTreeView = class(TCustomFolderTreeView)
  property OnChange: TNotifyEvent; read write;
  property OnRename: TFolderRenameEvent; read write;
end;

TStartMenuFolderTreeView = class(TCustomFolderTreeView)
  procedure SetPaths(const AUserPrograms, ACommonPrograms, AUserStartup, ACommonStartup: String);
  property OnChange: TNotifyEvent; read write;
  property OnRename: TFolderRenameEvent; read write;
end;

TBitmapImage = class(TGraphicControl)
  property AutoSize: Boolean; read write;
  property BackColor: TColor; read write;
  property Center: Boolean; read write;
  property Bitmap: TBitmap; read write;
  property ReplaceColor: TColor; read write;
  property ReplaceWithColor: TColor; read write;
  property Stretch: Boolean; read write;
  property OnClick: TNotifyEvent; read write;
  property OnDblClick: TNotifyEvent; read write;
end;

TNewNotebook = class(TWinControl)
  function FindNextPage(CurPage: TNewNotebookPage; GoForward: Boolean): TNewNotebookPage;
  property PageCount: Integer; read write;
  property Pages[Index: Integer]: TNewNotebookPage; read;
  property ActivePage: TNewNotebookPage; read write;
end;

TNewNotebookPage = class(TCustomControl)
  property Color: TColor; read write;
  property Notebook: TNewNotebook; read write;
  property PageIndex: Integer; read write;
end;

TWizardPageNotifyEvent = procedure(Sender: TWizardPage);
TWizardPageButtonEvent = function(Sender: TWizardPage): Boolean;
TWizardPageCancelEvent = procedure(Sender: TWizardPage; var ACancel, AConfirm: Boolean);
TWizardPageShouldSkipEvent = function(Sender: TWizardPage): Boolean;

TWizardPage = class(TComponent)
  property ID: Integer; read;
  property Caption: String; read write;
  property Description: String; read write;
  property Surface: TNewNotebookPage; read write;
  property SurfaceHeight: Integer; read write;
  property SurfaceWidth: Integer; read write;
  property OnActivate: TWizardPageNotifyEvent; read write;
  property OnBackButtonClick: TWizardPageButtonEvent; read write;
  property OnCancelButtonClick: TWizardPageCancelEvent; read write;
  property OnNextButtonClick: TWizardPageButtonEvent; read write;
  property OnShouldSkipPage: TWizardPageShouldSkipEvent; read write;
end;

TInputQueryWizardPage = class(TWizardPage)
  function Add(const APrompt: String; const APassword: Boolean): Integer;
  property Edits[Index: Integer]: TPasswordEdit; read;
  property PromptLabels[Index: Integer]: TNewStaticText; read;
  property SubCaptionLabel: TNewStaticText; read;
  property Values[Index: Integer]: String; read write;
end;

TInputOptionWizardPage = class(TWizardPage)
  function Add(const ACaption: String): Integer;
  function AddEx(const ACaption: String; const ALevel: Byte; const AExclusive: Boolean): Integer;
  property CheckListBox: TNewCheckListBox; read;
  property SelectedValueIndex: Integer; read write;
  property SubCaptionLabel: TNewStaticText; read;
  property Values[Index: Integer]: Boolean; read write;
end;

TInputDirWizardPage = class(TWizardPage)
  function Add(const APrompt: String): Integer;
  property Buttons[Index: Integer]: TNewButton; read;
  property Edits[Index: Integer]: TEdit; read;
  property PromptLabels[Index: Integer]: TNewStaticText; read;
  property SubCaptionLabel: TNewStaticText; read;
  property Values[Index: Integer]: String; read write;
end;

TInputFileWizardPage = class(TWizardPage)
  function Add(const APrompt, AFilter, ADefaultExtension: String): Integer;
  property Buttons[Index: Integer]: TNewButton; read;
  property Edits[Index: Integer]: TEdit; read;
  property PromptLabels[Index: Integer]: TNewStaticText; read;
  property SubCaptionLabel: TNewStaticText; read;
  property Values[Index: Integer]: String; read write;
  property IsSaveButton[Index: Integer]: Boolean; read write;
end;

TOutputMsgWizardPage = class(TWizardPage)
  property MsgLabel: TNewStaticText; read;
end;

TOutputMsgMemoWizardPage = class(TWizardPage)
  property RichEditViewer: TRichEditViewer; read;
  property SubCaptionLabel: TNewStaticText; read;
end;

TOutputProgressWizardPage = class(TWizardPage)
  procedure Hide;
  property Msg1Label: TNewStaticText; read;
  property Msg2Label: TNewStaticText; read;
  property ProgressBar: TNewProgressBar; read;
  procedure SetProgress(const Position, Max: Longint);
  procedure SetText(const Msg1, Msg2: String);
  procedure Show;
end;

TUIStateForm = class(TForm)
end;

TSetupForm = class(TUIStateForm)
  procedure Center;
  procedure CenterInsideControl(const Ctl: TWinControl; const InsideClientArea: Boolean);
  procedure FlipControlsIfNeeded;
  property ControlsFlipped: Boolean; read;
  property FlipControlsOnShow: Boolean; read write;
  property RightToLeft: Boolean; read;
end;

TMainForm = class(TSetupForm)
  procedure ShowAboutBox;
end;

TWizardForm = class(TSetupForm)
  property CancelButton: TNewButton; read;
  property NextButton: TNewButton; read;
  property BackButton: TNewButton; read;
  property Notebook1: TNotebook; read;
  property Notebook2: TNotebook; read;
  property WelcomePage: TNewNotebookPage; read;
  property InnerPage: TNewNotebookPage; read;
  property FinishedPage: TNewNotebookPage; read;
  property LicensePage: TNewNotebookPage; read;
  property PasswordPage: TNewNotebookPage; read;
  property InfoBeforePage: TNewNotebookPage; read;
  property UserInfoPage: TNewNotebookPage; read;
  property SelectDirPage: TNewNotebookPage; read;
  property SelectComponentsPage: TNewNotebookPage; read;
  property SelectProgramGroupPage: TNewNotebookPage; read;
  property SelectTasksPage: TNewNotebookPage; read;
  property ReadyPage: TNewNotebookPage; read;
  property PreparingPage: TNewNotebookPage; read;
  property InstallingPage: TNewNotebookPage; read;
  property InfoAfterPage: TNewNotebookPage; read;
  property DiskSpaceLabel: TNewStaticText; read;
  property DirEdit: TEdit; read;
  property GroupEdit: TNewEdit; read;
  property NoIconsCheck: TNewCheckBox; read;
  property PasswordLabel: TNewStaticText; read;
  property PasswordEdit: TPasswordEdit; read;
  property PasswordEditLabel: TNewStaticText; read;
  property ReadyMemo: TNewMemo; read;
  property TypesCombo: TNewComboBox; read;
  property Bevel: TBevel; read;
  property WizardBitmapImage: TBitmapImage; read;
  property WelcomeLabel1: TNewStaticText; read;
  property InfoBeforeMemo: TRichEditViewer; read;
  property InfoBeforeClickLabel: TNewStaticText; read;
  property MainPanel: TPanel; read;
  property Bevel1: TBevel; read;
  property PageNameLabel: TNewStaticText; read;
  property PageDescriptionLabel: TNewStaticText; read;
  property WizardSmallBitmapImage: TBitmapImage; read;
  property ReadyLabel: TNewStaticText; read;
  property FinishedLabel: TNewStaticText; read;
  property YesRadio: TNewRadioButton; read;
  property NoRadio: TNewRadioButton; read;
  property WizardBitmapImage2: TBitmapImage; read;
  property WelcomeLabel2: TNewStaticText; read;
  property LicenseLabel1: TNewStaticText; read;
  property LicenseMemo: TRichEditViewer; read;
  property InfoAfterMemo: TRichEditViewer; read;
  property InfoAfterClickLabel: TNewStaticText; read;
  property ComponentsList: TNewCheckListBox; read;
  property ComponentsDiskSpaceLabel: TNewStaticText; read;
  property BeveledLabel: TNewStaticText; read;
  property StatusLabel: TNewStaticText; read;
  property FilenameLabel: TNewStaticText; read;
  property ProgressGauge: TNewProgressBar; read;
  property SelectDirLabel: TNewStaticText; read;
  property SelectStartMenuFolderLabel: TNewStaticText; read;
  property SelectComponentsLabel: TNewStaticText; read;
  property SelectTasksLabel: TNewStaticText; read;
  property LicenseAcceptedRadio: TNewRadioButton; read;
  property LicenseNotAcceptedRadio: TNewRadioButton; read;
  property UserInfoNameLabel: TNewStaticText; read;
  property UserInfoNameEdit: TNewEdit; read;
  property UserInfoOrgLabel: TNewStaticText; read;
  property UserInfoOrgEdit: TNewEdit; read;
  property PreparingErrorBitmapImage: TBitmapImage; read;
  property PreparingLabel: TNewStaticText; read;
  property FinishedHeadingLabel: TNewStaticText; read;
  property UserInfoSerialLabel: TNewStaticText; read;
  property UserInfoSerialEdit: TNewEdit; read;
  property TasksList: TNewCheckListBox; read;
  property RunList: TNewCheckListBox; read;
  property DirBrowseButton: TNewButton; read;
  property GroupBrowseButton: TNewButton; read;
  property SelectDirBitmapImage: TBitmapImage; read;
  property SelectGroupBitmapImage: TBitmapImage; read;
  property SelectDirBrowseLabel: TNewStaticText; read;
  property SelectStartMenuFolderBrowseLabel: TNewStaticText; read;
  property PreparingYesRadio: TNewRadioButton; read;
  property PreparingNoRadio: TNewRadioButton; read;
  property PreparingMemo: TNewMemo; read;
  property CurPageID: Integer; read;
  function AdjustLabelHeight(ALabel: TNewStaticText): Integer;
  procedure IncTopDecHeight(AControl: TControl; Amount: Integer);
  property PrevAppDir: String; read;
end;

TUninstallProgressForm = class(TSetupForm)
  property OuterNotebook: TNewNotebook; read;
  property InnerPage: TNewNotebookPage; read;
  property InnerNotebook: TNewNotebook; read;
  property InstallingPage: TNewNotebookPage; read;
  property MainPanel: TPanel; read;
  property PageNameLabel: TNewStaticText; read;
  property PageDescriptionLabel: TNewStaticText; read;
  property WizardSmallBitmapImage: TBitmapImage; read;
  property Bevel1: TBevel; read;
  property StatusLabel: TNewStaticText; read;
  property ProgressBar: TNewProgressBar; read;
  property BeveledLabel: TNewStaticText; read;
  property Bevel: TBevel; read;
  property CancelButton: TNewButton; read;
end;


Pascal 脚本: 使用自定义向导页

该 Pascal 脚本允许你添加自定义向导页到安装程序的向导中。这包括用于公共查询的“预构建”向导页和完全受你控制的自定义向导页。

要使用自定义向导面，先在你的 InitializeWizard 事件函数中创建它们。你可以使用 CreateInput...页 和 CreateOutput...页 函数创建预构建页，或用 CreateCustomPage 函数创建一个空向导页。查看 支持函数 主题获取所有创建 自定义页 函数的列表和说明。

每个页创建之后，你要添加控件，可以调用预构建页指定方法，或手动在向导页中创建控件。

大多数创建的向导页函数会获取“page ID”作为它们的第一个参数；这用来定义新创建的页将放置到哪个已有的页之后。这里有几个方法查找已有向导页的“page ID”。你自己创建的向导页有控制它们 ID 的 ID 属性。内置的向导页有预定义的 ID 。例如，欢迎向导页的 ID 是 wpWelcome 。查阅 支持函数 主题获取所有预定义 ID 的列表。

自定义向导页创建后，安装程序将象它内置的向导页一样显示和处理这些自定义向导页。这包含有关象 NextButtonClick 和 ShouldSkipPage 的事件函数的所有页面的调用。

打开 Inno Setup 安装目录下的“Examples”子目录，找到“CodeDlg.iss”脚本，这个示例说明怎样使用预构建自定义向导页和事件函数。打开“CodeClasses.iss”脚本获取怎样使用完全自定义向导页和控件的示例。


Pascal 脚本: 使用 DLL

Pascal 脚本可以调用外部 DLL 函数。这包括标准 Windows DLL 同倍的标准 Win32 API 函数，和自制 DLL 中的函数 (至于如何自制 DLL 超出了本帮助文件讨论范围)。

要调用一个 DLL 函数，你应该先以正规的方法写入函数语法，而不是只写入函数内容，你使用“external”作为关键字指定一个 DLL。如果你的函数有下面示例的语法函数 function A(B: Integer): Integer; ，支持下面三种形态:

function A(B: Integer): Integer;
external '<dllfunctionname>@<dllfilename>';

function A(B: Integer): Integer;
external '<dllfunctionname>@<dllfilename> <callingconvention>';

function A(B: Integer): Integer;
external '<dllfunctionname>@<dllfilename> <callingconvention> <options>';

第一个形态指定将要用默认调用协定的 DLL 函数，这是“stdcall”。所有标准的 Win32 API 函数使用“stdcall”，就象大多数自定义 DLL 函数。

第二种形态指定将要用特殊调协定的 DLL 函数。有效的调用协定是: “stdcall” (默认)，“cdecl”，“pascal”和“register”。

第三种形态指定为载入 DLL 附加一个或多个选项，用空格隔开:

delayload

指定 DLL 应该延时载和。一般来说，Pascal 脚本在启动时检查 DLL 函数是否可以被调用，如果否，拒绝运行。如果你指定用“delayload”延时载入，就不会发生这种情况。如果你想调用不知道是否确实在运行的 DLL 函数时，请使用延时载入: 如果该 DLL 函数还不能调用，Pascal 脚本将仍旧运行，但生成一个表达式，你可以监视处理还没有运行的 DLL 函数。

loadwithalteredsearchpath

Specifies that the DLL should be loaded using the Windows flag LOAD_WITH_ALTERED_SEARCH_PATH, which, in essence, causes the loader to search for any dependent DLLs in the directory containing the DLL.

setuponly

指定该 DLL 只在从安装程序运行脚本时载入。

uninstallonly

指定该 DLL 只在从卸载程序运行脚本时载入。

(第二种形态) 示例，如果 DLL 内部有一个名字“A2”的 DLL 函数，DLL 名字为“MyDll.dll”，并且 DLL 函数使用“stdcall”调用协定:

[Code]
function A(B: Integer): Integer;
external 'A2@MyDll.dll stdcall';

常量可以用于 DLL 文件名。

在安装期间，也可以使用一个特殊的“files:”前缀告诉安装程序自动从 [Files] 段提取 DLL。示例:

[Files]
Source: "MyDll.dll"; Flags: dontcopy
Source: "A.dll"; Flags: dontcopy
Source: "B.dll"; Flags: dontcopy

[Code]
procedure MyDllFunc(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal);
external 'MyDllFunc@files:MyDll.dll stdcall';

procedure ADllFunc(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal);
external 'ADllFunc@files:A.dll,B.dll stdcall loadwithalteredsearchpath'; //A.dll depends on B.dll

If you use a 'files:' prefix and solid compression is enabled, be sure to list your DLLs at (or near) the top of the [Files] section. In order to extract an arbitrary file in a solid-compressed installation, Setup must first decompress all prior files (to a temporary buffer in memory). This can result in a substantial delay if a number of other files are listed above the specified file in the [Files] section.

打开 Inno Setup 安装目录中“Examples”子目录，其中有一个“CodeDll.iss”使用 DLL 的示例。

“Examples”子目录还包含两个自定义 DLL 示例方案，一个用于 Microsoft Visual C++，另一个用于 Borland Delphi。


Pascal 脚本: 使用 COM 自动操作对象

Pascal 脚本可以通过 COM 自动操作对象支持访问 COM (同样也可以是 OLE 或 ActiveX) 程序。这允许你通过 COM Interop 访问象标准 Windows COM 服务器，自定义 COM 服务器，Visual Basic ActiveX DLL 和 .NET 系统。

IDispatch based COM

这里是有关初始化 IDispatch based COM 自动操作对象的支持函数: CreateOleObject 和 GetActiveOleObject 。

使用 CreateOleObject 可以用指定的类名创建一个新的 COM 对象。如果成功，这个函数返回一个不同的 Variant 类型变量。

使用 GetActiveOleObject 可以用指定的类名连接到一个现有的 COM 对象。如果成功，这个函数返回一个不同的 Variant 类型变量。在某些程序中，这可以用于侦测程序是否正在运行。

The value returned by CreateOleObject or GetActiveOleObject can then be used to access the properties and methods of the COM object. The access is done via 'late binding' which means it is not checked whether the methods or properties you're trying to access actually exist until Setup actually needs to at run time.

To access a property or method whose name is a reserved word, use IDispatchInvoke .

Open the "CodeAutomation.iss" file in the "Examples" subdirectory in your Inno Setup directory for an example script using IDispatch based COM Automation objects.

IUnknown based COM

If the IDispatch interface isn't implemented by the object, you can use the IUnknown based COM support.

To initialize IUnknown based COM Automation objects use CreateComObject .

The value returned by CreateComObject can then be used to access the methods of the COM object after casting it to the desired interface. The access is done via 'early binding' which means the desired interface needs to be defined in the script, unlike for IDispatch based COM support.

StringToGUID can be used to convert the string representation of a GUID into a 'real' GUID. Use OleCheck to check the return values of any method you call.

If you copy the interface definition from any existing Delphi source code, remove the brackets around the interface GUID string. Also remove any calling conventions, Inno Setup assumes 'stdcall'. If the interface contains any functions you won't call, you can replace these by dummies to avoid having to define any special types used by them.

Open the "CodeAutomation2.iss" file in the "Examples" subdirectory in your Inno Setup directory for an example script using IUnknown based COM Automation objects.

Note: IUnknown based COM support requires Unicode Inno Setup .

General

当 COM 对象退出时，它们将自动释放。不需要函数来“消除”或“释放”它们。

如果你提取一个 COM 自动库到临时位置，并想在用后能够删除它，确认你以后不想引用到这个库并调用 CoFreeUnusedLibraries 。这个 Windows 函数将尝试撤销库，使你能够删除它。


Unicode Inno Setup

Beginning with Inno Setup 5.3.0, there are two versions of Inno Setup available: Non Unicode Inno Setup and Unicode Inno Setup.

Key features of Unicode Inno Setup are its ability to display any language on any system regardless of the system code page, and its ability to work with Unicode filenames. One could consider Unicode Inno Setup as the new standard Inno Setup and Non Unicode Inno Setup as an old special Inno Setup for those who still need to support NT/9x or who want the very smallest size possible.

If you don't remember which version you installed, click the "Inno Setup Compiler" shortcut created in the Start Menu. If the version number displayed in its title bar says "(a)" you are running Non Unicode Inno Setup. If it says "(u)" you are running Unicode Inno Setup.

For the most part the two versions are used identically, and any differences between them are noted throughout the help file. However, the following overview lists the primary differences:

  • Unicode Inno Setup uses the existing ANSI .isl language files and you should not and may not convert these to Unicode or anything similar since it does so automatically during compilation using the LanguageCodePage setting of the language. However, you do need to convert existing [Messages] and [CustomMessages] entries in your .iss files to Unicode if the language used a special LanguageCodePage .
  • The automatic conversion is also done for any language specific plain text ANSI LicenseFile , InfoBeforeFile , or InfoAfterFile used so you should not convert these either (but you may do so if you wish anyway, unlike ANSI .isl language files).
  • The [Setup] directive ShowUndisplayableLanguages is ignored by Unicode Inno Setup.
  • Unicode Inno Setup is compiled with Delphi 2009 instead of Delphi 2 and 3, leading to slightly larger files. The source code however is still compatible with Delphi 2 and 3, and a non Unicode version will remain available.
  • Existing installations of your programs done by non Unicode installers can be freely updated by Unicode installers, and vice versa.
  • Unicode Pascal Scripting notes:
    • The Unicode compiler sees type 'String' as a Unicode string, and 'Char' as a Unicode character. Its 'AnsiString' type hasn't changed and still is an ANSI string. Its 'PChar' type has been renamed to 'PAnsiChar'.
    • The Unicode compiler is more strict about correct ';' usage: it no longer accepts certain missing ';' characters.
    • The new RemObjects PascalScript version used by the Unicode compiler supports Unicode, but not for its input source. This means it does use Unicode string types as said, but any literal Unicode characters in the script will be converted to ANSI. This doesn't mean you can't display Unicode strings: you can for example instead use encoded Unicode characters to build Unicode strings (like S := #$0100 + #$0101 + 'Aa'; ), or load the string from a file using LoadStringsFromFile , or use a {cm:...} constant.
    • Some support functions had their prototype changed: some parameters of CreateOutputMsgMemoPage , RegQueryBinaryValue , RegWriteBinaryValue , OemToCharBuff , CharToOemBuff , LoadStringFromfile , SaveStringToFile , and GetMD5OfString are of type AnsiString now instead of String.
    • Added new SaveStringsToUTF8File , and GetMD5OfUnicodeString support functions.
    • If you want to compile an existing script that imports ANSI Windows API calls with the Unicode compiler, either upgrade to the 'W' Unicode API call or change the parameters from 'String' or 'PChar' to 'AnsiString'. The 'AnsiString' approach will make your [Code] compatible with both the Unicode and the non Unicode version.
    • Added new 'Int64' type, supported by IntToStr . Also added new StrToInt64 , StrToInt64Def , and GetSpaceOnDisk64 support functions.
  • Unicode Inno Setup supports UTF-8 encoded .iss files (but not UTF-16).
  • Unicode Inno Setup supports UTF-8 and UTF-16LE encoded .txt files for LicenseFile , InfoBeforeFile , and InfoAfterFile .

Note: Unicode Inno Setup can only create Unicode installers and like wise the non Unicode version can only create non Unicode installers. If you want to be able to create both Unicode and non Unicode installers on one computer, you have to install both versions of Inno Setup into different folders.


示例脚本

The Inno Setup Example Scripts are located in a separate folder. Please click the "Inno Setup Example Scripts" shortcut created in the Start Menu when you installed Inno Setup, or open the "Examples" folder in your Inno Setup directory.


常见问题解答

常见问题解答现在位于单独的一个文档中。请单击在安装 Inno Setup 时创建在开始菜单中的“Inno Setup 常见问题解答”快捷方式，或打开你的 Inno Setup 安装目录中的“isfaq.htm”文件。

获取更多最新的常见问题解答，转到 http://www.jrsoftware.org/isfaq.php [external link]


向导页

下面是在安装过程中可以通过激活它们的显示条件来显示的所有向导页的列表。

  • 欢迎
    默认显示，但也可以通过 DisableWelcomePage 禁用。
  • 许可协议
    如果设置 LicenseFile 则显示。用户只能在选定“我同意该协议”的情况下才能继续到一页。
  • 密码
    如果设置了 Password 则显示。用户只能在输入正确的密码后才能继续到下一页。
  • 信息
    如果设置了 InfoBeforeFile 则显示。
  • 用户信息
    如果设置 UserInfoPage 为 yes 则显示。
  • 选择目标位置
    默认为显示，但可以通过 DisableDirPage 禁用。
  • 选择组件
    如果设置了 [Components] 条目则显示。
  • 选择开始菜单文件夹
    如果设置了 [Icons] 条目则显示，但可以通过 DisableProgramGroupPage 禁用。
  • 选择任务
    如果设置了 [Tasks] 条目则显示，除非 [Tasks] 条目全部绑定到未在选择组件页中选定的组件。
  • 准备安装
    默认为显示，但可以通过 DisableReadyPage 禁用。
  • 正在准备安装
    通常安装程序不会在这个页面中停止或暂停。 The only time it will is if Setup determines it can't continue or if it detects applications using files that need to be updated.

    The former can happen if the PrepareToInstall event function returned an error or if one or more files specified in the [Files] and [InstallDelete] sections were queued (by some other installation) to be replaced or deleted on the next restart. In this case, it tells the user they need to restart their computer and then run Setup again. Note that this check is performed on silent installations too, but any messages are displayed in a message box instead of inside a wizard page.

    The latter can happen if CloseApplications is set to yes .
  • 正在安装
    在实际安装进程期间显示。
  • 信息
    如果设置了 InfoAfterFile 则显示。
  • 安装完成
    默认为显示，用 DisableFinishedPage 在某些场合下禁用。


安装顺序

这里是实际安装进程开始后执行的各种安装任务的顺序:

  • 处理 [InstallDelete]。
  • [UninstallDelete] 中的条目贮存在卸载日志中 (眼下暂时贮存在内存中)。
  • 如果需要，创建应用程序目录。
  • 处理 [Dirs]。
  • 如果需要，预定了卸载日志文件名。
  • 处理 [Files]。 (文件注册暂不发生。)
  • 处理 [Icons]。
  • 处理 [INI]。
  • 处理 [Registry]。
  • 需要注册的文件现在开始注册，除非系统需要重新启动，在某些场合下文件在系统重新启动之前不注册。
  • 如果需要，开始创建程序的添加/删除程序条目。
  • [UninstallRun] 中的条目贮存到卸载日志中。
  • 卸载程序 EXE 文件和日志文件最终定稿，并保存到磁盘。在此完成后，用户禁止取消安装，以及其后所有的错误将在返回之前不出现。
  • 处理 [Run]，除用 postinstall 标记的条目外，在安装程序完成向导页显示后获取进程。
  • 如果 ChangesAssociations 设置为 yes，立即刷新文件关联。
  • 如果 ChangesEnvironment 设置为 yes，其它应用程序将接到通知。

安装程序所有条目处理顺序是按照它们在段中出现的顺序。

卸载程序按安装程序建立的相反顺序进行卸载，这是因为卸载日志是从结尾到开头进行解析。

在这个示例中:

[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesectionifempty
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"; Flags: uninsdeleteentry

安装程序在卸载日志中先记录第一个条目的 uninsdeletesectionifempty 标记的数据，创建第二个条目的键，然后在卸载日志中记录 uninsdeleteentry 标记的数据。当卸载程序时，卸载程序先将处理 uninsdeleteentry 标记，删除条目，然后处理 uninsdeletesectionifempty 标记，删除这个段。

请注意，卸载程序在脚本中相同顺序处理 [UninstallRun] 和 [UninstallDelete] 条目 (不是倒序)。


安装模式: 32 位 vs. 64 位

一个安装包能在两个模式运行: 32 位或者 64 位。

64-bit mode is selected if the user is running a 64-bit version of Windows and the system's processor architecture is included in the value of the ArchitecturesInstallIn64BitMode [Setup] section directive。否则，32 位模式下使用。

安装包的二种模式有什么不同？主要是，差异在于哪些被默认安装。

32 位模式:

  • 按默认，该 System32 路径由 {sys} 常量映射到 32 位系统目录。
  • 该 {cf} 常量等同于 {pf32}。
  • 该 {cf} 常量等同于 {cf32}。
  • [Registry] writes to the 32-bit view by default.
  • The {reg:...} constant reads the 32-bit view by default.
  • The Reg* [Code] support functions access the 32-bit view by default.
  • The useapppaths flag of the [Icons] section reads the "App Paths" key in the 32-bit view of the registry.
  • The regserver and regtypelib flags of the [Files] section load and register files inside a 32-bit process by default.
  • The sharedfile flag of the [Files] section updates the "SharedDLLs" key in the 32-bit view of the registry by default.
  • The Uninstall key is created in the 32-bit view of the registry.

64 位模式:

  • 按默认，在 [Dirs]，[Files]，[InstallDelete], [Run]，[UninstallDelete]，和 [UninstallRun] 段使用 {sys} 时，该 System32 路径由 {sys} 常量映射到 64 位系统目录。This is because Setup/Uninstall temporarily disables WOW64 file system redirection [external link] when files/directories are accessed by those sections. Elsewhere, System32 and {sys} map to the 32-bit System directory, as is normal in a 32-bit process.
  • 该 {pf} 常量等同于 {pf64}。
  • 该 {cf} 常量等同于 {cf64}。
  • [Registry] writes to the 64-bit view by default.
  • The {reg:...} constant reads the 64-bit view by default.
  • The Reg* [Code] support functions access the 64-bit view by default.
  • The useapppaths flag of the [Icons] section reads the "App Paths" key in the 64-bit view of the registry.
  • The regserver and regtypelib flags of the [Files] section load and register files inside a 64-bit process by default.
  • The sharedfile flag of the [Files] section updates the "SharedDLLs" key in the 64-bit view of the registry by default.
  • The Uninstall key is created in the 64-bit view of the registry.


64 位安装限制

因为 Inno Setup 是一个 32 位应用程序，there are some limitations to be aware of when utilizing its 64-bit installation features:

  • The System32 path returned by the {sys} constant does not always map to the 64-bit System directory. When Setup/Uninstall is running in 64-bit mode, it maps to the 64-bit System directory when used in the [Dirs], [Files], [InstallDelete], [Run], [UninstallDelete], and [UninstallRun] sections because Setup temporarily disables WOW64 file system redirection [external link] when files/directories are accessed by those sections. Elsewhere, System32 and {sys} map to the 32-bit System directory, as is normal in a 32-bit process.

  • 在 [Code] 段，当安装/卸载是运行在 64 位模式，functions that access files disable WOW64 file system redirection (unless overridden by a call to EnableFsRedirection). However, there are exceptions, listed below. These functions never disable file system redirection, meaning you cannot pass them (or get back) the name of a file located in the 64-bit System directory:

    *Ini* | (所有操作 .INI 文件的函数)
    BrowseForFolder
    CreateShellLink
    GetOpenFileName
    LoadDLL | (看下面问题)
    ModifyPifFile
    SetCurrentDir
    ShellExec | (改为使用 Exec)
    UnregisterFont

    另外，no VCL classes are capable of disabling file system redirection。例如，你不能调用 TBitmap 的 LoadFromFile 方法从 64 位系统目录载入一个位图文件。

  • 你不能在 [Code] 段载入/使用 64 位 DLL，因为 Windows 不允许 32 位程序装载 64 位的 DLL (反之亦然)。不过，一个 32 位进程可以运行 64 位 EXE。Use the Exec function or the [Run] section to do that.


其它注意事项

  • 要方便地自动更新你的应用程序，先让你的应用程序侦测新的 Setup.exe 版本，并使它定位或下载这个新的版本。然后进行自动升级，然后从你的应用程序按下面的命令行示例启动你的 Setup.exe:

    /SP- /silent /noicons "/dir=expand:{pf}\My Program"

    在启动 setup.exe 后，一有可能就退出你的应用程序。注意，为避免你更新你的 .exe 中出现的问题，当安装程序在后台或绝对后台运行时有一个自动重试功能。

    另外你也可以使用 skipifsilent 和 skipifnotsilent 标记让你的应用程序意识到正在使用一个“/updated”参数，例如，显示一个友好的消息框提醒用户升级已完成。


命令行编译器执行

  • 脚本也可以用安装程序编译器从命令行方式进行编译。命令行用法看下面:

    compil32 /cc <脚本名>

    示例:
    compil32 /cc "c:\isetup\samples\my script.iss"

    象上述的例子中，包含空格的文件名必须用引号。

    从命令行运行安装程序编译器不支持普通的进度显示或所有错误消息显示。如果编译成功，安装程序编译器将返回代码 0 退出，如果命令行参数无效，返回 1，编译失败，返回 2。

  • 作为选择，你可以用控制台模式编译器 ISCC.exe 编译脚本。命令行用法见下面:

    iscc [options] <脚本名>

    可从标准输入中读取:

    iscc [options] -

    示例:
    iscc "c:\isetup\samples\my script.iss"

    象上述的例子中，包含空格的文件名必须用引号。

    有效的选项是: “/O”用来指定输出路径 (高于在脚本中的任何 OutputDir 设置)，“/F”用来指定输出文件名 (高于在脚本中的任何 OutputBaseFilename 设置)，“/S” 用来指定一个签名工具，“/Q”用来静寂编译 (仅打印错误消息)，“/?”用来显示帮助。

    示例:
    iscc /Q /O"My Output" /F"MyProgram-1.0" /Sbyparam=$p "c:\isetup\samples\my script.iss"

    如果编译成功，ISCC 将返回 0，如果命令行参数无效或发生内部错误，返回 1，如果编译失败，返回 2。

  • 安装脚本向导可以从命令行启动。命令行用法看下面:

    compil32 /wizard <向导名> <脚本名>

    示例:
    compil32 /wizard "我的程序脚本向导" "c:\temp.iss"

    象上述的例子中，包含空格的文件名必须用引号。

    从命令行运行向导不支持所有错误消息。如果没有发生错误并保存生成的脚本文件到指定的文件名，安装脚本向导退出代码返回 0，如果命令行参数无效，返回 1，如果生成的脚本文件不能保存，返回 2。如果用户取消安装脚本向导，返回退出代码 0，且不保存脚本文件。


安装命令行参数

安装程序接受可选的命令行参数。这些对于系统管理员以及其它程序调用安装程序时有用。

/HELP , /?

Shows a summary of this information. Ignored if the UseSetupLdr [Setup] section directive was set to no .

/SP-

在安装开始时禁用“这将安装... 你想继续吗？”的提示，当然，如果 [Setup] 段的指令 DisableStartupPrompt 设为 yes 时，这将无效。

/SILENT , /VERYSILENT

告诉安装程序后台或完全后台运行。当安装程序在后台运行时，向导和背景窗口将不显示，但安装进度窗口显示。当安装程序在完全后台安装时，这个安装进度窗口也不显示。其它的事件被象正常安装一样，例如安装期间显示错误消息框，以及启动时提示 (如果你没有在 DisableStartupPrompt 或上面说明的“/SP-”命令行选项中指定)。

如果需要重新启动，以及未使用“/NORESTART”命令行 (看下面)，并且安装程序在后台运行，将显示“立即重新启动吗”消息框。如果在完全后台安装模式，将在不询问的情况下重新启动。

/SUPPRESSMSGBOXES

命令安装程序可禁止消息框。只在用“/SILENT”和“/VERYSILENT”编译时有效。

在这种情况下默认会有一个选择:

  • 在“保留新文件吗”中会选择是。
  • 在“文件存在，确认覆盖。”中会选择否。
  • 在中断/重试情况下会选择中断。
  • 在重试/取消情况下会选择取消。
  • 在 DiskSpaceWarning/DirExists/DirDoesntExist/NoUninstallWarning/ExitSetupMessage/ConfirmUninstall 情况下会选择是 (继续)。
  • 在 FinishedRestartMessage/UninstalledAndNeedsRestart 情况下会选择是 (重启)。

有 5 种消息不能禁止:

  • 中断安装程序消息框。
  • “退出安装程序吗”消息框。
  • 当安装程序需要在新磁盘安装但新磁盘未找到时显示的 FileNotInDir2 消息框。
  • 在安装程序或卸载程序不能读取命令行参数之前显示的任何 (错误) 消息。
  • 用 [Code] 段支持函数 MsgBox 显示的消息框。
/LOG

使安装程序在用户的临时目录创建一个记录安装程序安装期间 [Run] 段详细动作的日志文件。这对于安装调试有帮助。例如，在你认为一个文件应该被替换，但你怀疑它没有被替换时 (反之亦然)，该日志文件将告诉你这个文件是否确实被跳过，并且为什么会跳过。

日志文件若要当前日期的唯一名字创建(它不覆盖或添加到现有的文件中)。

日志文件中包含的信息是用自然语言，非常容易看懂，对于用户来说不会难以理解。也不用进行机器分析；文件的格式是不预先通知服务改变。

/LOG= " 文件名 "

与 /LOG 相同，另外它还允许你为日志文件指定一个固定的路径/文件。如果相同的名字在路径中已经存在则将被覆盖，如果不能创建文件，安装程序将带错误消息中断。

/NOCANCEL

通过禁用“取消”按钮和忽略在“关闭”按钮的单击动作，来防止用户在安装进行时取消操作，与 /SILENT 或 /VERYSILENT 一起使用有用。

/NORESTART

Prevents Setup from restarting the system following a successful installation, or after a Preparing to Install failure that requests a restart. Typically used along with /SILENT or /VERYSILENT.

/RESTARTEXITCODE= 退出代码

Specifies a custom exit code that Setup is to return when the system needs to be restarted following a successful installation. (By default, 0 is returned in this case.) Typically used along with /NORESTART。请查阅安装退出代码。

/CLOSEAPPLICATIONS

Instructs Setup to close applications using files that need to be updated by Setup if possible.

/NOCLOSEAPPLICATIONS

Prevents Setup from closing applications using files that need to be updated by Setup. If /CLOSEAPPLICATIONS was also used, this command line parameter is ignored.

/RESTARTAPPLICATIONS

Instructs Setup to restart applications if possible. If Setup didn't close these applications (for example because /NOCLOSEAPPLICATIONS was used), this command line parameter is ignored.

/NORESTARTAPPLICATIONS

Prevents Setup from restarting applications. If /RESTARTAPPLICATIONS was also used, this command line parameter is ignored.

/LOADINF= " 文件名 "

告诉安装程序在选中命令行后从指定的文件载入设置。这个文件可以是使用下面说明的“/SAVEINF=”命令提供的。

如果文件名包含空格，不要忘记使用引号。

/SAVEINF= " 文件名 "

告诉安装程序保存安装设置到指定的文件。

告诉安装程序保存安装设置到指定的文件。

/LANG= 语言

指定要使用的语言。指定的语言是 [Languages] 段条目中指定的语言内部名字。

当使用了一个有效的 /LANG 参数时，选择语言对话框将被禁用。

/DIR= " x :\ 目录名 "

不考虑在选择目标位置向导页中显示的默认目录名。必须指定一个完整的路径。 May include an "expand:" prefix which instructs Setup to expand any constants in the name. For example: '/DIR=expand:{pf}\My Program'.

/GROUP= " 文件夹名 "

不考虑在选择开始菜单文件夹向导而中显示的默认文件夹名。May include an "expand:" prefix, see '/DIR='. 如果 [Setup] 段指令 DisableProgramGroupPage 设为 yes，这条命令行参数将被忽略。

/NOICONS

告诉安装程序在初始时选中选择开始菜单文件夹向导页中的“不创建任何图标”选择框。

/TYPE= 类型名

不考虑默认安装类型。

If the specified type exists and isn't a custom type, then any /COMPONENTS parameter will be ignored。

/COMPONENTS= " 用逗号分隔的组件名列表 "

不考虑默认组件设置。使用这个命令行参数使安装程序自动选择一个自定义安装类型。

Only the specified components will be selected; the rest will be deselected。

If a component name is prefixed with a "*" character, any child components will be selected as well (except for those that include the dontinheritcheck flag). If a component name is prefixed with a "!" character, the component will be deselected。

This parameter does not change the state of components that include the fixed flag。

示例:
Deselect all components, then select the "help" and "plugins" components:
/COMPONENTS="help,plugins"
示例:
Deselect all components, then select a parent component and all of its children with the exception of one:
/COMPONENTS="*parent,!parent\child"
/TASKS= " 用逗号分隔的任务名列表 "

指定初始应该是选中状态或不选中状态的 任务 列表。要取消任务的选中，用“!”字符作为名字的前缀。

只有指定的任务 (以及它的子任务) 将被选中；其余任务不被选中。如果你想保持默认的任务设置，只选中/不选中某些任务，请使用 /MERGETASKS。

If a task name is prefixed with a "*" character, any child tasks will be selected as well (except for those that include the dontinheritcheck flag). If a task name is prefixed with a "!" character, the task will be deselected。

示例:
不选中所有任务，然后选择“desktopicon”和“fileassoc”任务:
/TASKS="desktopicon,fileassoc"
示例:
不选中所有任务，然后选择上级任务项目，但它的子任务中的某个不选中:
/TASKS="*parent,!parent\child"
/MERGETASKS= " 用逗号分隔的任务名列表 "

像 /TASKS 参数，除指定的任务将被与已有的任务集合并外，其它按默认选择。

如果 UsePreviousTasks 设为 yes，指定的任务将在上一次任务回复后被选中/不选中。

示例:
保持选定任务的默认设置，但另外选中“desktopicon”和“fileassoc”任务:
/MERGETASKS="desktopicon,fileassoc"
示例:
保持选定任务的默认设置，但不选中“desktopicon”任务:
/MERGETASKS="!desktopicon"
/PASSWORD= 密码

指定要使用的密码。如果 [Setup] 段指令 Password 未设置，这条命令行参数被忽略。

当指定无效的密码时，这个命令行参数也被忽略。


安装退出代码

从 Inno Setup 3.0.3 开始，安装程序可以返回下列退出代码中的一个:

0 | 安装程序运行完成或使用了/HELP或/?命令行参数。
1 | 安装程序初始化失败。
2 | 用户在实际安装开始前单击向导页中的“取消”，或在“这将安装...”消息框中选择了“否”。
3 | 当准备移到下一个安装页 (例如，从显示的准备安装向导页到实际安装进程) 遇到一个致命错误。这应该不会发生，除非在意外的环境中，就象内存溢出或 Windows 资源溢出。
4 | 在实际安装进程中发生一个致命错误。 注意: 导致错误时会显示一个“中断、重试、忽略”框的不是致命错误。如果在这种消息框中选择“中断”，将返回退出代码 5。
5 | 在实际安装进程时单击“取消”，或在“中断、重试、忽略”消息框中选择“中断”。
6 | 安装进程被调试器强制终止 (运行 | 在 IDE 使用终止)。
7 | The Preparing to Install stage determined that Setup cannot proceed with installation. (First introduced in Inno Setup 5.4.1.)
8 | The Preparing to Install stage determined that Setup cannot proceed with installation, and that the system needs to be restarted in order to correct the problem. (First introduced in Inno Setup 5.4.1.)

在返回 1、3 4, 7, 或 8 退出代码前，将显示一个说明问题的错误消息。

以后的 Inno Setup 版本可能会返回另外的退出代码，应用程序检查退出代码的用意是能直观地处理意外的退出代码。任何非零值退出代码表示安装程序未完成。


卸载命令行参数

卸载程序 (unins???.exe) 接受可选的命令行参数。这些对于系统管理员是非常有用的，可以由其它程序调用卸载程序。

/SILENT , /VERYSILENT

当指定时，卸载程序将不询问用户启动确认或显示任何消息就开始卸载，直到完成。不再使用的共享的文件将不提示自动删除。但致命错误的消息仍将在屏幕中显示。当指定“/VERYSILENT”时，卸载进度窗口不显示。

如果需要重新启动，并且“/NORESTART”命令未使用 (看下面)，以及“/VERYSILENT”指定，卸载程序将不询问重新启动。

/SUPPRESSMSGBOXES

命令卸载程序禁止消息框。只在用“/SILENT”和“/VERYSILENT”编译时有效。查阅安装命令行参数帮助主题获取详细信息。

/LOG

使卸载程序在用户的临时目录创建一个记录安装程序卸载期间和 [UninstallRun] 详细动作的日志文件。这对于安装调试有帮助。

日志文件若要当前日期的唯一名字创建 (它不覆盖或添加到现有的文件中)，当前它不能自定义文件名。

日志文件中包含的信息是用自然语言，非常容易看懂，对于用户来说不会难以理解。也不用进行机器分析；文件的格式是不预先通知服从改变。

/LOG= " 文件名 "

与 /LOG 相同，except it allows you to specify a fixed path/filename to use for the log file. If a file with the specified name already exists it will be overwritten. If the file cannot be created, Uninstall will abort with an error message。

/NORESTART

告诉卸载程序不重新启动，即使需要这样做。


卸载退出代码

从 Inno Setup 4.0.8 开始，如果用户取消或遇到一个致命错误，卸载程序将返回一个非零值退出代码。程序检查退出代码以发现失败，而不是检查特殊的非零值；所有非零值退出代码说明卸载程序运行未完成。

请注意，从卸载程序获取到一个退出代码时，一些与卸载程序有关的代码可能仍在运行，因为 Windows 不允许程序删除它们自已的 EXE，卸载程序在临时目录创建并复制它自己的副本，由该“克隆”的程序执行实际卸载，结束后，终止原始的卸载程序 EXE (在这里你可以获取返回的退出代码)，并删除它，然后显示“卸载完成”消息框 (如果没有使用 /SILENT 或 /VERYSILENT 参数的话)。


不安全文件

对于不熟悉哪个文件应该或不应该发布的用户有用。如果尝试使用 [Files] 段安装某些“不安全”文件，Inno Setup 编译器将显示一个错误消息。下面是“不安全”文件列表。

(注意: 这可以在 [Files] 段条目中使用某些标记禁用错误消息，但不推荐。)

任何来自我自己的 Windows 系统目录的 DLL 文件

你不应该配置你的 Windows 系统目录中的 DLL，因为大多数只适合你自己指定的 Windows 版本，安装到其它版本后不会工作。如果你安装了一个来自其它 Windows 版本的 DLL，经常会导致你的系统不能正常启动。当你在电脑中安装了程序，DLL 可能被替换为其它不兼容的版本，并且你没有注意到以及采取措施，它在你构建新的安装程序时也会导致用户系统问题。所有不要这样做。

作为配置来自你的 Windows 系统目录中的 DLL 替代动作，你应该应该查明“redistributable”的版本。Redistributable DLL 一般能在多个 Windows 环境中工作。要查明 Visual Basic 和 Visual C++ run-time DLL 的 redistributable 版本，查阅 Setup 常见问题解答。

如果你有一个绝对有把握进行 redistributable 的 Windows 系统目录中的 DLL，将它复制到你的脚本来源目录并从那里配置它。

ADVAPI32.DLL, COMDLG32.DLL, GDI32.DLL, KERNEL32.DLL, RICHED32.DLL, SHELL32.DLL, USER32.DLL, UXTHEME.DLL

这些都是 Windows 的核心组件，必须不要用安装程序配置它。用户只能通过安装一个新版本的 Windows 或服务包或 Windows 修正程序来获取这些 DLL 的新版本。

(特殊场合) COMCAT.DLL, MSVBVM50.DLL, MSVBVM60.DLL, OLEAUT32.DLL, OLEPRO32.DLL, STDOLE2.TLB

如果 DestDir 设为不同于 {sys} 的位置，以及使用了 regserver 或 regtypelib 标记，那么上述文件将被考虑为“不安全”。这些文件不要在不是 {sys} 的目录中进行配置和注册，因为这样做有可能会导致系统中的所有程序不能使用在 {sys} 中的这些文件。如果你的文件副本老于 {sys} 中的文件，同样，如果你的文件副本被删除，其它应用程序将崩溃。

COMCTL32.DLL

Microsoft 不允许个别地进行 COMCTL32.DLL 重新分配 (较好的理由 - 不同平台之间的文件不同)，因此，你不应该在脚本的 [Files] 段放置 COMCTL32.DLL。可是你可以指引用户从 Microsoft 下载 COMCTL32 [external link] 升级版本，或将 COMCTL32 升级版本连同你的程序一起发布。

SHDOCVW.DLL, SHLWAPI.DLL, URLMON.DLL, WININET.DLL

这些是 Internet Explorer 的核心组件，同时也用于 Windows 资源管理器。替换它们可能会导致上述软件的问题。如果你的应用程序基于这些 DLL，或它们的最新版本，那么你的用户需要安装最新版本的 Internet Explorer 获取它们。

MSCOREE.DLL

This file is part of the Microsoft .NET Framework. You cannot safely install or update the .NET Framework by including this file with your installation. Call or direct your users to dotnetfx.exe instead。


感谢

下面是提供 Inno Setup 方案重要代码和其它特殊贡献的人员列表:

  • Jean-loup Gailly 和 Mark Adler: Inno Setup 使用的 zlib [external link] 压缩库作者。
  • Julian Seward: Inno Setup 使用的 bzlib [external link] 压缩库作者。
  • Igor Pavlov: Inno Setup 使用的 7-Zip LZMA [external link] 压缩库作者。
  • ?: 磁盘延伸代码 (1.09) 的大多数。(抱歉，不知何故居然将你的名字忘记!)
  • Vince Valenti: [Setup] 段“Window”指令的多数代码 (1.12.4)。
  • Joe White: [Setup] 段“ChangesAssociations”指令的多数代码 (1.2.?)。
  • Jason Olsen: 添加到现有的卸载日志 多数代码 (1.3.0)。
  • Martijn Laan: Rich Edit 2.0 和 URL 侦测支持代码 (1.3.13)；后台卸载 (1.3.25)，驱动器和目录列表中系统映像列表支持 (1.3.25)；后台安装 (2.0.0)；[Types]，[Components] 和 [Tasks] 段 (2.0.0)； postinstall 标记 (2.0.0)；[Code] 段 (4.0.0)；子组件和子任务支持 (4.0.0)；许多其它各种 4.0.0 功能。
  • Alex Yackimoff: TNewCheckListBox (4.0.0) 部分。
  • Carlo Kok: Innerfuse Pascal 脚本 [external link] (4.0.0)。
  • SynEdit [external link] 作者: 用于编译器 (2.0.0) 的语法加亮编辑器。
  • Creators of UniSynEdit [external link] : The syntax-highlighting editor used in the Compiler (5.3.0).
  • Creators of Scintilla [external link] : The syntax-highlighting editor used in the Compiler (5.4.0).
  • glyFX [external link]: Inno Setup 标识，编译器图标和文档图标， Inno Setup 安装向导图标 IDE 工具栏图标。128x128 and 256x256 icon sizes by Motaz.
  • Zaher Dirkey: Initial work on improved right-to-left languages support.
  • Evgeny Karpov of RemObjects Software: Initial work on Unicode support.


Inno Setup 技术支持

Inno Setup 技术支持，转到这个页面:
http://www.jrsoftware.org/isdonate.php [external link]


附加到现有卸载日志

When a new version of an application is installed over an existing version, instead of creating a new uninstall log file (unins???.dat), Setup will by default look for and append to an existing uninstall log file that belongs to the same application and is in the same directory. This way, when the application is uninstalled, changes made by all the different installations will be undone (starting with the most recent installation)。

The uninstaller will use the messages from the most recent installation of the application. However, there is an exception: if an installation was built with an older version of Inno Setup that included an older version of the uninstaller than the existing one on the user's system, neither the existing uninstaller nor its messages will be replaced. In this case the uninstall log will still be appended to, though, since the file format is backward compatible。

The application name displayed in the uninstaller will be the same as the value of the [Setup] section directive AppName from the most recent installation, unless UpdateUninstallLogAppName is set to no。

The uninstall log-appending feature is new to Inno Setup 1.3. If you wish to disable it, set the [Setup] section directive UninstallLogMode。

注意: Setup can only append to uninstall log files that were created by an Inno Setup 1.3.1 (or later) installation。


使用构建号和/或服务包级别

The versions specified in MinVersion and OnlyBelowVersion can optionally include build numbers and/or service pack levels.

示例:
5.0.2195
5.0sp4
5.0.2195sp4

如果版本号未指定或是零，安装程序将不检查系统的版本号。

如果服务包级别未指定或是零，安装程序将它解释为“无服务包”。

When a service pack level is specified, Setup will only compare it against the system's service pack level if the specified major and minor versions match the system's version. For example, if MinVersion specifies 5.0sp4 , Setup will only check for SP4 on Windows 2000 (5.0) systems.

In an OnlyBelowVersion parameter, if the specified version matches the system's version, then Setup will normally consider the system's version to be too high. However, when a service pack level is specified, the specified version is allowed to match the system's version. For example, on Windows 2000 SP4, values of 5.0 and 5.0.2195 will fail the OnlyBelowVersion test, but 5.0sp5 and 5.0.2195sp5 will pass (as SP4 < sp5 ).


Pascal 脚本: Abort

语法:

procedure Abort;

描述:

不报告错误从当前执行中避开。

Abort 提出一个特殊的“静寂排除”，象其它任何排除一样，但不显示错误消息给最终用户。

注释:

Abort 不会使安装程序或卸载程序退出，除非它从这些事件函数 (或由它们调用的函数) 中的一个调用:

InitializeSetup
InitializeWizard
CurStepChanged(ssInstall)

InitializeUninstall
CurUninstallStepChanged(usAppMutexCheck)
CurUninstallStepChanged(usUninstall)

请查阅:

PrepareToInstall


Pascal 脚本: ActiveLanguage

语法:

function ActiveLanguage: String;

描述:

返回活动语言名。


Pascal 脚本: AddBackslash

语法:

function AddBackslash(const S: String): String;

描述:

添加一个反斜杠符号返回指定的字符串，除非字符串是空的或已经用反斜杠结尾。


Pascal 脚本: AddPeriod

语法:

function AddPeriod(const S: String): String;

描述:

添加一个句点后返回指定的字符串，除非字符串是空的或已经用句点或其它标点符号结尾。


Pascal 脚本: AddQuotes

语法:

function AddQuotes(const S: String): String;

描述:

如果字符串包含空格并且没有引号，添加一个引号 (") 字符到字符串的左右两边。这主要是在重开其它用长文件名进程为参数中的一个时使用。


Pascal 脚本: AnsiLowercase

语法:

function AnsiLowercase(S: String): String;

描述:

返回 S 中相同文字的字符串, 但所有字母转换到小写字母。The conversion uses the current Windows locale. This function supports multi-byte character sets (MBCS).


Pascal 脚本: AnsiUppercase

语法:

function AnsiUppercase(S: String): String;

描述:

返回 S 中相同文字的字符串, 但所有字母转换到大写字母。The conversion uses the current Windows locale. This function supports multi-byte character sets (MBCS).


Pascal 脚本: Beep

语法:

procedure Beep;

描述:

扬声器声音。

示例:
Beep; //扬声器声音


Pascal 脚本: BringToFrontAndRestore

语法:

procedure BringToFrontAndRestore;

描述:

确保安装程序或卸载程序背景窗口是可见的。


Pascal 脚本: BrowseForFolder

语法:

function BrowseForFolder(const Prompt: String; var Directory: String; const NewFolderButton: Boolean): Boolean;

描述:

显示一个用户选择目录的对话框。目录默认值是初始选择的目录。如果 NewFolderButton 为 True，将显示一个新建文件夹按钮。如果用户选择了一个目录并单击确定后返回 True，否则返回 False。选择的目录返回到目录字符中。

注释:

在 Windows XP 以前的版本中，在 NewFolderButton 参数中使用 False 是无效的；新建文件夹按钮总是显示。这是 Windows 的限制。


Pascal 脚本: CallDLLProc

语法:

function CallDLLProc(const DLLHandle: Longint; const ProcName: String; const Param1, Param2: Longint; var Result: Longint): Boolean;

描述:

通过 LoadDLL 使用 DLL 句柄返回调用指定的 DLL 中指定的函数。返回 True 表示程序调用顺利，False 则反之。
函数必须使用标准的调用协定，接受两个 4 字节整数参数并返回一个 4 字节整数结果。

注释:

不赞成使用这个函数，查阅 使用 DLL 主题。


Pascal 脚本: CastIntegerToString

语法:

function CastIntegerToString(const L: Longint): String;

描述:

将整数变为字符，使这个字符可以使用 CallDllProc 从 DLL 接收。

注释:

不赞成使用这个函数，查阅 使用 DLL 主题。


Pascal 脚本: CastStringToInteger

语法:

function CastStringToInteger(var S: String): Longint;

描述:

将字符变为整数，使这个字符可以使用 CallDllProc 传递到 DLL。

注释:

不赞成使用这个函数，查阅 使用 DLL 主题。


Pascal 脚本: ChangeFileExt

语法:

function ChangeFileExt(const FileName, Extension: string): String;

描述:

获取 FileName 中的文件名并改变文件扩展名到 Extension 指定的扩展名。


Pascal 脚本: CharLength

语法:

function CharLength(const S: String; const Index: Integer): Integer;

描述:

在指定的索引中用字节 (1 或 2) 返回指定字符串的长度值。

注释:

在双字节字符集 (中国，日本，韩国)，很多非 ASCII 字符占用两个字节。注意双字节字符的第二个字节 -- 就是“跟随字节” -- 可以在同一范围通过 ASCII 字符使用 (128 个以下)。这样当执行到通过一个包含双字节字符的字符串时，比如路径或文件，会注意处理双字节字符，不会与单字节的 ASCII 字符搞错。

示例:
function BackslashToSlash(const S: String): String;
var
  I: Integer;
begin
  Result := S;
  I := 1;
  while I <= Length(Result) do
  begin
    if Result[I] = '\' then
      Result[I] := '/';
    // Go to the next character. But do not simply increment I by 1.
    // Increment by CharLength() in case Result[I] is a double-byte character.
    I := I + CharLength(Result, I);
  end;
end;

...

begin
  // Show path of Common Files with backslashes changed to forward slashes
  MsgBox(BackslashToSlash(ExpandConstant('{cf}')), mbInformation, MB_OK);
end;


Pascal 脚本: CharToOemBuff

语法:

procedure CharToOemBuff(var S: AnsiString);

描述:

转换一个 ANSI 字符串到来自 OEM 定义字符集中的字符串。


Pascal 脚本: CheckForMutexes

语法:

function CheckForMutexes(Mutexes: String): Boolean;

描述:

如果有任何逗号分隔的互斥字串存在则返回 True。


Pascal 脚本: Chr

语法:

function Chr(B: Byte): Char;

描述:

用指定的顺序值返回字符串。


Pascal 脚本: CoFreeUnusedLibraries

语法:

procedure CoFreeUnusedLibraries;

描述:

查阅使用 COM 自动操作对象主题。


Pascal 脚本: CompareStr

语法:

function CompareStr(const S1, S2: string): Integer;

描述:

将 S1 与 S2 进行比较，区分大小写。如果 S1 小于 S2，则返回值小于 0，如果 S1 等于 S2，则返回 0，如果 S1 大于 S2，则返回值大小 0。


Pascal 脚本: CompareText

语法:

function CompareText(const S1, S2: string): Integer;

描述:

比较字符串 S1 和 S2，如果它们相等则返回 0。如果 S1 大于 S2，CompareText 返回一个大于 0 的整数。如果 S1 小于 S2，CompareText 返回一个小于 0 的整数。CompareText 函数不区分大小写。


Pascal 脚本: ConvertPercentStr

语法:

function ConvertPercentStr(var S: String): Boolean;

描述:

在字符串中展开所有 %-encoded 字符串 (查阅 RFC 2396)。如果展开成功则返回 True。


Pascal 脚本: Copy

语法:

function Copy(S: String; Index, Count: Integer): String;

描述:

返回一个用 S[Index] 开始的计数字符的字符串。
如果索引大小 S 长度，复制返回一个空的字符串。
如果计数指定多于可用字符，只有从 S[Index] 字符到 S 结尾返回。


Pascal 脚本: CreateComObject

语法:

function CreateComObject(const ClassID: TGUID): IUnknown;

描述:

查阅 使用 COM 自动操作对象 主题。


Pascal 脚本: CreateCustomForm

语法:

function CreateCustomForm: TSetupForm;

描述:

创建一个窗体。这个窗体默认是空的。你可以创建自己的控件，然后放置到页面中 (通过设置它们的上级属性为由这个函数返回的 TSetupForm 界面属性实例)。

注释:

你可以直接调用这个函数，而不是创建 TForm 或 TSetupForm 实例。这个函数会自动初始化创建的窗体字体和其它属性为其它安装程序对话框一样的属性。

按默认，[LangOptions] 段的 DialogFontName 和 DialogFontSize 指令确定用于窗体以及创建于该窗体的的子控件的字体和大小。

示例:

查阅 CodeClasses.iss 中的示例。


Pascal 脚本: CreateCustomPage

语法:

function CreateCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TWizardPage;

描述:

创建一个自定义向导页。这个页默认是空的；你可以创建自己的控件，然后放置到页面中 (通过设置它们的上级属性为由这个函数返回的 TWizardPage 界面属性实例)。

示例:

查阅 CodeClasses.iss 中的示例。


Pascal 脚本: CreateDir

语法:

function CreateDir(const Dir: string): Boolean;

描述:

创建一个新目录。如果新目录创建成功则返回 True，如果遇到错误则返回 False。


Pascal 脚本: CreateInputDirPage

语法:

function CreateInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage;

描述:

创建一个包含编辑框和浏览选择目录的按钮。如果 AAppendDir 是 True，ANewFolderName 的值将附加到任何用户单击选择的文件夹名。如果 AAppendDir 是 False，并且 ANewFolderName 是空的，将显示一个新建文件夹按钮，可以用指定的默认名创建一个新文件夹。

注释:

要在页面中创建一个目录选择框，调用 Add 方法。使用值的属性获取/设置项目的值。

示例:
var
  Page: TInputDirWizardPage;
  DataDir: String;

...

// 创建页面
Page := CreateInputDirPage(wpWelcome,
  '选择私人数据位置', '你想将私人数据文件贮存到什么地方？',
  '私人数据文件将贮存到下列文件夹中: '#13#10#13#10 +
  '要继续，单击下一步。如果你想选择一个其它目录，单击浏览。',
  False, '新建文件夹');

// 添加项目 (用空标题)
Page.Add('');

// 设置初始值 (可选)
Page.Values[0] := ExpandConstant('{userappdata}\My Company\My Program');

...

// 读取值到变量
DataDir := Page.Values[0];


Pascal 脚本: CreateInputFilePage

语法:

function CreateInputFilePage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputFileWizardPage;

描述:

创建一个包含编辑框和浏览选择文件的按钮。

注释:

要在页面创建文件选择框，调用 Add 方法。使用值的属性获取/设置项目的值

过滤器示例: '文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*'

示例:
var
  Page: TInputFileWizardPage;
  NotepadLocation: String;

...

// 创建页面
Page := CreateInputFilePage(wpWelcome,
  '选择记事本位置', '记事本在什么地方？',
  '选择记事本的位置，然后单击下一步。');

// Add item
Page.Add('notepad.exe 位置:',         // 标题
  '可执行文件|*.exe|所有文件|*.*',    // 过滤
  '.exe');                                   // 默认扩展名

// 设置初始值 (可选)
Page.Values[0] := ExpandConstant('{win}\notepad.exe');

...

// 读取值到变量
NotepadLocation := Page.Values[0];


Pascal 脚本: CreateInputOptionPage

语法:

function CreateInputOptionPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; Exclusive, ListBox: Boolean): TInputOptionWizardPage;

描述:

创建包含选择框或单选按钮的向导页。

如果 Exclusive 是 True，将用单选按钮替换选择框，列表中的项目只有一个可以选中。如果 ListBox 是 True，选择框或单选按钮放置到滚动列表框内。

注释:

要在页面中创建选择框 / 单选按钮，调用 Add 方法。使用值的属性获取/设置项目的选中状态。在用 Exclusive=True 创建的页面，你可以通过 SelectedValueIndex 属性获取/设置选定项目的索引。

示例:
var
  Page: TInputOptionWizardPage;
  IsRegisteredUser: Boolean;

...

// 创建页面
Page := CreateInputOptionPage(wpWelcome,
  '许可信息', '你是注册用户吗？',
  '如果你是注册用户，请选中下面的框，然后单击下一步。',
  False, False);

// 添加项目
Page.Add('我是注册用户'');

// 设置初始值 (可选)
Page.Values[0] := False;

...

// 读取值到变量
IsRegisteredUser := Page.Values[0];


Pascal 脚本: CreateInputQueryPage

语法:

function CreateInputQueryPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputQueryWizardPage;

描述:

创建一个包含编辑框的向导页。

注释:

要在页面创建编辑框，调用 Add 方法。使用值的属性去获取/设置编辑框文字。

示例:
var
  Page: TInputQueryWizardPage;
  UserName, UserCompany: String;

...

// 创建页面
Page := CreateInputQueryPage(wpWelcome,
  '私人信息', '你是谁？',
  '请指定你的名字和公司，然后单击下一步。');

// 添加项目 (False 表示不是密码编辑)
Page.Add('名字:', False);
Page.Add('公司:', False);

// 设置初始值 (可选)
Page.Values[0] := ExpandConstant('{sysuserinfoname}');
Page.Values[1] := ExpandConstant('{sysuserinfoorg}');

...

// 读取值到变量
UserName := Page.Values[0];
UserCompany := Page.Values[1];


Pascal 脚本: CreateMutex

语法:

procedure CreateMutex(const Name: String);

描述:

用指定的名字创建一个互斥。


Pascal 脚本: CreateOleObject

语法:

function CreateOleObject(const ClassName: string): Variant;

描述:

查阅使用 COM 自动操作对象主题。


Pascal 脚本: CreateOutputMsgMemoPage

语法:

function CreateOutputMsgMemoPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; const AMsg: AnsiString): TOutputMsgMemoWizardPage;

描述:

创建一个包含只读的、多行编辑控件、显示 RTF 文本的静态文本。ASubCaption 参数指定要显示的静态文本。AMsg 指定分配给编辑控件的文字。

示例:
var
  Page: TOutputMsgMemoWizardPage;

...

// 创建页面创建页面
Page := CreateOutputMsgMemoPage(wpWelcome,
  '信息', '请在继续前认真阅读下列重要信息。',
  '当你要继续安装，单击下一步。',
  '哈哈哈哈哈哈');


Pascal 脚本: CreateOutputMsgPage

语法:

function CreateOutputMsgPage(const AfterID: Integer; const ACaption, ADescription, AMsg: String): TOutputMsgWizardPage;

描述:

创建一个只包含静态文本的向导页。 AMsg 参数指定要显示的文本。

示例:
var
  Page: TOutputMsgWizardPage;

...

// Create the page
Page := CreateOutputMsgPage(wpWelcome,
  '信息', '请在继续前认真阅读下列重要信息。',
  '哈哈哈哈哈哈');


Pascal 脚本: CreateOutputProgressPage

语法:

function CreateOutputProgressPage(const ACaption, ADescription: String): TOutputProgressWizardPage;

描述:

创建一个包含进度条和静态文本的页面 (默认是隐藏的)。

不同于其它向导页类型，进度页面不显示为普通页面序列 (注意它没有 AfterID 参数)。进度页只能通过调用它的 Show 方法显示。

注释:

调用 Show 方法激活并显示页面。当你完成后，调用 Hide 方法回复到先前页面。

总是在代码内部最终部分放置 Hide 调用，请看 CodeDlg.iss 中的示例。不调用 Hide 将导致向导中永远都有进度条。

要在页面设置文本，调用 SetText 方法。SetText 带两个字串参数: 用第一个参数告诉用户你正在做什么，第二个参数显示文件或目录名。任一一个参数可以为空。

要显示或更新进度条，调用 SetProgress 方法。SetProgress 带两个整数参数: 第一个指定进度条位置 (基于零)，第二个指定进度条的最高可以使用的位置。如果第二个参数是 0，那么进度条将是隐藏的。

示例:

查阅 CodeClasses.iss 中的示例。


Pascal 脚本: CreateShellLink

语法:

function CreateShellLink(const Filename, Description, ShortcutTo, Parameters, WorkingDir, IconFilename: String; const IconIndex, ShowCmd: Integer): String;

描述:

创建一个文件或文件夹的快捷方式。返回最终链接文件名，如果它创建为 .pif 文件，而不是 .lnk 文件，可能不同于文件名。失败时将出现异常。

Parameters:
Filename
创建的快捷方式文件名，这应该是完整路径，且必须用“.lnk”结尾。
Description
连接的描述。如果你使用 Windows 2000/XP 和其它支持的操作系统，当用户鼠标悬浮或显示属性时可以显示描述。
ShortcutTo
快捷方式的目标文件。这必须是链接到文件的完整路径。围绕路径将自动添加双引号。
Parameters
快捷方式使用目标文件的参数。参数中如果包含空格时，要用双引号围绕参数。例如 ExpandConstant('"{app}\foo"')
WorkingDir
W目标文件的工作目录，这应该设置为绝对路径。
IconFilename
提供图标的文件路径。如果留下空字符，那么将使用目标文件的系统默认图标。
IconIndex
基于零的图标索引。
ShowCmd
SW_* 常量中的一个

注释:

你很可能想在卸载时删除这个快捷方式。你可以在 UninstallDelete 段中添加一个条目。

示例:
CreateShellLink(
  ExpandConstant('{app}\config\Open licence database.lnk'),
  '在 SQLite 中打开许可数据库',
  ExpandConstant('{app}\config\sqlite.exe'),
  ExpandConstant('"{app}\config\licences.db"'),
  ExpandConstant('{app}\config'),
  '',
  0,
  SW_SHOWNORMAL);


Pascal 脚本: CurrentFileName

语法:

function CurrentFileName: String;

描述:

返回当前正在处理的 [Files] 条目目标名，返回的名字可能包含常量。

不要尝试在 Check 外部调用这个函数，BeforeInstall 或 AfterInstall 事件函数属于 [Files] 条目。


Pascal 脚本: CustomMessage

语法:

function CustomMessage(const MsgName: String): String;

描述:

用指定的名字返回 [CustomMessages] 条目的值。如果指定名字的条目不存在，将出现异常。

示例:
var
  S: String;
begin
  S := CustomMessage('CreateDesktopIcon');
  // S = 'Create a &desktop icon'

  S := FmtMessage(CustomMessage('NameAndVersion'), ['My Program', '1.0']);
  // S = 'My Program version 1.0'
end;


Pascal 脚本: DecrementSharedCount

语法:

function DecrementSharedCount(const Is64Bit: Boolean; const Filename: String): Boolean;

描述:

在下列注册表键中减少指定文件的引用计数:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs

64 位版本的 Windows 有两个单独的 SharedDLLs 键，一个用于 64 位文件，另一个用于 32 位文件。如果 Is64Bit 为 True，将更新 64 位 SharedDLLs 键，否则将更新 32 位 SharedDLLs 键。这个参数的设置应该符号文件的进制。例如，如果它是一个位于 32 位系统目录的 32 位 DLL，你应该指定 False。在这种情况下，你还可以指定 Is64BitInstallMode，它将根据当前的安装模式确定需要打开哪个键。

如果计数已到达零返回 True，这表示可以删除文件。如果新的计数大于零，或者文件的值不存在，或是一个不认识的格式则返回 False。

如果注册表键不能打开进行写入，出现一个意外。


Pascal 脚本: DelayDeleteFile

语法:

procedure DelayDeleteFile(const Filename: String; const Tries: Integer);

描述:

尝试删除 Filename，如果文件在使用，重试删除 Tries 次。每次尝试删除间隔为 250 毫秒。


Pascal 脚本: Delete

语法:

procedure Delete(var S: String; Index, Count: Integer);

描述:

从字符串 S 起始于 S[Index] 删除 Count 字符串的子字符串。
如果 Index 大于 S 长度，不删除任何字符。如果 Count 指定多于保留在起始于 S[Index] 的字符串，删除字符串其它部分。


Pascal 脚本: DeleteFile

语法:

function DeleteFile(const FileName: string): Boolean;

描述:

从磁盘中清除名为 FileName 的文件。
如果文件不能删除或不存在，该函数返回 False。


Pascal 脚本: DeleteIniEntry

语法:

procedure DeleteIniEntry(const Section, Key, Filename: String);

描述:

从 INI 文件中删除指定的键。


Pascal 脚本: DeleteIniSection

语法:

procedure DeleteIniSection(const Section, Filename: String);

描述:

从 INI 文件中删除指定的段。


Pascal 脚本: DelTree

语法:

function DelTree(const Path: String; const IsDir, DeleteFiles, DeleteSubdirsAlso: Boolean): Boolean;

描述:

如果 IsDir 设为 True，或 IsDir 设为 False，文件/目录匹配一个通配符，则删除指定的目录, 如果可以成功删除所有内容则返回 True。

如果 DeleteFiles 设为 True，指定目录内部的文件在 IsDir 为 True 的情况下将被删除，或者如果 IsDir 为 False，匹配指定的通配符的文件 (包括带隐藏、系统和只读属性的文件) 将被删除。

如果 DeleteFiles 和 DeleteSubdirsAlso 两者都设为 True，子目录 (以及它的内容) 将被删除。

注释:

这个函数将删除重新解析指定的目录，但它不递归删除它内部的文件/目录。

示例:
begin
  // Delete the directory C:\Test and everything inside it
  DelTree('C:\Test', True, True, True);

  // 删除 C:\Test\*.tmp 中匹配的文件
  DelTree('C:\Test\*.tmp', False, True, False);

  // 删除 C:\Test 中的所有文件和目录
  // 但保留它本身目录
  DelTree('C:\Test\*', False, True, True);
end;


Pascal 脚本: DirExists

语法:

function DirExists(const Name: String): Boolean;

描述:

如果指定的目录名存在则返回 True。指定的名字可以包含一个反斜杠符号。


Pascal 脚本: DLLGetLastError

语法:

function DLLGetLastError(): Longint;

描述:

返回在最近 DLL 函数调用之后已修正的最后错误值。通常在调用 Windows API 函数之后 (如果该函数设置了最后错误代码)。

注释:

推荐你在安装程序或卸载程序使用这个函数来替换直接调用 GetLastError Windows API 函数，这样最近错误代码可以在任何时间被覆盖。

示例:
function MessageBox(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

...

begin
  if MessageBox(-1, '', '', -1) = 0 then
    MsgBox(SysErrorMessage(DLLGetLastError), mbError, mb_Ok);


Pascal 脚本: EnableFsRedirection

语法:

function EnableFsRedirection(const Enable: Boolean): Boolean;

描述:

Controls whether built-in support functions that access files disable WOW64 file system redirection (with some exceptions). Specify True in the Enable parameter to leave redirection enabled when those functions are called; specify False to disable it. Returns the previous redirection state (True if redirection was enabled).

If False is passed in the Enable parameter and the user isn't running a supported 64-bit version of Windows, an exception will be raised. To avoid the exception, call IsWin64 first.

注释:

After you've performed the operation that required changing the redirection state, be sure to restore the previous state. Always use a try..finally language construct to ensure that the previous state is restored even if an exception occurs. See below for an example.

By default, file system redirection is enabled in 32-bit mode installs, and disabled in 64-bit mode installs.

This function has no effect on calls to functions in external DLLs. When invoking external functions, file system redirection is always left enabled.

It is legal to call this function with True in the Enable parameter if the user isn't running a 64-bit version of Windows. In such a case, the call has no effect.

示例:

The following example demonstrates how to launch an executable located in the 64-bit System directory. (Note: In a 64-bit mode install, it isn't necessary to call EnableFsRedirection because file system redirection is already disabled by default.)

var
  OldState: Boolean;
  ResultCode: Integer;
begin
  // First verify that the user is running a supported 64-bit version
  // of Windows, because calling EnableFsRedirection(False) will
  // raise an exception otherwise.
  if IsWin64 then
  begin
    // Turn off redirection, so that cmd.exe from the 64-bit System
    // directory is launched.
    OldState := EnableFsRedirection(False);
    try
      Exec(ExpandConstant('{cmd}'), '', '', SW_SHOW,
        ewWaitUntilTerminated, ResultCode);
    finally
      // Restore the previous redirection state.
      EnableFsRedirection(OldState);
    end;
  end;
end;


Pascal 脚本: Exec

语法:

function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;

描述:

执行指定的可执行文件。使用 Wait 指定 InstExec 是否应该立即返回或等待，直到可执行文件终止或空闲。如果指定的文件已执行则返回 True，否则返回 False。如果返回 True 并且 Wait 是 WaitUntilTerminated，那么 ResultCode 返回执行的文件的退出代码。如果返回 False，那么 ResultCode 指定遇到的错误。使用 SysErrorMessage(ResultCode) 获取错误描述。

注释:

TExecWait 定义为:

TExecWait = (ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle);

如果你需要运行一个不是可执行文件或批处理文件，则用 ShellExec 函数替换。

不要在文件名参数中包含引号，该函数将自动添加。

The WorkingDir parameter can be an empty string, in which case it will try to extract a pathname from the Filename parameter and use that as the initial current directory for the process. If no pathname was specified in Filename, a default directory will be used.

If you have a single string containing both a filename and parameters (e.g. a command line obtained from an UninstallString registry value), you need not separate them yourself; just pass '>' in the Filename parameter, and the full command line in the Params parameter. (Note that when this is done, the function's special platform-independent support for .bat and .cmd files is disabled; it simply passes the specified command line to CreateProcess without any processing.)

By default, when Setup/Uninstall is running in 64-bit mode, this function disables WOW64 file system redirection when calling CreateProcess. It is possible to override this by calling EnableFsRedirection.

示例:
var
  ResultCode: Integer;
begin
  // 运行记事本程序并等待它终止
  if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW,
     ewWaitUntilTerminated, ResultCode) then
  begin
    // 如果需要处理完成，ResultCode 包含退出代码
  end
  else begin
    // 如果需要处理失败；ResultCode 包含错误代码
  end;
end;
请查阅:

ExecAsOriginalUser


Pascal 脚本: ExecAsOriginalUser

语法:

function ExecAsOriginalUser(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;

描述:

Executes the specified executable or batch file, using the (normally non-elevated) credentials of the user that started Setup initially. See Exec and the [Run] section flag runasoriginaluser for more information.

注释:

This function is not supported at uninstall time.

In very unusual failure cases (e.g. if the initial Setup process died unexpectedly), it is possible for this function to raise an exception instead of just returning False.


Pascal 脚本: ExitSetupMsgBox

语法:

function ExitSetupMsgBox: Boolean;

描述:

显示“退出安装程序吗？”消息框，如果用户选择“是”则返回 True。不终止安装程序或卸载程序。


Pascal 脚本: ExpandConstant

语法:

function ExpandConstant(const S: String): String;

描述:

更改所有在 S 中的常量到它们的值。例如，ExpandConstant('{srcexe}') 是改变到安装程序的文件名。

如果展开常量有错误将出现异常。


Pascal 脚本: ExpandConstantEx

语法:

function ExpandConstantEx(const S: String; const CustomConst, CustomValue: String): String;

描述:

更改所有在 S 中的常量到它们的值。同时，一些等于 CustomConst 的常量将被更改为 CustomValue。

如果展开常量有错误将出现异常。


Pascal 脚本: ExpandFileName

语法:

function ExpandFileName(const FileName: string): String;

描述:

返回一个包含用于 FileName 完整文件路径名字符串。完整路径名包括驱动器卷标和本地驱动器以及除文件名和扩展名之外的目录和子目录。


Pascal 脚本: ExpandUNCFileName

语法:

function ExpandUNCFileName(const FileName: string): String;

描述:

返回一个包含用于 FileName 完整文件路径名字符串。如果驱动卷标映像到网络资源，而不是本地驱动器以及除文件名和扩展名之外的目录和子目录，完整路径名在 UNC 格式“\\<servername>\<sharename>”的文件名中包括驱动器。


Pascal 脚本: ExtractFileDir

语法:

function ExtractFileDir(const FileName: string): String;

描述:

提取给出的文件名中的驱动器和目录部分。如果 FileName 不包括驱动器和目录部分，最终的字符串是空值。


Pascal 脚本: ExtractFileDrive

语法:

function ExtractFileDrive(const FileName: string): String;

描述:

返回用于 FileName 中的完整路径名中的“驱动器”部分的字符串。对于带驱动器卷标的文件名，最终的字符串是“<drive>:”形式。对于带 UNC 路径的文件名，最终字符串是“\\<servername>\<sharename>”形式。如果给出的路径不包含路径前缀样式，返回的结果是一个空字符串。


Pascal 脚本: ExtractFileExt

语法:

function ExtractFileExt(const FileName: string): String;

描述:

提取给出的文件名中的扩展名部分。最终的字符串包含分隔名字和扩展名部分的句号字符。如果 FileName 没有扩展名，最终的字符串是空值。


Pascal 脚本: ExtractFileName

语法:

function ExtractFileName(const FileName: string): String;

描述:

提取给出的文件名中的名字和扩展名部分。最终字符串是 FileName 中的最右边字符串， 从名字和扩展名分隔路径信息的冒号或反斜杠符号之外的第一个字符串开始，如果 FileName 不包括驱动器和目录部分，最终的字符串等于 FileName。


Pascal 脚本: ExtractFilePath

语法:

function ExtractFilePath(const FileName: string): String;

描述:

提取给出的文件名中的驱动器和目录部分。最终字符串是 FileName 中的最左边字符串，一直到包含分隔名字和扩展名的冒号或反斜杠符号。如果 FileName 不包括驱动器和目录部分，最终的字符串是空值。


Pascal 脚本: ExtractRelativePath

语法:

function ExtractRelativePath(const BaseName, DestName: String): String;

描述:

转换完整路径名到相对路径名。DestName 参数指定要转换的文件名 (包括路径)。BaseName 是返回样对路径名的基部目录的完整路径名。

BaseName 可以或不可包含文件名，但必须包含最终路径定界符。

ExtractRelativePath 剥离每个 BaseName 上层路径的公共路径目录并插入“..\”。

示例:
var
  S: String;
begin
  S := ExtractRelativePath('c:\windows\system32\', 'c:\autoexec.bat');
  // S = ..\..\autoexec.bat
end;


Pascal 脚本: ExtractTemporaryFile

语法:

procedure ExtractTemporaryFile(const FileName: String);

描述:

从 [Files] 段提取指定的文件到临时目录中。要查找临时目录位置，请使用 ExpandConstant('{tmp}')。

提取的文件在安装程序退出时自动删除。

如果提取不成功，或文件未找到，或找到了文件但因为它的“MinVersion”和/或“OnlyBelowVersion”参数原因不能处理，将出现一个意外。

注释:

在 [Files] 段使用“Flags: dontcopy”告诉安装程序在普通文件复制过程中跳过文件。

When solid compression is enabled, be sure to list your temporary files at (or near) the top of the [Files] section. In order to extract an arbitrary file in a solid-compressed installation, Setup must first decompress all prior files (to a temporary buffer in memory). This can result in a substantial delay if a number of other files are listed above the specified file in the [Files] section.

示例:
[Files]
Source: "Readme.txt"; Flags: dontcopy

[Code]
function InitializeSetup: Boolean;
var
  S: AnsiString;
begin
  // 在消息框显示 Readme.txt 内容
  ExtractTemporaryFile('Readme.txt');
  if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
  begin
    MsgBox(S, mbInformation, MB_OK);
  end;

  Result := True;
end;
请查阅:

ExtractTemporaryFiles


Pascal 脚本: ExtractTemporaryFiles

语法:

function ExtractTemporaryFiles(const Pattern: String): Integer;

描述:

Extracts the files matching the wildcard specified by Pattern from the [Files] section to a temporary directory. Returns the number of extracted files. To find the location of the temporary directory, use ExpandConstant('{tmp}') .

The extracted files are automatically deleted when Setup exits.

An exception will be raised if no files were extracted successfully, no files were found, or if files were found but none could be processed because of their MinVersion and/or OnlyBelowVersion parameters.

注释:

Use Flags: dontcopy in the [Files] section to tell Setup to skip the file during the normal file copying stage.

When solid compression is enabled, be sure to list your temporary files at (or near) the top of the [Files] section. In order to extract an arbitrary file in a solid-compressed installation, Setup must first decompress all prior files (to a temporary buffer in memory). This can result in a substantial delay if a number of other files are listed above the specified file in the [Files] section.

示例:
[Files]
Source: "Readme.txt"; Flags: dontcopy
Source: "MyProg.exe"; DestDir: "{app}"
Source:
"MyProg.chm"; DestDir: "{app}"

[Code]
function InitializeSetup: Boolean;
var
  S: AnsiString;
  ResultCode:
Integer;
begin
  // Show the contents of Readme.txt (non Unicode) in a message box
  ExtractTemporaryFiles('{tmp}\Readme.txt');

if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
  begin
    MsgBox(S, mbInformation,
MB_OK);
  end;

  // Extract all MyProg files and launch it. Note how {app} is left unexpanded.
  ExtractTemporaryFiles('{app}\MyProg.*');

ExecAsOriginalUser(ExpandConstant('{tmp}\')+'{app}\MyProg.exe', '', '',
    SW_SHOWNORMAL, ewWaitUntilTerminated,
ResultCode);

  Result := True;
end;
请查阅:

ExtractTemporaryFile


Pascal 脚本: FileCopy

语法:

function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;

描述:

复制 ExistingFile 到 NewFile，保留时间戳和文件属性。
如果 FailIfExists 为 True，当　NewFile 已经存在时，它将失败，否则将覆盖它。
如果成功返回 True，否则返回 False。


Pascal 脚本: FileExists

语法:

function FileExists(const Name: String): Boolean;

描述:

如果指定的文件存在则返回 True。


Pascal 脚本: FileOrDirExists

语法:

function FileOrDirExists(const Name: String): Boolean;

描述:

如果指定的目录或文件存在则返回 True。指定的名字可以在后面跟随一个反斜杠符号。


Pascal 脚本: FileSearch

语法:

function FileSearch(const Name, DirList: string): String;

描述:

搜索整个 DirList 定义的目录中名为 Name 的文件。DirList 应该是用分号隔开的目录名。如果 FileSearch 找到匹配 Name 的文件，它返回包含这个文件完整路径名的字符串。如果没有匹配的文件存在，FileSearch 返回一个空字符串。


Pascal 脚本: FileSize

语法:

function FileSize(const Name: String; var Size: Integer): Boolean;

描述:

设置 Size 为用字节表示的指定文件的大小。如果文件大小设置完成则返回 True，否则返回 False。 Only supports file sizes smaller than 2 GB. To get all 64 bits of the file size, use FindFirst / FindClose instead.


Pascal 脚本: FindClose

语法:

procedure FindClose(var FindRec: TFindRec);

描述:

结束一个查找序列，并释放与之关联的资源。你可以在 FindFirst 返回 True 时总是调用它们。

示例:

要获取示例，查看帮助文档中的 FindFirst。


Pascal 脚本: FindFirst

语法:

function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean;

描述:

接收有关匹配由 FileName 指定的通配符的第一个文件的信息。如果成功则返回 True。

TFindRec 定义为:

  TFindRec = record
    Name: String;               // 查找文件名 (无路径)
    Attributes: LongWord;       // 文件属性
    SizeHigh: LongWord;         // 文件大小，32 位以上
    SizeLow: LongWord;          // 文件大小，32 位以下
    CreationTime: TFileTime;    // 文件创建时间
    LastAccessTime: TFileTime;  // 文件访问时间
    LastWriteTime: TFileTime;   // 文件修改时间
    AlternateName: String;      // 文件短文件名 (可能为空)
    FindHandle: THandle;        // 内部使用
  end;

TFileTime 定义为:

  TFileTime = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

有效的文件属性是:

  FILE_ATTRIBUTE_READONLY
  FILE_ATTRIBUTE_HIDDEN
  FILE_ATTRIBUTE_SYSTEM
  FILE_ATTRIBUTE_DIRECTORY
  FILE_ATTRIBUTE_ARCHIVE
  FILE_ATTRIBUTE_DEVICE
  FILE_ATTRIBUTE_NORMAL
  FILE_ATTRIBUTE_TEMPORARY
  FILE_ATTRIBUTE_SPARSE_FILE
  FILE_ATTRIBUTE_REPARSE_POINT
  FILE_ATTRIBUTE_COMPRESSED
  FILE_ATTRIBUTE_OFFLINE
  FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
  FILE_ATTRIBUTE_ENCRYPTED
注释:

如果 FindFirst 返回 True，调用 FindNext 列举文件，然后 FindClose。

示例:

下列示例计数 Windows 系统目录的文件数。

var
  FilesFound: Integer;
  FindRec: TFindRec;
begin
  FilesFound := 0;
  if FindFirst(ExpandConstant('{sys}\*'), FindRec) then begin
    try
      repeat
        // Don't count directories
        if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
          FilesFound := FilesFound + 1;
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
  end;
  MsgBox(IntToStr(FilesFound) + ' files found in the System directory.',
    mbInformation, MB_OK);
end;


Pascal 脚本: FindNext

语法:

function FindNext(var FindRec: TFindRec): Boolean;

描述:

接收有关匹配调用 FindFirst 后的下一个文件的信息。如果成功则返回 True。

示例:

要获取示例，查看帮助文档中的 FindFirst。


Pascal 脚本: FindWindowByClassName

语法:

function FindWindowByClassName(const ClassName: String): HWND;

描述:

获取类名与指定字串匹配的顶层窗口的句柄。这个函数不搜索子窗口，且不执行区分大小写搜索。如果没有找到窗口则返回 0。


Pascal 脚本: FindWindowByWindowName

语法:

function FindWindowByWindowName(const WindowName: String): HWND;

描述:

获取窗口名与指定字串匹配的顶层窗口的句柄。这个函数不搜索子窗口 ，且不执行区分大小写搜索。如果没有找到窗口则返回 0。


Pascal 脚本: FmtMessage

语法:

function FmtMessage(const S: String; const Args: array of String): String;

描述:

用指定的字串声明格式化字串 S。格式字串的的 %1 将替换为 Args 排列中的第一个值，%2 将替换为第二个值，以此类推。%% 将替换为 %。

注释:

如果 %-specifier 引用一个不存在的声明，它将返回未改变。不会出现异常。

示例:
var
  S: String;
begin
  S := FmtMessage('%1 version %2 will be installed.', ['My Program', '1.0']);
  // S = 'My Program version 1.0 will be installed.'

  S := FmtMessage(SetupMessage(msgNotOnThisPlatform), ['Windows 2000']);
  // S = 'This program will not run on Windows 2000.'
end;


Pascal 脚本: FontExists

语法:

function FontExists(const FaceName: String): Boolean;

描述:

如果指定的字体名称已安装在当前系统则返回 True。


Pascal 脚本: ForceDirectories

语法:

function ForceDirectories(Dir: string): Boolean;

描述:

在指定的目录中一次性创建所有目录。如果路径中的开始目录存在，但最后一个目录不存在，ForceDirectories 只创建不存在的目录。如果完成返回 True，否则返回 False。


Pascal 脚本: Format

语法:

function Format(const Format: string; const Args: array of const): string;

描述:

格式化在打开排列 Args 中的声明序列。格式化受格式字串格式约束；其结果返回一个字串。

如果指定了无效的格式字串、声明太少或声明的类型错误，则会出现异常。

示例:
var
  S: String;
  I: Integer;
begin
  S := Format('找到 %d 个文件', [10]);
  // S = '找到 10 个文件'

  S := Format('文件名: %s', ['file.txt']);
  // S = '文件名: file.txt'

  I := 64;
  S := Format('十六进制是 %d，填补到 8 位数: %.8x', [I, I]);
  // S = '十六进制是 64，填补到 8 位数: 00000040'
end;


Pascal 脚本: FreeDLL

语法:

function FreeDLL(const DLLHandle: Longint): Boolean;

描述:

使用由 LoadDLL 返回的 DLL 句柄撤销一个指定的 DLL 的载入。

注释:

不赞成使用这个函数，查阅 使用 DLL 主题。


Pascal 脚本: GenerateUniqueName

语法:

function GenerateUniqueName(Path: String; const Extension: String): String;

描述:

生成指定的路径中带指定扩展名的文件的唯一文件名。


Pascal 脚本: GetActiveOleObject

语法:

function GetActiveOleObject(const ClassName: string): Variant;

描述:

查阅使用 COM 自动操作对象主题。


Pascal 脚本: GetArrayLength

语法:

function GetArrayLength(var Arr: Array): Longint;

描述:

获取Array长度。


Pascal 脚本: GetCmdTail

语法:

function GetCmdTail: String;

描述:

以单字符形式返回所有通到安装程序或卸载程序的所有命令行参数。


Pascal 脚本: GetComputerNameString

语法:

function GetComputerNameString: String;

描述:

Retrieves the name of the computer the Setup or Uninstall program is running on (as returned by the Windows GetComputerName function).


Pascal 脚本: GetCurrentDir

语法:

function GetCurrentDir: String;

描述:

返回包含当前目录名的字串。


Pascal 脚本: GetDateTimeString

语法:

function GetDateTimeString(const DateTimeFormat: String; const DateSeparator, TimeSeparator: Char): String;

描述:

以字符串形式返回当前日期和时间。
用指定的格式返回当前日期和时间为一个字符串。支持下列格式:

d 不带前导零 (1-31) 用数字显示天。
dd 带一个前导零 (01-31) 用数字显示天。
ddd 以缩写显示天 (Sun-Sat)。
dddd 显示天的完整名 (Sunday-Saturday)。
ddddd 用系统短日期格式显示日期。
dddddd 用系统长日期格式显示日期。
m 不带前导零 (1-12) 显示月。
如果直接指定 m，然后指定 h 或 hh，用分钟代替月显示。
mm 带一个前导零 (01-12) 显示月。
如果直接指定 m，然后指定 h 或 hh，用分钟代替月显示。
mmm 以缩写显示月 (Jan-Dec)。
mmmm 显示月的完整名 (January-December)。
yy 用两位数显示年 (00-99)。
yyyy 用四位数显示年 (0000-9999)。
h 不带前导零 (0-23) 用数字显示小时。
hh 带一个前导零 (00-23) 用数字显小时。
n 不带前导零 (0-59) 用数字显示分钟。
nn 带一个前导零 (00-59) 用数字显示分钟。
s 不带前导零 (0-59) 用数字显示秒。
ss 带一个前导零 (00-59) 用数字显示秒。
t 用系统短时间格式显示时间。
tt 用系统长时间格式显示时间。
am/pm 用 12 小时制显示前面所述 h 或 hh。
中午前任何小时显示“am”，中午后任何小时显示“pm”。
am/pm 指定可以使用小写、大写或混合大小写，并作为结果显示。
a/p 用 12 小时制显示前面所述 h 或 hh。
中午前任何小时显示“a”，中午后任何小时显示“p”。
a/p 指定可以使用小写、大写或混合大小写，并作为结果显示。
/ 用 DateSeparator 参数显示日期分隔符。
如果 DateSeparator 设置为 #0，将用系统日期分隔符替换。
: 用 TimeSeparator 参数显示时间分隔符。
如果 TimeSeparator 设置为 #0，将用系统时间分隔符替换。
'xx'/"xx" 附在单或双引号中的字符显示，不显示格式。

格式指定可以用大写，也可以用小写--两者生成相同的结果。

示例:
GetDateTimeString('ddddd', #0, #0);
GetDateTimeString('ddddd tt', #0, #0);
GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':');


Pascal 脚本: GetEnv

语法:

function GetEnv(const EnvVar: String): String;

描述:

获取指定的环境变量值。


Pascal 脚本: GetExceptionMessage

语法:

function GetExceptionMessage: String;

描述:

返回与当前排除关联的消息。这个函数只从排除段内部或从排除段调用的函数中调用。

注释:

排除消息生成不用句点结束，在这个函数结果添加到 AddPeriod。

示例:
var
  I: Integer;
begin
  I := 1;
  try
    // 下列行将提出“Division by zero”排除
    I := I div 0;
  except
    // 捕获排除，用它进行处理，并继续
    MsgBox('我们监视到这个排除:' + AddPeriod(GetExceptionMessage),
      mbError, MB_OK);
  end;
end;


Pascal 脚本: GetIniBool

语法:

function GetIniBool(const Section, Key: String; const Default: Boolean; const Filename: String): Boolean

描述:

从 INI 文件中读取一个布尔值。


Pascal 脚本: GetIniInt

语法:

function GetIniInt(const Section, Key: String; const Default, Min, Max: Longint; const Filename: String): Longint;

描述:

从 INI 文件中读取一个长整数。如果长整数不在 Min/Max 值之间，则返回默认。如果 Min=Max，那么 Min/Max 值被忽略。


Pascal 脚本: GetIniString

语法:

function GetIniString(const Section, Key, Default, Filename: String): String;

描述:

从 INI 文件读取一个字符串。


Pascal 脚本: GetMD5OfFile

语法:

function GetMD5OfFile(const Filename: String): String;

描述:

获取指定文件的 MD5 校验值为一个字符串。失败时将显示一个意外。


Pascal 脚本: GetMD5OfString

语法:

function GetMD5OfString(const S: AnsiString): String;

描述:

以字符串形式获取指定字符串的 MD5 校验值。

示例:
var
  MD5: String;
begin
  MD5 := GetMD5OfString('Test');
  // MD5 = '0cbc6611f5540bd0809a388dc95a615b'
end;


Pascal 脚本: GetMD5OfUnicodeString

语法:

function GetMD5OfUnicodeString(const S: String): String;

描述:

以字符串形式获取指定字符串的 MD5 校验值。

Causes an internal error if called by non Unicode Setup or Uninstall.

示例:
var  MD5: String;begin  MD5 := GetMD5OfUnicodeString('Test');  // MD5 = '8e06915d5f5d4f8754f51892d884c477'end;


Pascal 脚本: GetOpenFileName

语法:

function GetOpenFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean;

描述:

显示一个用户选择文件时要用的对话框。如果用户选择了一个文件，返回为 True。选定的文件名返回到 FileName 字符串。

注释:

过滤示例: "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"

示例:
var
  Filename: String;
begin
  // 设置初始文件名
  Filename := '';
  if GetOpenFileName('打开', Filename, '',
     '文本文件 (*.txt)|*.txt|所有文件|*.*', 'txt') then
  begin
    // 完成，用户单击“确定”
    // Filename 包含选定的文件名
  end;
end;


Pascal 脚本: GetPreviousData

语法:

function GetPreviousData(const ValueName, DefaultValueData: String): String;

描述:

获取先前用 SetPreviousData 贮存的值。


Pascal 脚本: GetSaveFileName

语法:

function GetSaveFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean;

描述:

显示一个用户选择文件时要用的对话框。如果用户选择了一个文件，返回为 True。选定的文件名返回到 FileName 字符串。

注释:

过滤示例: "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"

示例:
var
  Filename: String;
begin
  // 设置初始文件名
  Filename := '';
  if GetSaveFileName('保存', Filename, '',
     '文本文件 (*.txt)|*.txt|所有文件|*.*', 'txt') then
  begin
    // 完成，用户单击“确定”
    // Filename 包含选定的文件名
  end;
end;


Pascal 脚本: GetSHA1OfFile

语法:

function GetSHA1OfFile(const Filename: String): String;

描述:

获取指定文件的 SHA1 校验值为一个字符串。失败时将显示一个意外。


Pascal 脚本: GetSHA1OfString

语法:

function GetSHA1OfString(const S: AnsiString): String;

描述:

以字符串形式获取指定字符串的 SHA1 校验值。

示例:
var
  SHA1: String;
begin
  SHA1 := GetSHA1OfString('Test');
  // SHA1 = '640ab2bae07bedc4c163f679a746f7ab7fb5d1fa'
end;


Pascal 脚本: GetSHA1OfUnicodeString

语法:

function GetSHA1OfUnicodeString(const S: String): String;

描述:

以字符串形式获取指定字符串的 SHA1 校验值。

Causes an internal error if called by non Unicode Setup or Uninstall.

示例:
var
  SHA1: String;
begin
  SHA1 := GetSHA1OfUnicodeString('Test');
  // SHA1 = '9ab696a37604d665dc97134dbee44cfe70451b1a'
end;


Pascal 脚本: GetShellFolder

语法:

function GetShellFolder(Common: Boolean; const ID: TShellFolderID): String;

描述:

获取指定 shell 文件夹的位置。如果 Common 为 True，并且用户有管理员权限，则返回 shell 文件夹位置的“公共”部分。失败时 (不太可靠但有可能)，返回一个空的字符串。

注释:

这是一个使用这个函数的小小理由。推荐你使用 ExpandConstant 函数代替获取外壳文件夹路径。

示例:
var
  Path: String;
begin
  Path := GetShellFolder(False, sfAppData);
  if Path <> '' then
  begin
    MsgBox('Application Data 路径 = ' + Path, mbInformation, MB_OK);
  end
  else
  begin
    // 处理失败
  end;
end;


Pascal 脚本: GetShellFolderByCSIDL

语法:

function GetShellFolderByCSIDL(const Folder: Integer; const Create: Boolean): String;

描述:

获取指定 shell 文件夹路径。文件夹指定 CSIDL 常量值 (完整的列表可以在 ShlObj.h 中找到)。如果创建是 True，该文件夹如果不存在则将被创建，失败时返回一个空的字符串。

注释:

推荐你在创建参数中总是指定 True，该函数如果在 CSIDL value 是无效的，但目录当前不存在的情况下会失败。(这是 Windows 的问题。)

示例:
const
  CSIDL_MYPICTURES = $0027;

...

var
  Path: String;
begin
  Path := GetShellFolderByCSIDL(CSIDL_MYPICTURES, True);
  if Path <> '' then
  begin
    MsgBox('我的图像路径 = ' + Path, mbInformation, MB_OK);
  end
  else
  begin
    // 处理失败
  end;
end;


Pascal 脚本: GetShortName

语法:

function GetShortName(const LongName: String): String;

描述:

返回指定的长文件名的短名字。如果长文件名的短名字未找到，返回长文件名。


Pascal 脚本: GetSpaceOnDisk

语法:

function GetSpaceOnDisk(const Path: String; const InMegabytes: Boolean; var Free, Total: Cardinal): Boolean;

描述:

返回指定的驱动器的用 MB 或字节表示的可用和合计磁盘空间数。Path 指定驱动器或检查 UNC 共享的目录，它可以是根目录 (例如 C:\) 或一个现有的子目录。InMegabytes 参数设置确定是否用字节或 MB 返回，如果成功则返回 True，返之返回 False。

注释:

用这个函数返回的单位最多 2147483647 (2^31-1)。因此如果 InMegaBytes 为 False，它将不能多于 2147483647 个字节。如果 InMegaBytes 为 True，将不能多于 2147483647 MB。

示例:
var
  Path: String;
  FreeMB, TotalMB: Cardinal;
begin
  // 获取并显示程序文件驱动器可用的空间 (用 MB)
  Path := ExpandConstant('{pf}');
  if GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then
  begin
    MsgBox('There are ' + IntToStr(FreeMB) + ' megabytes free on ' +
      Path, mbInformation, MB_OK);
  end
  else begin
    // 函数失败
  end;
end;
请查阅:

GetSpaceOnDisk64


Pascal 脚本: GetSpaceOnDisk64

语法:

function GetSpaceOnDisk64(const Path: String; var Free, Total: Int64): Boolean;

描述:

Returns the number of free and total bytes on a drive. Path specifies a directory on the drive or UNC share to check; it can be either the root (e.g. C:\ ) or an existing subdirectory. Returns True if successful, False otherwise.

注释:

Requires Unicode Inno Setup.

示例:
var
  Path: String;
  FreeBytes, TotalBytes: Int64;
begin
  // Get and display free bytes on the Program Files drive
  Path := ExpandConstant('{pf}');
  if GetSpaceOnDisk64(Path, FreeBytes, TotalBytes) then
  begin
    MsgBox('There are ' + IntToStr(FreeBytes) + ' bytes free on ' +
      Path, mbInformation, MB_OK);
  end
  else begin
    // the function failed
  end;
end;
请查阅:

GetSpaceOnDisk


Pascal 脚本: GetSystemDir

语法:

function GetSystemDir: String;

描述:

返回 Windows 系统目录的完整路径。如果 Windows 系统目录是根目录，办包含一个反斜杠符号。


Pascal 脚本: GetSysWow64Dir

语法:

function GetSysWow64Dir: String;

描述:

仅 64 位 Windows: 返回 SysWOW64 目录的完整路径。这是 32 位系统文件所处的真实目录。如果在 32 位 Windows 中调用这个函数或由于某些原因在 64 位 Windows 中调用时失败 (不太可能)，则返回空字串。

示例:
var
  S: String;
begin
  S := GetSysWow64Dir;
  // 必须检查结果 -- 如果没有 SysWOW64 目录则返回空字串
  if S <> '' then
    MsgBox('SysWOW64 目录: ' + S, mbInformation, MB_OK)
  else
    MsgBox('没有 SysWOW64 目录。', mbInformation, MB_OK);
end;


Pascal 脚本: GetTempDir

语法:

function GetTempDir: String;

描述:

返回带反斜杠符号的临时目录完整路径。由于操作系统的差异，这里不使用 Win32 函数。
根据下列步骤获取临时文件路径:
1. 通过 TMP 环境变量指定的路径。
2. 如果 TMP 未定义或如果 TMP 指定一个不存在的目录，按 TEMP 环境变量指定的目录。
3. 如果 TMP 和 TEMP 未定义或指定不存在的目录，则为 Windows 目录。


Pascal 脚本: GetUILanguage

语法:

function GetUILanguage: Integer;

描述:

返回当前用户使用的界面语言的标识 (LANGID)，这是 Windows 自身语言，或 Windows MUI 场合下使用的语言，用户界面语言在控制面板区域选项中选择。如果函数失败则返回 0 (不太可靠)。

注释:

查阅 获取语言标识列表。 [external link].

示例:
begin
  if GetUILanguage = $0804 then
  begin
    // 界面语言是简体中文
  end;

  // 你可以使用“and $3FF”提取首选语言标识
  if GetUILanguage and $3FF = $09 then
  begin
    // Matches any variant of English
  end;
end;


Pascal 脚本: GetUserNameString

语法:

function GetUserNameString: String;

描述:

取得当前登录到系统的用户名。


Pascal 脚本: GetVersionNumbers

语法:

function GetVersionNumbers(const Filename: String; var VersionMS, VersionLS: Cardinal): Boolean;

描述:

获取指定文件的文件版本号。


Pascal 脚本: GetVersionNumbersString

语法:

function GetVersionNumbersString(const Filename: String; var Version: String): Boolean;

描述:

获取指定文件的文件版本号。字符串形式。


Pascal 脚本: GetWinDir

语法:

function GetWinDir: String;

描述:

返回 Windows 目录的完整路径。如果 Windows 目录是根目录，办包含一个反斜杠符号。


Pascal 脚本: GetWindowsVersion

语法:

function GetWindowsVersion: Cardinal;

描述:

以单个整数形式返回 Windows 版本号。上面 8 位指定主版本号；下面 8 位指定辅版本号；最后 16 位指定构建号。例如，这个函数在 Windows 2000 中返回 $05000893 on，就是版本 5.0.2195。

要只获取主版本号，使用: "GetWindowsVersion shr 24"。要只获取辅版本号，使用: "(GetWindowsVersion shr 16) and $FF"。要只获取构建号，使用: "GetWindowsVersion 和 $FFFF"。

示例:
function IsWindowsXPOrLater: Boolean;
begin
  Result := (GetWindowsVersion >= $05010000);
end;
请查阅:

GetWindowsVersionEx


Pascal 脚本: GetWindowsVersionEx

语法:

procedure GetWindowsVersionEx(var Version: TWindowsVersion);

描述:

返回记录中有关 Windows 版本的扩展信息。

TWindowsVersion 定义为:

TWindowsVersion = record
   Major: Cardinal;             // 主版本号
   Minor: Cardinal;             // 副版本号
   Build: Cardinal;             // 构建号
   ServicePackMajor: Cardinal;  // 服务包主版本号
   ServicePackMinor: Cardinal;  // 服务包副版本号
   NTPlatform: Boolean;         // 如果是基于 NT 平台则为 True
   ProductType: Byte;           // 产品类型 (看下面)
   SuiteMask: Word;             // 安装的产品组件 (看下面)
end;

ProductType 对象可以是下列值中的一个:

  VER_NT_WORKSTATION
  VER_NT_DOMAIN_CONTROLLER
  VER_NT_SERVER

如果产品类型不能确定 (不一定可用)，它也可以是零。VER_NT_WORKSTATION 表示非服务器版本的 Windows (例如工作站、专业版或家庭版)。

SuiteMask 对象可以是下列值的组合:

  VER_SUITE_BACKOFFICE
  VER_SUITE_BLADE
  VER_SUITE_DATACENTER
  VER_SUITE_ENTERPRISE
  VER_SUITE_EMBEDDEDNT
  VER_SUITE_PERSONAL
  VER_SUITE_SINGLEUSERTS
  VER_SUITE_SMALLBUSINESS
  VER_SUITE_SMALLBUSINESS_RESTRICTED
  VER_SUITE_TERMINAL

VER_SUITE_PERSONAL 设置在比如家庭版的 Windows XP，VER_SUITE_BLADE 设置在网络版的 Windows Server 2003。

示例:

下面的例子告诉你可以怎样在某些版本的 Windows 中不接受安装，并在多个操作系统版梧检查服务包等级。(这些内容都不可能用 [Setup] 段 MinVersion 指令。)

function InitializeSetup: Boolean;
var
  Version: TWindowsVersion;
  S: String;
begin
  GetWindowsVersionEx(Version);

  // 不接受在家庭版的 Windows 中安装
  if Version.SuiteMask and VER_SUITE_PERSONAL <> 0 then
  begin
    SuppressibleMsgBox('这个程序不能安装于家庭版的 Windows。',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  // 不接受在域控制器中安装
  if Version.ProductType = VER_NT_DOMAIN_CONTROLLER then
  begin
    SuppressibleMsgBox('这个程序不能安装于域控制器。',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  // 在 Windows 2000，检查 SP4
  if Version.NTPlatform and
     (Version.Major = 5) and
     (Version.Minor = 0) and
     (Version.ServicePackMajor < 4) then
  begin
    SuppressibleMsgBox('在 Windows 2000 运行时，必须安装 Service Pack 4。',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  // 在 Windows XP 中，检查 SP2
  if Version.NTPlatform and
     (Version.Major = 5) and
     (Version.Minor = 1) and
     (Version.ServicePackMajor < 2) then
  begin
    SuppressibleMsgBox('在 Windows XP 运行时，必须安装 Service Pack 2。',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  Result := True;
end;


Pascal 脚本: GetWindowsVersionString

语法:

function GetWindowsVersionString: String;

描述:

以字符形式返回 Windows 版本号。例如，在 Windows 2000，这个函数返回“5.00.2195”。


Pascal 脚本: IDispatchInvoke

语法:

function IDispatchInvoke(Self: IDispatch; PropertySet: Boolean; const Name: String; Par: array of variant): variant;

描述:

Use IDispatchInvoke to access a COM Automation property or method whose name is a reserved word. 查阅 使用 COM 自动操作对象 主题。

示例:
var  AObject: Variant;  AType: String;begin  AObject := CreateOleObject('MyObject');  // Set a property named 'Type'  // Cannot use "AObject.Type := 'MyType';" because Type is a reserved word  IDispatchInvoke(AObject, True, 'Type', ['MyType']);  // Get a property or call a method named 'Type'  AType := IDispatchInvoke(AObject, False, 'Type', ['']);end;


Pascal 脚本: IncrementSharedCount

语法:

procedure IncrementSharedCount(const Is64Bit: Boolean; const Filename: String; const AlreadyExisted: Boolean);

描述:

在下列注册表键中增加或初始化指定文件的引用计数:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs

64 位版本的 Windows 有两个单独的 SharedDLLs 键，一个用于 64 位文件，另一个用于 32 位文件。如果 Is64Bit 为 True，将更新 64 位 SharedDLLs 键，否则将更新 32 位 SharedDLLs 键。这个参数的设置应该符号文件的进制。例如，如果它是一个位于 32 位系统目录的 32 位 DLL，你应该指定 False。在这种情况下，你还可以指定 Is64BitInstallMode，它将根据当前的安装模式确定需要打开哪个键。

如果文件已经存在 AlreadyExisted 为 True；如果文件的值在注册表中不存在，在这种情况下文件的初始引用计数是 2。(这个动作是根据 Microsoft 的需要)

如果注册表键不能打开进行写入，出现一个意外。


Pascal 脚本: IniKeyExists

语法:

function IniKeyExists(const Section, Key, Filename: String): Boolean;

描述:

如果指定的 INI 键存在，则返回 True。


Pascal 脚本: Insert

语法:

procedure Insert(Source: String; var Dest: String; Index: Integer);

描述:

合并来源到 S 中 S[index] 位置。


Pascal 脚本: InstallOnThisVersion

语法:

function InstallOnThisVersion(const MinVersion, OnlyBelowVersion: String): Boolean;

描述:

This function is deprecated. Returns True if an entry with the specified MinVersion and OnlyBelowVersion parameters should be installed. If an invalid version string is passed, an exception will be raised.

This function is provided for backward compatibility only, and may be removed in a future release. New scripts should use GetWindowsVersion or GetWindowsVersionEx instead.

注释:

Prior to Inno Setup 5.5.0, this function returned irInstall rather than a Boolean True value. irInstall is now defined as an alias for True.

示例:
// Old method, deprecated
function IsWindowsXPOrLater: Boolean;
begin
  Result := InstallOnThisVersion('0,5.1', '0,0');
end;

// New method
function IsWindowsXPOrLater: Boolean;
begin
  Result := (GetWindowsVersion >= $05010000);
end;
请查阅:


Pascal 脚本: IntToStr

语法:

function IntToStr(i: Int64): String;

描述:

The IntToStr function converts an 32-bit or 64-bit number into a string containing the decimal representation of that number.

64-bit numbers require Unicode Inno Setup.


Pascal 脚本: Is64BitInstallMode

语法:

function Is64BitInstallMode: Boolean;

描述:

如果安装程序或卸载程序运行于 64 位模式则返回 True，如果运行于 32 位模式则返回 False。

注释:

当返回 True 时，可以认为 IsWin64 也将返回 True。

示例:
begin
  if Is64BitInstallMode then
    MsgBox('安装程序处于 64 位模式', mbInformation, MB_OK)
  else
    MsgBox('安装程序处于 32 位模式', mbInformation, MB_OK);
end;
请查阅:


Pascal 脚本: IsAdminLoggedOn

语法:

function IsAdminLoggedOn: Boolean;

描述:

如果用管理员身份登录系统则返回 True。


Pascal 脚本: IsComponentSelected

语法:

function IsComponentSelected(const Components: String): Boolean;

描述:

如果选定了指定的组件则返回 True。可以在同一方式用一个组件参数指定多个组件。

示例:
begin
  if IsComponentSelected('helpfiles') then
    // the 'helpfiles' component is selected
end;


Pascal 脚本: IsIniSectionEmpty

语法:

function IsIniSectionEmpty(const Section, Filename: String): Boolean;

描述:

如果指定的 INI 段是空的，则返回 True。


Pascal 脚本: IsPowerUserLoggedOn

语法:

function IsPowerUserLoggedOn: Boolean;

描述:

如果用超级用户身份登录系统则返回 True。


Pascal 脚本: IsProtectedSystemFile

语法:

function IsProtectedSystemFile(const Filename: String): Boolean;

描述:

如果指定的文件受 Windows 文件保护系统保护 (因此它不能被替换) 则返回 True。


Pascal 脚本: IsTaskSelected

语法:

function IsTaskSelected(const Tasks: String): Boolean;

描述:

如果选定了指定的任务则返回 True。可以在同一方式用一个任务参数指定多个任务。

示例:
begin
  if IsTaskSelected('desktopicon') then
    // the 'desktopicon' task is selected
end;


Pascal 脚本: IsUninstaller

语法:

function IsUninstaller: Boolean;

描述:

如果卸载正在运行反安装，则返回 True，反之返回 False。


Pascal 脚本: IsWin64

语法:

function IsWin64: Boolean;

描述:

如果系统运行于提供 Inno Setup 执行 64 位安装任务所需的 API 支持的 64 位版本的 Windows 则返回 True。如果返回 False，你不能使用任何 Inno Setup 的只能用于 64 位的功能。

注释:

如果用户运行一个早期版本的 64 位 Windows，象不带 Service Pack 1 的 Itanium 版本 Windows Server 2003，这个函数有可能会返回 False。

这些老版本缺少 Inno Setup 所需的 API (例如 RegDeleteKeyEx)。

示例:
begin
  // 在使用 64 位功能前先检查 IsWin64
  // 避免在 32 位 Windows 运行时出现异常
  if IsWin64 then
  begin
    MsgBox('64 位程序文件位于:' +
      ExpandConstant('{pf64}'), mbInformation, MB_OK);
  end;
end;
请查阅:


Pascal 脚本: Length

语法:

function Length(s: String): Longint;

描述:

返回指定字串的长度。


Pascal 脚本: LoadDLL

语法:

function LoadDLL(const DLLName: String; var ErrorCode: Integer): Longint;

描述:

载入指定的 DLL。如果 DLL 成功载入则返回 DLL 句柄。如果返回零，那么发生指定错误的 ErrorCode。用 SysErrorMessage(ErrorCode) 获取错误的描述。

注释:

不赞成使用这个函数，查阅 使用 DLL 主题。


Pascal 脚本: LoadStringFromFile

语法:

function LoadStringFromFile(const FileName: String; var S: AnsiString): Boolean;

描述:

载入指定的二进制或非Unicode文本文件到指定的字符串。如果成功返回 True，否则返回 False。


Pascal 脚本: LoadStringsFromFile

语法:

function LoadStringsFromFile(const FileName: String; var S: TArrayOfString): Boolean;

描述:

载入指定的文本文件到指定的字串排列。如果成功返回 True，否则返回 False。


Pascal 脚本: Log

语法:

procedure Log(const S: String);

描述:

在安装程序日志文件中记录指定的字符。

注释:

如果记录未通过 /LOG 命令行参数启用，这个函数的调用将被忽略。请查阅安装命令行参数主题。


Pascal 脚本: Lowercase

语法:

function Lowercase(S: String): String;

描述:

返回 S 中相同文字的字符串, 但所有字母转换到小写字母。


Pascal 脚本: MakePendingFileRenameOperationsChecksum

语法:

procedure MakePendingFileRenameOperationsChecksum: String;

描述:

计算当前 PendingFileRenameOperations 注册表值。调用程序可以使用这个校验确定是否 PendingFileRenameOperations 或 WININIT.INI 被改变 (或者也可能被其它程序)。

示例:
var
  ChecksumBefore, ChecksumAfter: String;
begin
  ChecksumBefore := MakePendingFileRenameOperationsChecksum;
  // ...运行一个程序...
  ChecksumAfter := MakePendingFileRenameOperationsChecksum;
  if ChecksumAfter <> ChecksumBefore then
    // PendingFileRenameOperations 或 WININIT.INI 已更改
end;


Pascal 脚本: MinimizePathName

语法:

function MinimizePathName(const Filename: String; const Font: TFont; MaxLen: Integer): String;

描述:

Returns a minimized filename that will not take more than MaxLen pixels to display with the given font. The minimizing is done by replacing the middle part with '...' as needed.

示例:
MyLabel.Caption := MinimizePathName(MyPathName, MyLabel.Font, MyLabel.Width);


Pascal 脚本: ModifyPifFile

语法:

function ModifyPifFile(const Filename: String; const CloseOnExit: Boolean): Boolean;

描述:

改变 .pif 文件的“关闭时退出”设置。如果可以更改则返回 True。


Pascal 脚本: MsgBox

语法:

function MsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons: Integer): Integer;

描述:

显示一个消息框。Text 指定要显示的消息。Typ 指定在消息框中使用的图标。Buttons 指定消息框中的按钮。返回一个包含用户单击按钮后的 ID* 常量，或者如果函数失败则返回 0 (这应该不会出现，除非指定了无效的参数，或系统资源耗尽)。

注释:

TMsgBoxType 定义为:

TMsgBoxType = (mbInformation, mbConfirmation, mbError, mbCriticalError);

示例:
begin
  // 显示一个带“确定”按钮的简单消息框
  MsgBox('你好。', mbInformation, MB_OK);

  // 用是或否询问用户
  if MsgBox('你确认吗？', mbConfirmation, MB_YESNO) = IDYES then
  begin
    // 用户单击“是”
  end;

  // 用是或否询问用户，默认为否
  if MsgBox('你确认吗？', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then
  begin
    // 用户单击“是”
  end;
end;


Pascal 脚本: Null

语法:

function Null: Variant;

描述:

Returns a variant with a value of Null.


Pascal 脚本: OemToCharBuff

语法:

procedure OemToCharBuff(var S: AnsiString);

描述:

转换带字符集的字符串，从 OEM 定义字符集转换到 ANSI 字符串。


Pascal 脚本: OleCheck

语法:

procedure OleCheck(Result: HResult);

描述:

Use OleCheck to wrap any IUnknown based COM methods you call, so that if that method fails, an exception will be raised. 查阅 使用 COM 自动操作对象 主题。


Pascal 脚本: Ord

语法:

function Ord(C: Char): Byte;

描述:

用指定的字符串返回顺序值。


Pascal 脚本: PageFromID

语法:

function PageFromID(const ID: Integer): TWizardPage;

描述:

给出一个页面 ID，返回 TWizardPage 实例。如果需要则调用这个 ID。例如，你需要获取页面界面，但只知道它的 ID。

如果指定的页面 ID 无效，将出现一个意外。

示例:
var
  Page: TWizardPage;
begin
  Page := PageFromID(wpWelcome);
  Page.Surface.Color := clBlue;
end;


Pascal 脚本: PageIndexFromID

语法:

function PageIndexFromID(const ID: Integer): Integer;

描述:

Given a page ID, returns an position index. Call this if, for example, you want to check whether a page is positioned before a certain other page.

示例:
function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := PageIndexFromID(PageID) < PageIndexFromID(wpReady);
end;


Pascal 脚本: ParamCount

语法:

function ParamCount: Integer;

描述:

返回所有通到安装程序或卸载程序的所有命令行参数数。


Pascal 脚本: ParamStr

语法:

function ParamStr(Index: Integer): String;

描述:

返回通到安装程序或卸载程序的 Index-th 命令行参数。


Pascal 脚本: Pos

语法:

function Pos(SubStr, S: String): Integer;

描述:

在 S 内部，从左向右搜索 Substr，并返回一个在 S 中 Substr 的第一个字符索引整数值。
如果 Substr 未找到，Pos 返回零。


Pascal 脚本: PostBroadcastMessage

语法:

function PostBroadcastMessage(const Msg, WParam, LParam: Longint): Boolean;

描述:

显示指定的消息到系统的顶层窗口。立即返回。
指定的消息必须是唯一的。使用 RegisterWindowMessage 获取这种消息。


Pascal 脚本: PostMessage

语法:

function PostMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Boolean;

描述:

显示指定的消息到指定的窗口。立即返回。如果成功则返回 True。


Pascal 脚本: ProcessorArchitecture

语法:

function ProcessorArchitecture: TSetupProcessorArchitecture;

描述:

返回当前系统的原生处理器结构。

TSetupProcessorArchitecture 定义为:

TSetupProcessorArchitecture = (paUnknown, paX86, paX64, paIA64);

注释:

在 32 位的 Windows 中不会返回 64 位的处理器结构。因此，你可以使用这个函数在 32 位版本的 Windows 中侦测 64 位 AMD CPU；这将会返回 paX86。

如果安装程序或卸载程序不能识别处理器结构，则返回 paUnknown。它可以假定为至少可执行于 32 位代码的“未知”结构，或安装程序/卸载程序全部不能运行。

如果返回一个已知的 64 位处理器结构 (paIA64 或 ia64)，并且该结构未包含在 [Setup] 段 ArchitecturesInstallIn64BitMode 指令的值中，你不能假定 Inno Setup 的只能用于 64 位功能是可用的 -- 例如，{pf64} 常量。这些功能只能在 IsWin64 返回 True 时可用，它可能会在早期版本的缺少 Inno Setup 所需的 API 的 64 位 Windows 中返回 True。

因此，建议替换为:

  if ProcessorArchitecture = paIA64 then
    // perform some Itanium-specific install task that
    // involves expanding {pf64}

你应该加上 IsWin64 返回 True 的检查:

  if ProcessorArchitecture = paIA64 then
  begin
    if IsWin64 then
      // perform some Itanium-specific install task that
      // involves expanding {pf64}
    else
      // 不能使用 64 位功能，显示一条失败，请重试等错误消息。
  end;

如果你进行测试的ia64处理器结构包含在 [Setup] 段 ArchitecturesInstallIn64BitMode 指令的值内，那么它不需要检查 IsWin64，因为安装程序将在启动时自动执行检查，如果返回 False，则返回错误消息说明失败 (MissingWOW64APIs)。

示例:
var
  S: String;
begin
  case ProcessorArchitecture of
    paX86: S := 'x86';
    paX64: S := 'x64';
    paIA64: S := 'Itanium';
  else
    S := 'Unrecognized';
  end;
  MsgBox('你的处理器结构:' + S, mbInformation, MB_OK);
end;
请查阅:


Pascal 脚本: RaiseException

语法:

procedure RaiseException(const Msg: String);

描述:

用指定的消息提出一个排除。

示例:
begin
  RaiseException('这里是你的消息');

  // 下列行因为排除而不执行
  MsgBox('你不能看到这个内容。', mbInformation, MB_OK);
end;


Pascal 脚本: Random

语法:

function Random(const Range: Integer): Integer;

描述:

返回一个在范围 0 <= X < Range 内的随机数。


Pascal 脚本: RegDeleteKeyIfEmpty

语法:

function RegDeleteKeyIfEmpty(const RootKey: Integer; const SubkeyName: String): Boolean;

描述:

如果没有子键或值则删除指定的子键。如果完成返回 True，否则返回 False。


Pascal 脚本: RegDeleteKeyIncludingSubkeys

语法:

function RegDeleteKeyIncludingSubkeys(const RootKey: Integer; const SubkeyName: String): Boolean;

描述:

删除指定的键和所有子键。如果完成返回 True，否则返回 False。


Pascal 脚本: RegDeleteValue

语法:

function RegDeleteValue(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;

描述:

删除指定的值。如果完成返回 True，否则返回 False。


Pascal 脚本: RegGetSubkeyNames

语法:

function RegGetSubkeyNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;

描述:

打开指定的注册表键并读取子键名到指定的字符串排列名。如果成功返回 True，否则返回 False。

示例:
var
  Names: TArrayOfString;
  I: Integer;
  S: String;
begin
  if RegGetSubkeyNames(HKEY_CURRENT_USER, 'Control Panel', Names) then
  begin
    S := '';
    for I := 0 to GetArrayLength(Names)-1 do
      S := S + Names[I] + #13#10;
    MsgBox('List of subkeys:'#13#10#13#10 + S, mbInformation, MB_OK);
  end else
  begin
    // 添加处理失败的代码
  end;
end;


Pascal 脚本: RegGetValueNames

语法:

function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;

描述:

打开指定的注册表键，并读取它的值名到指定字符队列名。如果完成返回 True，否则返回 False。

示例:
var
  Names: TArrayOfString;
  I: Integer;
  S: String;
begin
  if RegGetValueNames(HKEY_CURRENT_USER, 'Control Panel\Mouse', Names) then
  begin
    S := '';
    for I := 0 to GetArrayLength(Names)-1 do
      S := S + Names[I] + #13#10;
    MsgBox('List of values:'#13#10#13#10 + S, mbInformation, MB_OK);
  end else
  begin
    // 添加处理失败的代码
  end;
end;


Pascal 脚本: RegisterExtraCloseApplicationsResource

语法:

function RegisterExtraCloseApplicationsResource(const DisableFsRedir: Boolean; const AFilename: String): Boolean;

描述:

Register an extra file which Setup should check for being in-use. Call RegisterExtraCloseApplicationsResource inside a RegisterExtraCloseApplicationsResources event function, once per file. Returns True if successful.


Pascal 脚本: RegisterServer

语法:

procedure RegisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean);

描述:

用指定的文件名注册 DLL/OCX。如果 Is64Bit 为 True，DLL/OCX 将被载入为 64 位映像，并按 64 位方式注册。如果 FailCriticalErrors 为 True，系统将显示致命错误处理消息对话框。如果不成功则出现异常。

示例:
begin
  // 注册位于系统目录的 hhctrl.ocx
  RegisterServer(Is64BitInstallMode, ExpandConstant('{sys}\hhctrl.ocx'), False);
end;

因为我们在这一个参数中指定了 Is64BitInstallMode，当安装程序在 64 位模式运行时，它将在 64 位系统目录注册 64 位的 OCX。否则，它将在 32 位系统目录注册 32 位的 OCX。


Pascal 脚本: RegisterTypeLibrary

语法:

procedure RegisterTypeLibrary(const Is64Bit: Boolean; const Filename: String);

描述:

用指定的文件名注册类型库。如果 Is64Bit 为 True，类型库将按 64 位方式注册。如果不成功则出现异常。

示例:
begin
  // 注册位于系统目录的 stdole2.tlb
  RegisterTypeLibrary(Is64BitInstallMode, ExpandConstant('{sys}\stdole2.tlb'));
end;

因为我们在这一个参数中指定了 Is64BitInstallMode，当安装程序在 64 位模式运行时，它将在 64 位系统目录注册 64 位的类型库。否则，它将在 32 位系统目录注册 32 位的类型库。


Pascal 脚本: RegisterWindowMessage

语法:

function RegisterWindowMessage(const Name: String): Longint;

描述:

RegisterWindowMessage 函数定义确保唯一通到系统的新建窗口消息。当调用 SendBroadcastMessage 或 PostBroadcastMessage 函数时，返回的消息值可以使用。


Pascal 脚本: RegKeyExists

语法:

function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;

描述:

如果指定的注册表键存在，则返回 True。

示例:
begin
  if RegKeyExists(HKEY_CURRENT_USER, 'Software\Jordan Russell\Inno Setup') then
  begin
    // 值存在
  end;
end;


Pascal 脚本: RegQueryBinaryValue

语法:

function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: AnsiString): Boolean;

描述:

询问指定的 REG_BINARY 注册表键/值，并返回值到 ResultStr。如果成功返回 True。当返回 False 时，不修改 ResultStr 值。


Pascal 脚本: RegQueryDWordValue

语法:

function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean;

描述:

询问指定的 REG_DWORD-type 注册表键/值，并返回值到 ResultDWord。如果成功返回 True。当返回 False 时，不修改 ResultDWord 值。

示例:
var
  HistoryBufferSize: Cardinal;
begin
  if RegQueryDWordValue(HKEY_CURRENT_USER, 'Console',
     'HistoryBufferSize', HistoryBufferSize) then
  begin
    // 读取值成功
    MsgBox('Console 历史缓存大小:' + IntToStr(HistoryBufferSize),
      mbInformation, MB_OK);
  end;
end;


Pascal 脚本: RegQueryMultiStringValue

语法:

function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;

描述:

询问指定的 REG_MULTI_SZ-type 注册表键/值，并返回值到 ResultStr。如果成功返回 True。当返回 False 时，不修改 ResultStr 值。

注释:

在 REG_MULTI_SZ-type 值中，每个字符串用空格 (#0) 隔开。


Pascal 脚本: RegQueryStringValue

语法:

function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;

描述:

询问指定的 REG_SZ 或 REG_EXPAND_SZ 注册表键/值，并返回值到 ResultStr。如果成功则返回 True。当返回 False 时，不更改 ResultStr。

示例:
var
  Country: String;
begin
  if RegQueryStringValue(HKEY_CURRENT_USER, 'Control Panel\International',
     'sCountry', Country) then
  begin
    // 读取值成功
    MsgBox('Your country: ' + Country, mbInformation, MB_OK);
  end;
end;


Pascal 脚本: RegValueExists

语法:

function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;

描述:

如果指定的注册表键和值存在，则返回 True。

示例:
begin
  if RegValueExists(HKEY_CURRENT_USER, 'Console', 'WindowSize') then
  begin
    // 值存在
  end;
end;


Pascal 脚本: RegWriteBinaryValue

语法:

function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName, Data: AnsiString): Boolean;

描述:

写入指定的 REG_BINARY-type 注册表值，如果完成则返回 True，反之返回 False。

示例:
begin
  RegWriteBinaryValue(HKEY_CURRENT_USER, 'Software\My Company\My Program',
    'BinaryTest', 'Whatever' + #1#2#3#4);
end;


Pascal 脚本: RegWriteDWordValue

语法:

function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal): Boolean;

描述:

写入指定的 REG_DWORD-type 注册表值，如果完成则返回 True，反之返回 False。

示例:
begin
  RegWriteDWordValue(HKEY_CURRENT_USER, 'Software\My Company\My Program',
    'ShowToolbar', 1);
end;


Pascal 脚本: RegWriteExpandStringValue

语法:

function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;

描述:

写入指定的 REG_EXPAND_SZ-type 注册表值。如果完成返回 True，否则返回 False。

示例:
begin
  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Company\My Program',
    'UserName', '%UserName%);
end;


Pascal 脚本: RegWriteMultiStringValue

语法:

function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;

描述:

写入指定的 REG_MULTI_SZ-type 注册表键/值，如果完成则返回 True，反之返回 False。

注释:

在 REG_MULTI_SZ-type 值中，每个字符串用空格 (#0) 隔开。

示例:
begin
  RegWriteMultiStringValue(HKEY_CURRENT_USER, 'Software\My Company\My Program',
    'MultiStringTest', 'String1' + #0 + 'String2' + #0 + 'String3');
end;


Pascal 脚本: RegWriteStringValue

语法:

function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;

描述:

写入指定的 REG_SZ-type 注册表键/值，如果完成则返回 True，反之返回 False。

注释:

如果值已经存在并且是 REG_EXPAND_SZ 类型，那么新值也将是 REG_EXPAND_SZ 类型，否则，将创建 a REG_SZ-type 值。

示例:
begin
  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Company\My Program',
    'UserName', ExpandConstant('{sysuserinfoname}'));
end;


Pascal 脚本: RemoveBackslash

语法:

function RemoveBackslash(const S: String): String;

描述:

删除反斜杠符号后返回指定的字符串。

注释:

这个函数的使用是有问题的，当工作于文件系统路径时使用 RemoveBackslashUnlessRoot 替换。


Pascal 脚本: RemoveBackslashUnlessRoot

语法:

function RemoveBackslashUnlessRoot(const S: String): String;

描述:

删除反斜杠符号后返回指定的字符串，除非该字符串指定驱动器根目录 (比如“C:\”或“\”)，这种情况下它保留一个斜杠。


Pascal 脚本: RemoveDir

语法:

function RemoveDir(const Dir: string): Boolean;

描述:

删除现有的空目录。如果新目录顺利删除则返回的值为 True，如果发生错误返回的值是 False。


Pascal 脚本: RemoveQuotes

语法:

function RemoveQuotes(const S: String): String;

描述:

与 AddQuotes 相反；删除字符串旁边的所有引号。


Pascal 脚本: RenameFile

语法:

function RenameFile(const OldName, NewName: string): Boolean;

描述:

尝试更改在 OldFile 中指定的文件或目录名到 NewFile。如果操作成功，RenameFile 返回 True。如果不能重命名文件 (例如，如果名为 NewName 的文件已经存在)，它将返回 False。


Pascal 脚本: RestartReplace

语法:

procedure RestartReplace(const TempFile, DestFile: String);

描述:

在下次 Windows 重新启动时重命名 TempFile 到 DestFile。如果 DestFile 已在，它将被覆盖。如果 DestFile 是 '' 那么 TempFile 将被删除。失败后将出现异常。


Pascal 脚本: RmSessionStarted

语法:

function RmSessionStarted: Boolean;

描述:

Returns True if a Restart Manager session was started, False otherwise.

请查阅:

CloseApplications


Pascal 脚本: SaveStringsToFile

语法:

function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;

描述:

保存指定的ASCII编码字符排列到指定的文件。如果 Append 是 True，并且指定的文件已经存在，它将附加到文件中，而不是覆盖。如果完成则返回 True，反之返回 False。

请查阅:

SaveStringsToUTF8File


Pascal 脚本: SaveStringsToUTF8File

语法:

function SaveStringsToUTF8File(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;

描述:

保存指定的UTF8编码字符排列到指定的文件。如果 Append 是 True，并且指定的文件已经存在，它将附加到文件中，而不是覆盖。如果完成则返回 True，反之返回 False。

Causes an internal error if called by non Unicode Setup or Uninstall.

请查阅:

SaveStringsToFile


Pascal 脚本: SaveStringToFile

语法:

function SaveStringToFile(const FileName, S: AnsiString; const Append: Boolean): Boolean;

描述:

保存指定的字符到指定的文件。如果 Append 是 True，并且指定的文件已经存在，它将附加到文件中，而不是覆盖。如果完成则返回 True，反之返回 False。

注释:

这个函数不在字符串前面或后面自动写入换行符。如果 Append 为 True，并且现有的文件没有用换行符结束，函数将能很好地附加到现有的最后一行。要避免这个问题，你可以在你的字符串前面或后面加上换行符字符:

SaveStringToFile('c:\filename.txt', #13#10 + '字符串' + #13#10, True);


Pascal 脚本: ScaleX

语法:

function ScaleX(X: Integer): Integer;

描述:

捕获 X 坐标或高度并返回到适合当前对话框字体大小的比例。如果对话框字体是 8 pt 的 MS Sans Serif，并且用户正运行的 Windows 在小字体模式 (96 dpi)，那么 X 返回不改变。


Pascal 脚本: ScaleY

语法:

function ScaleY(Y: Integer): Integer;

描述:

捕获 Y 坐标或高度并返回到适合当前对话框字体大小的比例。如果对话框字体是 8 pt 的 MS Sans Serif，并且用户正运行的 Windows 在小字体模式 (96 dpi)，那么 Y 返回不改变。


Pascal 脚本: SendBroadcastMessage

语法:

function SendBroadcastMessage(const Msg, WParam, LParam: Longint): Longint;

描述:

发送指定的消息到系统的顶层窗口。不返回，直到所有窗口处理程序已处理该消息。
指定的消息必须是唯一的。使用 RegisterWindowMessage 获取这种消息。


Pascal 脚本: SendBroadcastNotifyMessage

语法:

function SendBroadcastNotifyMessage(const Msg, WParam, LParam: Longint): Boolean;

描述:

还没有使用


Pascal 脚本: SendMessage

语法:

function SendMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Longint;

描述:

发送指定的消息到指定的窗口。不返回，直到窗口处理程序已程序该消息。


Pascal 脚本: SendNotifyMessage

语法:

function SendNotifyMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Boolean;

描述:

不等待目标窗口处理消息，发送指定的消息到指定的窗口。如果成功则返回 True。


Pascal 脚本: SetArrayLength

语法:

procedure SetArrayLength(var Arr: Array; I: Longint);

描述:

设置一个Array的长度。总是在访问Array的要素之前调用 SetArrayLength。


Pascal 脚本: SetCurrentDir

语法:

function SetCurrentDir(const Dir: string): Boolean;

描述:

设置当前目录。如果当前目录改变完成则返回值是True，如果发生错误则返回 False。


Pascal 脚本: SetIniBool

语法:

function SetIniBool(const Section, Key: String; const Value: Boolean; const Filename: String): Boolean;

描述:

写入一个布尔数到 INI 文件。


Pascal 脚本: SetIniInt

语法:

function SetIniInt(const Section, Key: String; const Value: Longint; const Filename: String): Boolean;

描述:

写入一个长整数到 INI 文件。


Pascal 脚本: SetIniString

语法:

function SetIniString(const Section, Key, Value, Filename: String): Boolean;

描述:

在 INI 文件中写入一个字串。


Pascal 脚本: SetLength

语法:

procedure SetLength(var S: String; L: Longint);

描述:

设置字符长度。


Pascal 脚本: SetNTFSCompression

语法:

function SetNTFSCompression(const FileOrDir: String; Compress: Boolean): Boolean;

描述:

改变文件或目录的NTFS压缩状态。如果成功返回 True。

注释:

If a directory is specified, the compression state of any files present in the directory will not be changed.


Pascal 脚本: SetPreviousData

语法:

function SetPreviousData(const PreviousDataKey: Integer; const ValueName, ValueData: String): Boolean;

描述:

设置一个稍后可以用 GetPreviousData 恢复的值。. 调用 RegisterPreviousData 同倍的 SetPreviousData 事件函数。


Pascal 脚本: SetupMessage

语法:

function SetupMessage(const ID: TSetupMessageID): String;

描述:

返回指定的消息值。

示例:
var
  S: String;
begin
  S := SetupMessage(msgButtonNext);
  // S now equals '&Next >'
end;


Pascal 脚本: ShellExec

语法:

function ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;

描述:

打开指定的文件，或执行由 Verb 指定的其它动作。文件名可以是可执行文件、文档文件或文件夹。使用 Wait 指定 InstExec 是否应该立即返回或等待，直到可执行文件终止或空闲。如果指定的文件已执行则返回 True，否则返回 False。如果返回 True 并且 Wait 是 WaitUntilTerminated，那么 ResultCode 返回执行的文件的退出代码。如果返回 False，那么 ResultCode 指定遇到的错误。使用 SysErrorMessage(ResultCode) 获取错误描述。

注释:

TExecWait 定义为:

TExecWait = (ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle);

Note that passing a Wait value other than ewNoWait will have no effect if a new process isn't spawned (for example, if the file is opened inside an already-running instance of the program that handles the file type).

示例:
var
  ErrorCode: Integer;
begin
  if not ShellExec('', ExpandConstant('{app}\filename.rtf'),
     '', '', SW_SHOW, ewNoWait, ErrorCode) then
  begin
    // 如果需要处理失败
  end;
end;
请查阅:

ShellExecAsOriginalUser


Pascal 脚本: ShellExecAsOriginalUser

语法:

function ShellExecAsOriginalUser(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;

描述:

Opens the specified file or performs another action specified by Verb, using the (normally non-elevated) credentials of the user that started Setup initially. See ShellExec and the [Run] section flag runasoriginaluser for more information.

注释:

This function is not supported at uninstall time.

In very unusual failure cases (e.g. if the initial Setup process died unexpectedly), it is possible for this function to raise an exception instead of just returning False.


Pascal 脚本: ShowExceptionMessage

语法:

procedure ShowExceptionMessage;

描述:

在一个消息框中显示与当前排除关联的消息。这个函数只从排除段内部或从排除段调用的函数中调用。

注释:

如果已启用日志功能 (通过 /LOG 切换)，当前消息将记录到日志开头。

示例:
var
  I: Integer;
begin
  I := 1;
  try
    // 下列行将提出一个“Division by zero”排除
    I := I div 0;
  except
    // 监视排除，显示它并继续
    ShowExceptionMessage;
  end;
end;


Pascal 脚本: Sleep

语法:

procedure Sleep(const Milliseconds: LongInt);

描述:

用指定的时间间隔延缓安装程序或卸载程序执行。


Pascal 脚本: StringChange

语法:

function StringChange(var S: String; const FromStr, ToStr: String): Integer;

描述:

This function is deprecated. It is equivalent to calling StringChangeEx with the SupportMBCS parameter set to False.


Pascal 脚本: StringChangeEx

语法:

function StringChangeEx(var S: String; const FromStr, ToStr: String; const SupportDBCS: Boolean): Integer;

描述:

改变所有在 S 中出现的 FromStr 到 ToStr。If SupportDBCS is True (recommended unless you require binary safety), double-byte character sequences in S are recognized and handled properly. Otherwise, the function behaves in a binary-safe manner. Returns the number of times FromStr was matched and changed.

注释:

When working with strings containing paths or filenames, be sure to pass True in the SupportDBCS parameter. Otherwise, paths with Chinese, Japanese, or Korean characters may be corrupted.

示例:
var
  S: String;
begin
  S := ExpandConstant('{commonappdata}');
  // S = 'C:\Documents and Settings\All Users\Application Data'

  StringChangeEx(S, '\', '/', True);
  // S = 'C:/Documents and Settings/All Users/Application Data'
end;


Pascal 脚本: StringOfChar

语法:

function StringOfChar(c: Char; I : Longint): String;

描述:

返回一个所有设置到字符 C 中的长度为 I 的字串。


Pascal 脚本: StringToGUID

语法:

function StringToGUID(const S: String): TGUID;

描述:

StringToGUID converts the string representation of a GUID into a 'real' GUID. An exception will be raised upon failure. 查阅 使用 COM 自动操作对象 主题。


Pascal 脚本: StrToInt

语法:

function StrToInt(s: string): Longint;

描述:

StrToInt 函数转换通到 S 中的字符串为数字。

注释:

推荐用 StrToIntDef 代替 StrToInt。


Pascal 脚本: StrToInt64

语法:

function StrToInt64(s: string): Int64;

描述:

The StrToInt64 function converts the string passed in S into a 64-bit number.

Requires Unicode Inno Setup.

注释:

Use of StrToInt64Def instead of StrToInt64 is recommended.


Pascal 脚本: StrToInt64Def

语法:

function StrToInt64Def(s: string; def: Int64): Int64;

描述:

The StrToInt64Def function converts the string passed in S into a 64-bit number. If S does not represent a valid 64-bit number, StrToInt returns the 64-bit number passed in Def.

Requires Unicode Inno Setup.


Pascal 脚本: StrToIntDef

语法:

function StrToIntDef(s: string; def: Longint): Longint;

描述:

StrToInt 函数转换字符串 S 到一个数字。如果 S 不能转换到一个有效的数字，StrToInt 返回 Def 中的数字。


Pascal 脚本: SuppressibleMsgBox

语法:

function SuppressibleMsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons, Default: Integer): Integer;

描述:

显示一个可禁止的消息框。如果消息框被禁止 (查阅安装命令行参数)，默认是返回的。否则，SuppressibleMsgBox 与标准的 MsgBox 相同。


Pascal 脚本: SysErrorMessage

语法:

function SysErrorMessage(ErrorCode: Integer): String;

描述:

返回一个连接到给予的操作系统错误代码的局部化的错误消息字符。


Pascal 脚本: Terminated

语法:

function Terminated: Boolean;

描述:

如果安装程序或卸载程序终止则返回 True，否则返回 False。


Pascal 脚本: Trim

语法:

function Trim(const S: string): String;

描述:

从给出的字符串 S 中去除起始和结束部分的空格和控制符。


Pascal 脚本: TrimLeft

语法:

function TrimLeft(const S: string): String;

描述:

从给出的字符串 S 中去除起始和结束部分的空格和控制符。


Pascal 脚本: TrimRight

语法:

function TrimRight(const S: string): String;

描述:

从给出的字符串 S 中去除起始和结束部分的空格和控制符。


Pascal 脚本: Unassigned

语法:

function Unassigned: Variant;

描述:

Returns a variant with no value assigned.


Pascal 脚本: UninstallSilent

语法:

function UninstallSilent: Boolean;

描述:

如果卸载正在静寂运行，则返回 True，反之返回 False。


Pascal 脚本: UnloadDLL

语法:

procedure UnloadDLL(Filename: String);

描述:

卸载由 [Code] 段用一个“external”关键字载入的指定的 DLL。这在你需要删除该 DLL 时有用。

在这种场合下，文件名和路径必须精确匹配导入的函数。在使用 UnloadDLL 之前你需要在你自己定义的文件名展开所有常量

如果函数导入使用“files:”前缀，请预先定义 {tmp} 常量值到文件名 (例如 ExpandConstant('{tmp}\filename.dll'))。

注释:

不推荐你使用这个函数，但如果你尝试调用一个已经卸载的 DLL 中的函数，该 DLL 将被重新载入。

示例:
procedure DllFunc; external 'DllFunc@{app}\MyDll.dll stdcall uninstallonly';

...

begin
  // 调用 DllFunc
  DllFunc;

  // 卸载 DLL
  UnloadDLL(ExpandConstant('{app}\MyDll.dll'));

  // 现在我们可以删除该 DLL
  DeleteFile(ExpandConstant('{app}\MyDll.dll'));
end;


Pascal 脚本: UnregisterFont

语法:

procedure UnregisterFont(const FontName, FontFilename: String);

描述:

撤销指定的界面和文件名的字体注册。


Pascal 脚本: UnregisterServer

语法:

function UnregisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean): Boolean;

描述:

用指定的文件名反注册 DLL/OCX。如果 Is64Bit 为 True，DLL/OCX 将被载入为 64 位映像，并按 64 位方式反注册。如果 FailCriticalErrors 为 True，系统将显示致命错误处理消息对话框。如果成功则返回 True，反之返回 False。


Pascal 脚本: UnregisterTypeLibrary

语法:

function UnregisterTypeLibrary(const Is64Bit: Boolean; const Filename: String): Boolean

描述:

用指定的文件名反注册类型库。如果 Is64Bit 为 True，类型库将按 64 位方式反注册。如果成功则返回 True，反之返回 False。


Pascal 脚本: Uppercase

语法:

function Uppercase(S: String): String;

描述:

返回 S 中相同文字的字符串, 但所有字母转换到大写字母。


Pascal 脚本: VarIsEmpty

语法:

function VarIsEmpty(const V: Variant): Boolean;

描述:

Returns True if the specified variant has no value assigned.


Pascal 脚本: VarIsNull

语法:

function VarIsNull(const V: Variant): Boolean;

描述:

Returns True if the specified variant has a value of Null assigned.


Pascal 脚本: VarType

语法:

function VarType(const V: Variant): TVarType;

描述:

Returns the type code of the specified variant.

The lower twelve bits of a variant type code (the bits defined by the varTypeMask bit mask) define the type of the variant. The varArray bit is set if the variant is an array of the given type. The varByRef bit is set if the variant is a reference to a value of the given type as opposed to an actual value.

The following variant type code constants are defined:

const
  varEmpty    = $0000;
  varNull     = $0001;
  varSmallint = $0002;
  varInteger  = $0003;
  varSingle   = $0004;
  varDouble   = $0005;
  varCurrency = $0006;
  varDate     = $0007;
  varOleStr   = $0008;
  varDispatch = $0009;
  varError    = $000A;
  varBoolean  = $000B;
  varVariant  = $000C;
  varUnknown  = $000D;
  varByte     = $0011;
  varString   = $0100;
  varTypeMask = $0FFF;
  varArray    = $2000;
  varByRef    = $4000;


Pascal 脚本: WizardDirValue

语法:

function WizardDirValue: String;

描述:

返回用户 选定的应用程序目录。

不同于 ExpandConstant('{group}')，如果在向导显示后、但用户选择目录之前调用，这个函数将失败，它将返回默认目录名。


Pascal 脚本: WizardGroupValue

语法:

function WizardGroupValue: String;

描述:

返回向导中的选择开始菜单文件夹页中编辑控制的内容。

不同于 ExpandConstant('{group}')，如果在向导显示后、但用户选择文件夹之前调用，这个函数将失败，它将返回默认文件夹名。


Pascal 脚本: WizardNoIcons

语法:

function WizardNoIcons: Boolean;

描述:

返回向导中的选择开始菜单文件夹页中的不创建开始菜单文件夹选择框中的当前设置。


Pascal 脚本: WizardSelectedComponents

语法:

function WizardSelectedComponents(const Descriptions: Boolean): String;

描述:

返回用户选定的逗号隔开组件名或描述列表。


Pascal 脚本: WizardSelectedTasks

语法:

function WizardSelectedTasks(const Descriptions: Boolean): String;

描述:

返回用户选定的逗号隔开任务名或描述列表。


Pascal 脚本: WizardSetupType

语法:

function WizardSetupType(const Description: Boolean): String;

描述:

返回用户选定的安装类型的名字或描述。


Pascal 脚本: WizardSilent

语法:

function WizardSilent: Boolean;

描述:

如果安装程序正在后台运行则返回 True，否则返回 False。


相同应用程序

“相同应用程序”引用共享相同 AppId 设置的两个单独的安装程序 (如果 AppId 未设置，或设置了相同的 AppName，以及相同的安装模式 (32 位或 64 或)。


Pascal 脚本: 布尔表达式

查阅 Pascal 脚本: 检查参数 获取关于布尔表达式的详细信息。


[Setup]: AllowCancelDuringInstall

有效值: | yes 或 no
默认值: | yes
描述:

将这个设置为 no，将“取消”按钮禁用并忽略在“关闭”按钮上单击，以防止用户在实际安装进程期间取消，这与在命令行编译安装程序时使用 /NOCANCEL 参数有相同效果。


[Setup]: AllowNetworkDrive

有效值: | yes or no
默认值: | yes
描述:

If set to no , the user will not be allowed to enter a network drive on the Select Destination Location page of the wizard.

To fully disallow installation to network locations, you must also set AllowUNCPath to no .


[Setup]: AllowNoIcons

有效值: | yes 或 no
默认值: | no
描述:

When set to yes , Setup will display a Don't create a Start Menu folder check box on the Select Start Menu Folder wizard page, which allows the user to skip creation of program shortcuts on the Start Menu.

Only [Icons] entries that have a Name parameter starting with {group}\ and no Tasks parameter are affected by default. To force the check box to have an effect on a particular [Icons] entry, add a Check: not WizardNoIcons parameter.


[Setup]: AllowRootDirectory

有效值: | yes 或 no
默认值: | no
描述:

当设为 no (默认)，在选择目标位置向导页中不允许用户输入一个根目录 (象“C:\”)。


[Setup]: AllowUNCPath

有效值: | yes 或 no
默认值: | yes
描述:

当设为 no 时，在选择目标位置向导页中将不允许用户输入一个 UNC 路径 (象“\\server\share”)，这是 Inno Setup 2.0.17 及早期版本的默认行为。

To fully disallow installation to network locations, you must also set AllowNetworkDrive to no .


[Setup]: AlwaysCreateUninstallIcon

描述:

在 3.0 版本中放弃。这个指令已经不支持了。如果你想创建卸载程序图标，在 [Icons] 段条目中的 Filename 参数中使用新的 {uninstallexe} 常量。


[Setup]: AlwaysRestart

有效值: | yes 或 no
默认值: | no
描述:

当设为 yes 时，安装程序不管是不是需要，总是在安装结束时提示用户重新启动系统，(例如，因为 [Files] 段台有带 restartreplace 标记的条目)。


[Setup]: AlwaysShowComponentsList

有效值: | yes 或 no
默认值: | yes
描述:

当这个指令设置为 yes，安装程序将总是显示定制安装的组件列表。如果这个设置为 no，安装程序将只在用户在类型列表中选择自定义类型时才显示组件列表。


[Setup]: AlwaysShowDirOnReadyPage

有效值: | yes 或 no
默认值: | no
描述:

当这个指令设置为 yes，安装程序将总是在准备安装向导页设置列表中显示选择的目录。如果这个指令设置为 no，安装程序在 DisableDirPage 设为 yes 的情况下，将不显示目录。


[Setup]: AlwaysShowGroupOnReadyPage

有效值: | yes 或 no
默认值: | no
描述:

当这个指令设置为 yes，安装程序将总是在准备安装向导页设置列表中显示选择的开始菜单文件夹名。如果这个指令设置为 no，安装程序在 DisableProgramGroupPage 设为 yes 的情况下，将不显示开始菜单文件夹名。

如果安装程序不创建开始菜单文件夹，这个指令将被忽略。


[Setup]: AlwaysUsePersonalGroup

有效值: | yes 或 no
默认值: | no
描述:

通常，如果用户有管理员权限，Inno Setup 的 {group} 常量指向所有用户开始菜单。如果这个指令设为 yes，它总是使用当前的用户配置文件。


[Setup]: AppComments

描述:

This string is displayed on the "Support" dialog of the 添加/删除程序 Control Panel applet. The value may include constants.

示例:
AppComments=Hello.


[Setup]: AppContact

描述:

This string is displayed on the "Support" dialog of the 添加/删除程序 Control Panel applet. The value may include constants.

示例:
AppContact=My Company Customer Support


[Setup]: AppCopyright

描述:

指定在 WindowVisible 设为 yes 的情况下，安装程序背景窗口右下角显示的版权消息。

如果 VersionInfoCopyright 指令的值未指定，那么这个指令的值也默认用于 VersionInfoCopyright 指令的值。

示例:
AppCopyright=Copyright (C) 1997-2005 My Company, Inc.


[Setup]: AppendDefaultDirName

有效值: | yes 或 no
默认值: | yes
描述:

对话框中显示文件夹时，安装程序自动在新的路径名最后附加 DefaultDirName。例如，如果 DefaultDirName 是“{pf}\My Program”，以及在单击选择时选择了“Z:\”，那么新的路径变成“Z:\My Program”。

设置这个指令为 no 可以禁用上述的动作。在设置为 no 时，在单击“浏览...”弹出的对话框中会出现“新建文件夹”按钮。


[Setup]: AppendDefaultGroupName

有效值: | yes 或 no
默认值: | yes
描述:

按默认，当在选择开始菜单文件夹向导页单击“浏览...”按钮在显示的对话框中显示文件夹时，安装程序自动在新的路径名最后附加 DefaultGroupName。例如，如果 DefaultGroupName 是“My Program”，以及在单击选择时选择了“Accessories”，那么新的路径变成“Accessories\My Program”。

设置这个指令为 no 可以禁用上述的动作。在设置为 no 时，在单击“浏览...”弹出的对话框中会出现“新建文件夹”按钮。


[Setup]: AppId

默认值:

AppName
描述:

AppId 值贮存于卸载日志文件 (unins???.dat) 内部，用来被后来的安装程序选中确定是否可以添加到一个特殊现有的卸载日志。如果现有的卸载日志 AppId 与当前安装的 AppId 相同，安装程序将只添加到卸载日志中。实际例子：比如你有两个安装程序 -- 一个是 My Program，另一个是 My Program 1.1 升级。要将 My Program 1.1 升级版本添加到 My Program 的卸载日志中，你应该在两个安装程序中设置相同的 AppId 值。

AppId 再在后面添加一个“_is1”，可以确定实际卸载注册表键名。(因此，如果 AppId 是“MyProgram”，该注册表键将被命名为“MyProgram_is1”。) 在 1.3 以前的 Inno Setup 版本根据 AppVerName 值中的键名。

AppId 不用于在任何地方显示，因此你可以自由定义它为你希望的内容。该值何以包含常量。

如果你使用了一个 {code:..} 常量，允许你的用户自定义 AppId，你在安装状态之前不需要返回实际值: 如果你需要，可以在早些时间返回一个空值或普通值。如果不是空值，这个值只用于尝试贮存先前的安装设置 (象用 [Setup] 段指令 UsePreviousAppDir 贮存的设置)。如果是空的，它不用于任何目标。

用常量求值得出的 AppId 长度不能超过 127 个字符。

示例:
AppId=MyProgram


[Setup]: AppModifyPath

描述:

当设置这个指令，将在添加/删除程序控制面板中显示一个单独的“修改”按钮。设置是可选的。这个值可以包含常量。

示例:
AppModifyPath="{app}\Setup.exe" /modify=1


[Setup]: AppMutex

描述:

这个指令用于防止用户在应用程序仍在运行的情况下安装新的应用程序版本，以及防止用户卸载正在运行的应用程序。它指定一个或多个已命名互斥中的名字 (多重互斥用逗号隔开)，安装程序和卸载程序在启动时检查该名字。如果没有退出，安装程序/卸载程序将显示消息: “[安装程序或卸载程序] 发现 [AppName] 当前正在运行，请现在关闭所有运行中的程序，请先关闭所有运行的窗口，然后单击“确定”继续，或按“取消”退出。”。这个值可以包含常量。

使用这个指令需要你添加代码到你的应用程序，这个应用程序是用你在这个指令中指定的名字创建一个互斥的应用程序。下面是在 Delphi、C 和 Visual Basic 创建一个互斥的示例。该代码将在应用程序启动时执行。

Delphi:

CreateMutex(nil, False, 'MyProgramsMutexName');

C:

CreateMutex(NULL, FALSE, "MyProgramsMutexName");

Visual Basic (由 Peter Young 提交):

'放在声明段:
Private Declare Function CreateMutex Lib "kernel32" _
        Alias "CreateMutexA" _
       (ByVal lpMutexAttributes As Long, _
        ByVal bInitialOwner As Long, _
        ByVal lpName As String) As Long

'放在启动代码 (Form_Load 或 Sub Main):
CreateMutex 0&, 0&, "MyProgramsMutexName"

你不需要的你的应用程序终止之后指明退出互斥对象，系统会自动执行。也不推荐你这么做，因为理想的互斥对象应该在进程完成终止后退出。

请注意互斥名比较在 Windows 中是区分大小写的。

To specify a mutex name containing a comma, escape the comma with a backslash.

查阅 MS SDK 帮助中的 CreateMutex 主题获取有关互斥的更多信息。

示例:
AppMutex=MyProgramsMutexName


[Setup]: AppName

描述:

这是一个必需的指令，用以指定你正在安装的应用程序的标题。不包含版本号，与 AppVersion 和/或 AppVerName 指令用于同样的目的。AppName 始终在安装过程中显示在安装屏幕的左上角以及安装向导中。这个值可以包含常量。

如果 AppId，VersionInfoDescription 和 VersionInfoProductName 指令的值未指定，这个指令的值也作为 VersionInfoDescription 的默认值。

示例:
AppName=My Program


[Setup]: AppPublisher

描述:

This string is displayed on the "Support" dialog of the 添加/删除程序 Control Panel applet. The value may include constants.

The value of this directive is also used as the default value for the VersionInfoCompany directive if it is not specified.

示例:
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/


[Setup]: AppPublisherURL

描述:

A link to the specified URL is displayed on the "Support" dialog of the 添加/删除程序 Control Panel applet. The value may include constants.

示例:
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/


[Setup]: AppReadmeFile

描述:

This string, which may be a URL, is displayed on the "Support" dialog of the 添加/删除程序 Control Panel applet. The value may include constants.

示例:
AppReadmeFile=http://www.example.com/readme.html


[Setup]: AppSupportPhone

描述:

This string is displayed on the "Support" dialog of the 添加/删除程序 Control Panel applet. The value may include constants.

示例:
AppSupportPhone=1-800-555-1212


[Setup]: AppSupportURL

描述:

A link to the specified URL is displayed on the "Support" dialog of the 添加/删除程序 Control Panel applet. The value may include constants.

示例:
AppSupportURL=http://www.example.com/support.html


[Setup]: AppUpdatesURL

描述:

A link to the specified URL is displayed on the "Support" dialog of the 添加/删除程序 Control Panel applet. The value may include constants.

示例:
AppUpdatesURL=http://www.example.com/updates.html


[Setup]: AppVerName

默认值:

AppName version AppVersion , localized according to the active language's NameAndVersion custom message
描述:

This directive specifies the name of the application plus its version number. The value of this directive is displayed on the Welcome page of Setup's wizard, and is used as the default title of the application's Add/Remove Programs entry (see UninstallDisplayName ). The value may include constants.

This directive is required if the AppVersion directive is not set.

示例:
AppVerName=My Program 1.5
AppVerName=My Program version 1.5
AppVerName={cm:NameAndVersion,My Program,1.5}


[Setup]: AppVersion

描述:

This directive specifies the version number of the application being installed. The value of this directive, which may include constants, is used in the default value for the AppVerName directive, and is displayed in the Version field of the application's Add/Remove Programs entry. It is also used to set the MajorVersion and MinorVersion values in the Uninstall registry key when possible.

This directive is required and cannot be empty if the AppVerName directive is not set.

示例:
AppVersion=1.5


[Setup]: ArchitecturesAllowed

有效值: | 一个或多个如下内容，以空格分隔: x86 x64 ia64
默认值: | (blank)
描述:

确切说明哪种处理器架构(s)允许安装程序在上面运行。如果这指令没被指定或者是空白的，安装将被允许在能执行它的32位代码的全部处理器架构上运行(including ones it doesn't recognize)。否则，if a user's processor architecture is not one of those specified in this directive, Setup will display an error message and exit。

如果你的应用程序的二进制代码都是32位和运行在用户模式，you should not change this directive from its default value (specifically, don't set it to x86), because normally such binaries will run without issue on the x64 and Itanium editions of Windows via the WOW64 emulator。

如果你安装任何32位设备驱动，你应该将此指令设定为 x86，由于32位设备驱动程序无法运行在64位 Windows。

如果你的应用程序的二进制构建成为 X64 或是 Itanium 架构，you should set this directive to either x64 或 ia64 respectively。

请查阅:
ArchitecturesInstallIn64BitMode


[Setup]: ArchitecturesInstallIn64BitMode

有效值: | 一个或多个如下内容，以空格分隔: x64 ia64
默认值: | (blank)
描述:

Specifies the 64-bit processor architecture(s) on which Setup should install in 64-bit mode. If this directive is not specified or is blank, Setup will always install in 32-bit mode。

Normally, you should not change this directive from its default value unless your application contains native 64-bit binaries。

Be sure you have read the 64-bit Installation Limitations topic before setting this directive。

If your application runs only on 64-bit processor architectures, you should set ArchitecturesAllowed to the same value as this directive to prevent Setup from running on 32-bit Windows。

Setup can only run in 64-bit mode on versions of Windows that provide the API support Inno Setup requires (e.g. RegDeleteKeyEx). All x64 editions provide the necessary APIs, however Itanium editions prior to Windows Server 2003 SP1 do not. If the user is running an older Itanium version of Windows, Setup will display a message (MissingWOW64APIs) recommending that the user install a service pack, and exit。

请查阅:
ArchitecturesAllowed


[Setup]: BackColor, BackColor2

有效值: | $bbggrr 结构的值，这里的 rr，gg 和 bb 分别指定红、绿、蓝的两个数字的亮度值 (用十六进制)，或者可以是下列预置颜色名中的一个: clBlack，clMaroon，clGreen，clOlive，clNavy，clPurple，clTeal，clGray，clSilver，clRed，clLime，clYellow，clBlue，clFuchsia，clAqua，clWhite。
默认值: | BackColor 用 clBlue， BackColor2 用 clBlack
描述:

BackColor 指令指定在安装程序窗口渐变背景顶部 (如果 BackColorDirection=lefttoright 则是左边) 使用的颜色，BackColor2 用指定用于底部 (或右边) 的颜色。

如果 BackSolid=yes，BackColor2 设置将被忽略。

示例:
BackColor=clBlue
BackColor2=clBlack

BackColor=$FF0000
BackColor2=$000000


[Setup]: BackColorDirection

有效值: | toptobottom 或 lefttoright
默认值: | toptobottom
描述:

确定安装程序窗口的渐变背景方向。如果 BackColorDirection 设为 toptobottom，它将从上到下渐变；如果设为 lefttoright，它将从左到右渐变。


[Setup]: BackSolid

有效值: | yes 或 no
默认值: | no
描述:

这用于指定在安装程序窗口中使用纯色背景还是渐变背景。如果设为 yes，背景是纯色的 (颜色用 BackColor 指定；BackColor2 被忽略。)。


[Setup]: ChangesAssociations

有效值: | yes 或 no
默认值: | no
描述:

当这个指令设为 yes，安装程序将在安装结束时告诉资源管理器刷新它的文件关联信息，并且在卸载完成后执行同样操作。

如果你的安装程序创建了文件关联，但没有将 ChangesAssociations 设为 yes，文件类型的正确图标很可能不能显示，直到用户注销或重新启动电脑。


[Setup]: ChangesEnvironment

有效值: | yes 或 no
默认值: | no
描述:

当这个指令设为 yes，at the end of the installation Setup will notify other running applications (notably Windows Explorer) that they should reload their environment variables from the registry。

if your installation creates or changes an environment variable but doesn't have ChangesEnvironment set to yes, the new/changed environment variable will not be seen by applications launched from Explorer until the user logs off or restarts the computer。


[Setup]: CloseApplications

有效值: | yes or no
默认值: | yes
描述:

If set to yes and Setup is not running silently, Setup will pause on the Preparing to Install wizard page if it detects applications using files that need to be updated by the [Files] or [InstallDelete] section, showing the applications and asking the user if Setup should automatically close the applications and restart them after the installation has completed.

If set to yes and Setup is running silently, Setup will always close and restart such applications, unless told not to via the command line.

Note: Setup uses the Windows Restart Manager [external link] API to close and restart applications, which is available only on Windows Vista and newer.

See also:
CloseApplicationsFilter
RegisterExtraCloseApplicationsResources
RestartApplications


[Setup]: CloseApplicationsFilter

有效值: | A list of file name wildcards, separated by commas
默认值: | *.exe,*.dll,*.chm
描述:

Controls which files Setup will check for being in use.

Setting this to *.* can provide better checking at the expense of speed.

See also:
CloseApplications
RestartApplications


[Setup]: Compression

有效值: | zip zip/1 through zip/9 bzip bzip/1 through bzip/9 lzma lzma/fast lzma/normal lzma/max lzma/ultra (在使用 ultra 之前先仔细阅读下面的警告) lzma/ultra64 (在使用 ultra64 之前先仔细阅读下面的警告) lzma2 lzma2/fast lzma2/normal lzma2/max lzma2/ultra ??(在使用 ultra64 之前先仔细阅读下面的警告) lzma2/ultra64 ??(review memory requirements below before using) none
默认值: | lzma2/max
描述:

这是指定要在文件中使用的压缩方法，以及压缩标准。较高标准压缩较好，但压缩的时间较长，而且在压缩/解压缩也需要更多内存。

zip 是属于 .zip 文件类型 (“deflate”) 的压缩方法。它在压缩和解压缩时最快，而且需要的内存也很低 (在标准 9 时压缩和解压缩小于 1 MB)，但与其它支持的压缩方法比较几乎不压缩。 zip , like lzma2 , 有一个独特的属性: 不象其它方法，它不展开未压缩的数据 (例如，已经压缩的文件)。如果未指定压缩标准，默认为 7。

bzip 是属于 bzip2 [external link] 压缩器的压缩方法。它的压缩要比 zip 压缩好，但通常在压缩和解压缩时较慢。在解压缩时必需 4 MB 以上内存，在压缩时需要 8 MB 以上内存。如果未指定压缩标准，它默认为 9。

lzma 是属于 7-Zip LZMA [external link] 压缩器的压缩方法。它比 zip 和 bzip 且有更高的的压缩率。可是，根据使用的压缩标准，它在压缩时很慢，且消耗更多的内存。下列表格概括了支持的 lzma 压缩标准在压缩和解压缩时所需的大概内存。如果未指定压缩标准，它默认为 max。

 | 解压缩 (字典大小) | 压缩
fast (worst) | 32 KB | 3 MB
normal | 2 MB | 26 MB
max (默认) | 8 MB | 95 MB
ultra | 32 MB | 372 MB
ultra64 (best) | 64 MB | 676 MB

lzma2 is the method of compression employed by the 7-Zip LZMA2 [external link] compressor. LZMA2 is a modified version of LZMA that offers a better compression ratio for uncompressible data (random data expands about 0.005%, compared to 1.35% with original LZMA), and optionally can compress multiple parts of large files in parallel, greatly increasing compression speed but with a possible reduction in compression ratio (see LZMANumBlockThreads ). Like LZMA, it can consume a lot of memory; see the above table. If a compression level isn't specified, it defaults to max .

none 表示不压缩。

请查阅:
SolidCompression
LZMAAlgorithm
LZMABlockSize
LZMADictionarySize
LZMAMatchFinder
LZMANumBlockThreads
LZMANumFastBytes
LZMAUseSeparateProcess


[Setup]: CompressionThreads

有效值: | auto 1 2 (或更高)
默认值: | auto
描述:

Controls whether the multi-threaded match finder is enabled on the LZMA and LZMA2 compressors. Enabling the multi-threaded match finder can speed up the compression process by 50% or more on systems with multiple processor cores, and 20% or more on systems with Intel processors featuring Hyper-Threading Technology.

A value of auto (the default) enables the multi-threaded match finder for all compression levels except fast , which doesn't support it.

A value of 1 always disables the multi-threaded match finder.

Values of 2 or higher are currently equivalent to auto .

Note that for the LZMA2 compressor, this directive only controls whether the multi-threaded match finder is used. To enable support for compressing multiple parts of large files in parallel, set LZMANumBlockThreads .

请查阅:
LZMANumBlockThreads


[Setup]: CreateAppDir

有效值: | yes 或 no
默认值: | yes
描述:

如果这个设置为 no，不创建应用程序目录，选择目标位置向导页将不显示，{app} 目录常量等同于 {win} 目录常量。当 CreateAppDir 设为 no，如果卸载功能是启用的，卸载数据文件将创建在系统的 Windows 目录中。


[Setup]: CreateUninstallRegKey

有效值: | yes 或 no , or a boolean expression
默认值: | yes
描述:

If this is set to no or to a boolean expression evaluating to False , Setup won't create an entry in the Add/Remove Programs Control Panel applet.

Setting this to no can be useful if your installation is merely an update to an existing application and you don't want another entry created, but don't want to the disable the uninstall features entirely (via Uninstallable=no ). In this case, UpdateUninstallLogAppName is usually set to no as well.

Setting this to a boolean expression can be useful if you want to offer the user a 'portable mode' option.

示例:
[Setup]
CreateUninstallRegKey=not IsTaskSelected('portablemode')

[Tasks]
Name: portablemode; Description: "Portable Mode"

请查阅:
Uninstallable


[Setup]: DefaultDialogFontName

默认值:

Tahoma
描述:

Specifies the name of the font that should be used in dialogs on languages that do not set DialogFontName in their [LangOptions] 区段 .

If the specified font name does not exist on the user's system or is an empty string, 8-point Microsoft Sans Serif or MS Sans Serif will be substituted.

Prior to the introduction of the DefaultDialogFontName directive in Inno Setup 5.3.9, the default dialog font name was always an empty string.


[Setup]: DefaultDirName

描述:

这个必需的指令值是用于选择目标位置向导面中的默认目录名，通常它用一个目录常量作为前缀。

如果 UsePreviousAppDir 为 yes (默认)，以及安装程序发现已经安装了一个相同应用程序的先前版本，它将用先前选定的目录代替默认目录名。

示例:
如果你使用:
DefaultDirName={sd}\MYPROG
在安装程序中，这将显示:
C:\MYPROG

如果你使用:
DefaultDirName={pf}\My Program
在安装程序中，这将显示:
C:\Program Files\My Program


[Setup]: DefaultGroupName

描述:

这个指令的值用是在向导的选择开始菜单文件夹页中使用的默认开始菜单文件夹名。如果这个指令是空白或未指定，它将用“默认”作为名字。

请记住，开始菜单文件夹是贮存为文字目录的，因此一些普通目录名不能使用的字符也不允许在开始菜单文件夹名字中使用。

示例:
DefaultGroupName=My Program


[Setup]: DefaultUserInfoName

默认值:

{sysuserinfoname}
描述:

指定在用户信息向导页中显示的默认名字。可以包含常量。


[Setup]: DefaultUserInfoOrg

默认值:

{sysuserinfoorg}
描述:

指定在用户信息向导页中显示的默认组织。可以包含常量。


[Setup]: DefaultUserInfoSerial

描述:

指定在用户信息向导页中显示的默认序列号。可以包含常量。


[Setup]: DirExistsWarning

有效值: | auto, yes，或 no
默认值: | auto
描述:

当设为 auto (默认设置)，如果用户在选择目标位置向导页中选择了已经存在的目录时，安装程序将显示“目录 ... 已经存在，你一定要安装到该目录吗”的消息，除非安装的是其它版本的相同应用程序，并且选择的目录与先前安装的目录相同 (仅在 UsePreviousAppDir 设为 yes，默认设置)。

当设为 yes，安装程序将在用户选择了一个现有的目录时显示“目录存在”的消息。

当设为 no，安装程序从不显示“目录存在”的消息。


[Setup]: DisableAppendDir

有效值: | yes 或 no
默认值: | no
描述:

在 4.1.2 版本中废弃。在 4.1.2 之前的 Inno Setup 版本中，有一个不同的目录选择界面，DisableAppendDir 指令用来控制它的动作。


[Setup]: DisableDirPage

有效值: | auto ,yes 或 no
默认值: | no
描述:

如果设置为 yes，安装程序将不显示选择目标位置向导页。

如果设置为 auto , at startup Setup will look in the registry to see if the 相同应用程序 is already installed, and if so, it will not show the 选择目标位置 向导页。

If the 选择目标位置 wizard page is not shown, it will always use the default directory name.

查阅 AlwaysShowDirOnReadyPage .


[Setup]: DisableFinishedPage

有效值: | yes 或 no
默认值: | no
描述:

如果设置为 yes，安装程序将不显示安装完成向导页，而是在安装完成后立即关闭安装程序。如果你在 [Run] 段执行一个使用 nowait 标记的程序，并且不希望在其它程序启动后安装完成窗口仍保留在背景中，这个设置可能有用。

请注意，如果编译器认为需要重新启动，或如果文件被分配到 [Setup] 段 InfoAfterFile 指令，DisableFinishedPage 指令被忽略。在这种场合下，安装完成向导页将仍显示。


[Setup]: DisableProgramGroupPage

有效值: | auto ,yes 或 no
默认值: | no
描述:

如果设置为 yes，安装程序将不显示选择开始菜单向导页。在这个场合中，它使用在 [Setup] 段用 DefaultGroupName 指令设置的文件夹名，或在没有指定的情况下用“(默认)”。

如果设置为 auto , at startup Setup will look in the registry to see if the 相同应用程序 is already installed, and if so, it will not show the 选择开始菜单 wizard page.

If the 选择开始菜单 wizard page is not shown, it will always use the default Start Menu folder name.

查阅 AlwaysShowGroupOnReadyPage .


[Setup]: DisableReadyMemo

有效值: | yes 或 no
默认值: | no
描述:

如果设置为 yes，安装程序将不在准备安装向导页的设置列表。否则显示列表并包含象选择安装类型及选择组件的信息。


[Setup]: DisableReadyPage

有效值: | yes 或 no
默认值: | no
描述:

如果设置为 yes，安装程序将不显示“准备安装”向导页。

When Setup is not running silently, this directive is ignored if no other wizard page before the 准备安装 wizard page has been shown yet.

Setting this to yes does not automatically change the caption of the 下一步 button on the new last pre-installation wizard page to 安装 . You must do so manually instead. For example, if the new last pre-installation wizard page is the 选择程序组 page:

示例:
[Setup]
DisableReadyPage=yes

[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectProgramGroup then
    WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)
  else
    WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
end;


[Setup]: DisableStartupPrompt

有效值: | yes 或 no
默认值: | yes
描述:

当设置为 yes，安装程序将不显示“这将安装... 你想继续吗？”的提示。

这个设置在如果 UseSetupLdr 设置为 no 时无效。


[Setup]: DisableWelcomePage

有效值: | yes or no
默认值: | no
描述:

如果设置为 yes，安装程序将不显示“欢迎”向导页。


[Setup]: DiskClusterSize

默认值:

512 (软盘的标准簇大小)
描述:

这用来指定磁盘媒介的族大小。安装程序编译器需要知道这个才能正确按每个磁盘的容量进行写入。

如果 [Setup] 段中使用了 DiskSpanning 指令使磁盘延伸未启用，这个指令将被忽略。


[Setup]: DiskSliceSize

有效值: | 262144 到 2100000000, 或 max
默认值: | max (2100000000)
描述:

这用来指定每个磁盘存贮 (SETUP-*.BIN 文件) 的最大字节数。通常这应该设置为磁盘媒介按 [Setup] 段中的 SlicesPerDisk 指令指定的值分割的合计可用字节数。默认为 1。

如果 [Setup] 段中使用了 DiskSpanning 指令使磁盘延伸未启用，这个指令将被忽略。

要优化写入 4.7 GB 可记录 DVD，使用:

SlicesPerDisk=3
DiskSliceSize=1566000000

要优化写入 8.5 GB (双层) 可记录 DVD，使用:

SlicesPerDisk=5
DiskSliceSize=1708200000

要优化写入 700 MB (80-分钟) 可记录 CD，使用:

SlicesPerDisk=1
DiskSliceSize=736000000

要优化写入 1.44MB 软盘, 使用:

SlicesPerDisk=1
DiskSliceSize=1457664


[Setup]: DiskSpanning

有效值: | yes 或 no
默认值: | no
描述:

如果设为 yes，磁盘延伸功能将被启用。将不是在 SETUP.EXE 内部贮存所有压缩的数据，编译器将它分割到多个 SETUP-*.BIN 文件 -- 适合复制到单张软盘、CD-ROM 或 DVD-ROM。每个生成 分割文件在它们的名字中包含一个数字，用来说明应该复制哪个一个磁盘。(例如，SETUP-2.BIN 应该放置在磁盘 2。) 生成的 SETUP.EXE 连同 SETUP-1*.BIN 文件总是在磁盘 1 中。

每张磁盘的每部分的大小和要创建的分割数由 [Setup] 段中的 DiskSliceSize 和 SlicesPerDisk 指令分别确定。其它磁盘延伸有关指令还包括 DiskClusterSize 和 ReserveBytes。

请注意，如果你的压缩程序大小超过 2,100,000,000 字节，你必需将这个指令设为 yes，即使你不想将安装程序放置在多个磁盘中。(如果所有的 SETUP-*.BIN 文件放在同一磁盘中，安装程序仍能正确执行。)


[Setup]: DontMergeDuplicateFiles

有效值:

yes 或 no
描述:

在 4.2.5 版本中废弃。改用 MergeDuplicateFiles。

MergeDuplicateFiles=no 等同于 DontMergeDuplicateFiles=yes。


[Setup]: EnableDirDoesntExistWarning

有效值: | yes 或 no
默认值: | no
描述:

当设为 yes 时，安装程序将在用户选择的目录存在时显示一个消息框。当设为 yes 时，通常你同时将设置 DirExistsWarning=no。


[Setup]: Encryption

有效值: | yes 或 no
默认值: | no
描述:

如果设置为 yes，编译到安装程序 (通过 [Files] 段条目) 的文件将使用 ARCFOUR 加密方法用一个来自 [Setup] 段指令密码值的 160 位密钥进行加密。

因为在一些国家的加密法律，加密支持不包含在主 Inno Setup 安装器，必须单独下载和安装。查阅 Inno Setup 下载 [external link] 页获取更多信息。

如果启用了加密，并且你在用户输入正确的密码前从 [Code] 段调用了 ExtractTemporaryFile 函数，函数将失败，除非在 [Files] 段条目中对于该文件使用了 noencryption 标记。

用于加密的密钥是一个 64 位随机的密码值的 160 位 SHA1 杂乱信息。


[Setup]: ExtraDiskSpaceRequired

默认值:

0
描述:

通常，显示的向导中的必须磁盘空间是根据 [Files] 段中的所有文件大小计算出现的，如果你想增加显示的磁盘空间用于其它目的，设置 ExtraDiskSpaceRequired 到你想增加的数字字节数。(1048576 字节 = 1 MB)


[Setup]: FlatComponentsList

有效值: | yes 或 no
默认值: | yes
描述:

当这个指令设置为 yes，安装程序将在组件列表中使用“平面化”选择框。否则，安装程序将使用“3D”选择框。


[Setup]: InfoAfterFile

描述:

指定“自述”文件名 (可选)，用 .txt 或 .rtf (富文本) 格式，用于在安装完成后显示。在运行安装程序编译器时，这个文件必须位于你的安装程序的来源目录，除非你指定了完整的路径，或用“compiler:”作为前缀，在这种情况下将在编译器目录下查找文件。

这个不同于在向导页中显示的文本 isreadme 文件，不是在一个单独的记事本窗口。

如果用户选择了 InfoAfterFile 参数设置的语言，这个指令实际上被忽略。查阅 [Languages] 段帮助文档获取更多信息。

示例:
InfoAfterFile=infoafter.txt


[Setup]: InfoBeforeFile

描述:

指定“自述”文件名 (可选)，用 .txt 或 .rtf (富文本) 格式，用于在选择目标目录页前显示。在运行安装程序编译器时，这个文件必须位于你的安装程序的来源目录，除非你指定了完整的路径，或用“compiler:”作为前缀，在这种情况下将在编译器目录下查找文件。

如果用户选择了 InfoBeforeFile 参数设置的语言，这个指令实际上被忽略。查阅 [Languages] 段帮助文档获取更多信息。

示例:
InfoBeforeFile=infobefore.txt


[Setup]: InternalCompressLevel

有效值: | none，或 LZMA 压缩级别 中的一个
默认值: | normal
描述:

这是指定用于安装程序内部结构压缩的 LZMA 压缩标准。一般来说，没有什么理由要改变 normal 设置。


[Setup]: LanguageDetectionMethod

有效值: | uilanguage, locale, none
默认值: | uilanguage
描述:

当设置为 uilanguage 时，安装程序将通过选择用户的“界面语言” (通过调用 GetUserDefaultUILanguage() 或在支持的 Windows 版本中从注册表读取) 确定要使用的默认语言。这是微软推荐的方法。“界面语言”是 Windows 自己使用的对话框，因此，在英语版的 Windows 中，将默认使用英语。当在简体中文的 Windows，将默认使用简体中文。在多语言版本的 Windows，默认将是当前选择的界面语言。

当设置为 locale 时，安装程序将调用 GetUserDefaultLangID() 确定默认使用的语言。这个函数返回控制面板区域选项中的“区域选项”设置。应该注意“区域选项”不是指影响语言，它只记录影响“数字，货币，时间和日期”。

当设置为 none 时，安装程序将使用在 [Languages] 段指定的作为默认语言的第一种语言。


[Setup]: LicenseFile

描述:

指定许可协议文件名 (可选)，用 .txt 或 .rtf (富文本) 格式，在用户选择程序目标目录前显示。在运行安装程序编译器时，这个文件必须位于你的安装程序的来源目录，除非你指定了完整的路径，或用“compiler:”作为前缀，在这种情况下将在编译器目录下查找文件。

如果用户选择了 LicenseFile 参数设置的语言，这个指令实际上被忽略。查阅 [Languages] 段帮助文档获取更多信息。

示例:
LicenseFile=license.txt


[Setup]: LZMAAlgorithm

有效值: | 0 or 1
默认值: | 0 if the LZMA compression level is set to fast 1 otherwise
描述:

Controls the algorithm used by the LZMA and LZMA2 compressors.

A value of 0 enables the fast algorithm.

A value of 1 enables the normal algorithm.


[Setup]: LZMABlockSize

有效值: | 1024 through 262144
默认值: | 4 * LZMADictionarySize
描述:

Controls the block size used by the LZMA2 compressor, in kilobytes, when LZMANumBlockThreads is set to 2 or higher.

Note that setting this too high can negate the benefits of using multiple block threads. Typically, the block size should be no more than the total size of your data divided by the number of block threads.

See also:
LZMADictionarySize
LZMANumBlockThreads


[Setup]: LZMADictionarySize

有效值: | 4 through 131072 (by default) 4 through 262144 if LZMAUseSeparateProcess is set to yes and running on 64-bit Windows (x64)
默认值: | 32 if the LZMA compression level is set to fast 2048 if the LZMA compression level is set to normal 8192 if the LZMA compression level is set to max 32768 if the LZMA compression level is set to ultra 65536 if the LZMA compression level is set to ultra64
描述:

Controls the dictionary size used by the LZMA and LZMA2 compressors, in kilobytes. A larger dictionary size can provide a better compression ratio at the expense of compression speed and memory requirements.

Review the memory requirements listed in the Compression topic before using.

If an "Out of memory" error is seen when a very large dictionary size is used, LZMAUseSeparateProcess may need to be set.

See also:
LZMABlockSize


[Setup]: LZMAMatchFinder

有效值: | HC or BT
默认值: | HC if the LZMA compression level is set to fast BT otherwise
描述:

Controls the match finder method used by the LZMA and LZMA2 compressors.

A value of HC enables the Hash Chain method with 4 hash bytes.

A value of BT enables the Binary Tree method with 4 hash bytes.

The Binary Tree method can provide a better compression ratio at the expense of compression speed.


[Setup]: LZMANumBlockThreads

有效值: | 1 through 32
默认值: | 1
描述:

When compressing a large amount of data, the LZMA2 compressor has the ability to divide the data into "blocks" and compress two or more of these blocks in parallel through the use of additional threads (provided sufficient processor power is available). This directive specifies the number of threads to use -- that is, the maximum number of blocks that the LZMA2 compressor may compress in parallel.

The memory required during compression when multiple block threads are used is roughly:

LZMANumBlockThreads * ( Normal memory usage + ( LZMABlockSize * 2))

Since LZMA2 (and LZMA) uses two threads for match-finding by default (see CompressionThreads ), there ideally should be two processor cores available for each block thread. Thus, to see the maximum benefit from a value of 2 , four cores are needed.

Dividing the data into multiple blocks can reduce the compression ratio, as the compressor cannot find matches across blocks. Using a large block size can help to mitigate this.

If an "Out of memory" error is seen when multiple block threads are enabled in combination with a compression level that uses a large dictionary size (such as ultra64 ), LZMAUseSeparateProcess may need to be set.

See also:
LZMABlockSize


[Setup]: LZMANumFastBytes

有效值: | 5 through 273
默认值: | 64 if the LZMA compression level is set to max , ultra , or ultra64 32 otherwise
描述:

Controls number of fast bytes used by the LZMA and LZMA2 compressors. A larger number of fast bytes can provide a better compression ratio at the expense of compression speed.


[Setup]: LZMAUseSeparateProcess

有效值: | yes , no , or x86
默认值: | no
描述:

Controls whether LZMA compression is performed inside the main compiler process or in a separate process.

Using a separate process for LZMA compression allows the compressor to allocate larger amounts of memory, which makes it possible for higher LZMADictionarySize and LZMANumBlockThreads settings to be used. Additionally, on 64-bit Windows (x64), a small increase in compression speed may be observed.

On 64-bit Windows (x64), there are no limitations on the amount of memory the compressor may use, as it runs inside a native 64-bit process. On 32-bit Windows, however, due to address space constraints, typically only about 1.5 GB is available for use by the compressor.

A value of yes enables the use of a 64-bit process on 64-bit Windows (x64), and a 32-bit process on 32-bit Windows.

A value of x86 enables the use of a 32-bit process only (normally only useful for debugging purposes).

A value of no disables the use of a separate process for LZMA compression.

Note that this directive only affects the compression of files specified in the [Files] section; compression of Setup's internal structures is always performed inside the main compiler process.


[Setup]: MergeDuplicateFiles

有效值: | yes 或 no
默认值: | yes
描述:

通常涉及到相同来源文件的两个文件条目将只被压缩和贮存一次。如果你的安装程序中有相同的文件，请在脚本中将它们指向相同来源文件，这可以大大缩小安装程序的大小。如果你想禁用这个功能，将这个指令设为 no。


[Setup]: MessagesFile

描述:

在 4.0 版本中废弃。现在已经不支持这个指令。改用新的 [Languages] 段指定一个自定义消息文件。


[Setup]: MinVersion

格式: | major . minor
默认值: | 5.0
描述:

这个指令让你指定你的软件运行必须的 Windows版本最小版本. 构建号和/或安全服务包级别可以包含在版本号中。

如果用户系统不适合最小版本需求，安装程序将出现一个错误消息并退出。

For compatibility with previous versions of Inno Setup, separate Windows 95/98/Me and Windows NT version numbers may be specified, separated by a comma. Example: MinVersion=0,5.0 . The Windows 95/98/Me version number (the first number) must be 0 , however, as Inno Setup no longer supports Windows 95/98/Me.


[Setup]: OnlyBelowVersion

格式: | major . minor
默认值: | 0
描述:

This directive lets you specify a minimum Windows版本 that your software will not run on. Specifying "0" means there is no upper version limit. 构建号和/或安全服务包级别 may be included.

这个指令本质上是和 MinVersion 对立的。

For compatibility with previous versions of Inno Setup, separate Windows 95/98/Me and Windows NT version numbers may be specified, separated by a comma. Example: OnlyBelowVersion=0,6.0 . The Windows 95/98/Me version number (the first number) isn't used, however, as Inno Setup no longer supports Windows 95/98/Me.


[Setup]: OutputBaseFilename

默认值:

setup
描述:

这个指令允许你给生成的安装程序文件分配其它名字，使你在运行安装程序编译器后不需要重命名它们。

示例:
OutputBaseFilename=MyProg100


[Setup]: OutputDir

默认值:

Output
描述:

为脚本指定“输出”目录。安装程序编译器将生成的 SETUP.* 文件放入该目录中。按默认，它在包含这个脚本的目录下创建一个名为“输出”的目录。

如果 OutputDir 不是一个完整的路径，它将被视为相对于 SourceDir 的位置。设置 OutputDir 为 . 将会使文件被放置的来源目录中。

示例:
OutputDir=c:\output


[Setup]: OutputManifestFile

描述:

当设置这个指令, the compiler will create a manifest file detailing information about the files compiled into Setup. The file will be created in the output directory unless a path is included。

示例:
OutputManifestFile=Setup-Manifest.txt


[Setup]: Password

描述:

指定你想在安装开始时提示用户的密码。

当使用了密码，你同时可以考虑设置 Encryption 为 yes，否则文件将被贮存为纯文本，对于一些人通过反向工程访问它们不能非常困难。

密码本身不贮存为很明了的文本；它贮存为 160 位 SHA1 杂乱信息，用 64 位随机数字伪装。 (注意: 当启用加密时，这个贮存的杂乱信息不用于加密密钥，密解将使用其它方法生成的杂乱信息。)


[Setup]: PrivilegesRequired

有效值: | none, poweruser, admin, 或 lowest
默认值: | admin
描述:

这个指令指定运行安装程序所需的最小用户权限:

On Windows Vista and later:

This directive affects whether elevated rights are requested (via a User Account Control dialog) when the installation is started。

如果设置为 admin (默认值) 或 poweruser，Setup will always run with administrative privileges. If Setup was started by an unprivileged user, Windows will ask for the password to an account that has administrative privileges, and Setup will then run under that account。

如果设置为 none，Setup will only run with administrative privileges if it was started by a member of the Administrators group. Do not use this setting unless you are sure your installation will run successfully on unprivileged accounts。

如果设置为 lowest，Setup will not request to be run with administrative privileges even if it was started by a member of the Administrators group. Do not use this setting unless you are sure your installation will run successfully on unprivileged accounts.

On earlier versions of Windows:

This directive specifies the minimum user privileges required to run the installation。

如果设置为 admin (默认值)，Setup will only run if the user is a member of the Administrators group. Otherwise, it will display the following message and exit: "You must be logged in as an administrator when installing this program."

如果设置为 poweruser，Setup will only run if the user is a member of the Administrators or Power Users groups. Otherwise, it will display the following message and exit: "You must be logged in as an administrator or as a member of the Power Users group when installing this program."

如果设置为 none，Setup will not check the user's group membership. Do not use this setting unless you are sure your installation will run successfully on unprivileged accounts.

如果设置为 lowest Setup will not check the user's group membership. Additionally, the uninstall info root key will always be HKEY_CURRENT_USER, and the "common" forms of the Shell Folder constants are mapped to the "user" forms, even if administrative privileges are available. Do not use this setting unless you are sure your installation will run successfully on unprivileged accounts.


[Setup]: ReserveBytes

默认值:

0
描述:

这用于指定在先一个磁盘中保留的最小可用字节数。如果要复制其它文件 (不是安装程序的一部分) 到第一张磁盘，象自述文件，这比较有用。

安装程序编译器取整这个数到最接近的簇数。

如果磁盘延伸通过 [Setup] 段的 DiskSpanning 的指令启用，这个指令被忽略。


[Setup]: RestartApplications

有效值: | yes or no
默认值: | yes
描述:

When set to yes and CloseApplications is also set to yes , Setup restarts the closed applications after the installation has completed.

Note: For Setup to be able to restart an application after the installation has completed, the application needs to be using the Windows RegisterApplicationRestart API function.

See also:
CloseApplications
CloseApplicationsFilter


[Setup]: RestartIfNeededByRun

有效值: | yes 或 no
默认值: | yes
描述:

当设为 yes 时，并且 [Run] 段文件队列中的一个文件正在执行，需要在下次重新启动后替换 (通过调用 MoveFileEx 或通过修改 wininit.ini)，安装程序将进行侦测并提示用户在安装结束时重新启动电脑。


[Setup]: SetupIconFile

描述:

为安装程序/卸载程序指定一个新的图标。当运行安装程序编译器时，该文件必须位于你的安装程序的来源目录，除非指定了完整路径，或路径名用“compiler:”作为前缀，在这种场合下，它会在编译器目录中查找文件。

示例:
SetupIconFile=MyProgSetup.ico


[Setup]: SetupLogging

有效值: | yes 或 no
默认值: | no
描述:

如果设置为 yes，安装程序总是创建一个日志文件。等同于在命令行使用 /LOG。


[Setup]: ShowComponentSizes

有效值: | yes 或 no
默认值: | yes
描述:

当这个指令设置为 yes，安装程序将在组件列表中显示组件大小。根据最大的组件，安装程序将用 KB 或 MB 为单位显示。


[Setup]: ShowLanguageDialog

有效值: | yes, no，或 auto
默认值: | yes
描述:

当设置为 yes 并且有多个[Languages] 段条目时，将显示一个选择语言对话框，让用户有机会选择安装程序的语言。查阅 [Languages] 段帮助文档获取更多信息。

当设置为 no 时，将从不显示对话框。

当设置为 auto 时，对话框只在安装程序不能找到匹配的语言标识时显示。

请查阅:
ShowUndisplayableLanguages
UsePreviousLanguage


[Setup]: ShowTasksTreeLines

有效值: | yes 或 no
默认值: | no
描述:

当这个指令设置为 yes，安装程序将显示在上级任务和子任务之间“树线”。


[Setup]: ShowUndisplayableLanguages

有效值: | yes 或 no
默认值: | no
描述:

按默认，languages that cannot be displayed on a user's system due to a code page mismatch are not listed in the Select Language dialog. For example, Russian text can only be displayed properly if the active code page is 1251; if the user isn't running code page 1251 they will not see Russian as an option。

如果这个指令设置为 yes，所有语言都载入到选择语言对话框中。To avoid user confusion, it is not recommended that you enable this in production installs。

This directive is ignored by Unicode Inno Setup .

请查阅:
ShowLanguageDialog


[Setup]: SignedUninstaller

有效值: | yes 或 no
默认值: | yes 如果SignTool已设置， 否则为 no
描述:

Specifies whether the uninstaller program (unins???.exe) should be deployed with a digital signature attached. When the uninstaller has a valid digital signature, Windows Vista users will not see an "unidentified program" warning when launching it from outside of Control Panel。

The first time you compile a script with this directive set to yes, a uniquely-named copy of the uninstaller EXE file will be created in the directory specified by the SignedUninstallerDir directive (which defaults to the output directory). Depending on the SignTool setting, you will either then be prompted to attach a digital signature to this file using an external code-signing tool (such as Microsoft's signtool.exe) or the file will be automatically signed on the fly. On subsequent compiles, the signature from the file will be embedded into the compiled installations' uninstallers.

Upgrading to a newer version of Inno Setup, or changing certain [Setup] section directives that affect the contents of the uninstaller EXE file (such as SetupIconFile), will cause a new file to be created under a different name。

If a file generated by this directive is deleted, it will be recreated automatically if necessary on the next compile。

When the uninstaller has a digital signature, Setup will write the messages from the active language into a separate file (unins???.msg). It cannot embed the messages into the EXE file because doing so would invalidate the digital signature。

When set to yes , any temporary self-copies used by Setup are digitally signed too.

Details on obtaining signing certificates and using code-signing tools are beyond the scope of this documentation。


[Setup]: SignedUninstallerDir

默认值:

OutputDir
描述:

指定 signed uninstaller 文件应该存放的目录。按默认，这样的文件都可以存储在输出目录。

单独的脚本文件可以共用 SignedUninstallerDir 设置。By setting up a common directory to hold signed uninstaller files。you won't have to re-sign the uninstaller each time you compile a new script file with a distinct OutputDir setting。

如果 SignedUninstallerDir 不是一个完全合格的路径，it will be treated as being relative to SourceDir。设置 SignedUninstallerDir 到 . 将导致文件被放在源目录里。

示例:
SignedUninstallerDir=C:\signeduninstallers


[Setup]: SignTool

有效值:

A name followed by zero or more parameters, space separated
描述:

Specifies the name and parameters of the Sign Tool to be used to digitally sign Setup (and Uninstall if SignedUninstaller is set to yes ). When Setup has a valid digital signature, users will not see an "unidentified program" warning when launching it.

The specified Sign Tool name and its command have to be defined in the compiler IDE (via the Tools | Configure Sign Tools... menu) or on the compiler command line (via the "/S" parameter), else an error will occur.

The following special sequences may be used in Sign Tool parameters and commands:

$f , replaced by the quoted file name of the file to be signed.

$p , replaced by the Sign Tool parameters.

$q , replaced by a quote, useful for defining a Sign Tool which contains quotes from the command line.

$$ , replaced by a single $ character.

示例:

Assume the following Sign Tools have been defined in the IDE:

mystandard=signtool.exe /x /y /d $qMy Program$q $fmycustom=signtool.exe $pbyparam=$p

then some examples would be:

SignTool=mystandardSignTool=mycustom /x /y /d $qMy Program$q $fSignTool=byparam signtool.exe /x /y /d $qMy Program$q $f

Note: for security reasons you should give a unique name to any Sign Tool set to $p , and not use a byparam name copied from this example. Consider what happens if you #include a third-party file that says:

SignTool=byparam format c:

Details on obtaining signing certificates and using code-signing tools are beyond the scope of this documentation.

注意: If you use a Sign Tool and your Setup contains a large amount of data, it is recommended that you enable Disk spanning with DiskSliceSize set to max . If you don't do this, the user might experience a long delay after starting Setup caused by Windows verifying the digital signature against all your data. There should be no security reduction from using disk spanning in practice: all files extracted from the unsigned .bin files undergo MD5 verification (provided dontverifychecksum isn't used). The SHA-1 hashes for this (along with all other metadata) are kept inside Setup's EXE, which is protected by the digital signature.


[Setup]: SlicesPerDisk

有效值: | 1 到 26
默认值: | 1
描述:

每个磁盘创建的 SETUP-*.BIN 文件数。如果设置为 1 (默认设置)，文件将被命名为 SETUP-x.BIN，x 是磁盘数。如果大于 1，文件将被命名为 SETUP-xy.BIN，其中 x 是磁盘数，y 是用于区别的标记。

为什么需要在默认值 1 的基础上增加这个数，是因为如果你的磁盘媒介大小超过 2,100,000,000 字节 -- [Setup] 段 DiskSliceSize 指令限制之上，例如，你的磁盘媒介容量为 3,000,000,000 字节，你可以通过设置 SlicesPerDisk 为 2 以及 DiskSliceSize 为 1500000000 字节来避免 2,100,000,000 字节磁盘大小限制 (由于文件系统的原因，多半更小)。


[Setup]: SolidCompression

有效值: | yes 或 no
默认值: | no
描述:

如果设为 yes，固实压缩将启用。这会使所有文件一次性压缩，而不是单独奔袭压缩。你果你的安装程序包含许多相同内容文件，如果文本文件，这样的相同内容的文件组合在 [Files] 段中，特别是这样将会使压缩率大大提高。

使用固实压缩的缺点是因为所有文件都被压缩到一个单个压缩流中，安装程序不能随便访问文件。这会降低一些性能。如果某些文件在用户系统中未被提取，它在减压缩下一个文件之前要将所有数据读取(到内存)。例如，当提取一个特殊文件并且用户单击重试，它不能仅搜索文件压缩数据的开头；由于所有的文件贮存在一个信息流中， 它将搜索整个文件。如果磁盘延伸启用，用户还要重新插入磁盘 1。

所以，在较大安装程序 (比方说大于 100 MB) 或在磁盘延伸安装时不推荐启用固实压缩。它起初设计用于在网络上发布下载时由于文件较小，需要的时间也少。


[Setup]: SourceDir

描述:

为脚本指定一个新的 来源目录。

示例:
SourceDir=c:\files


[Setup]: TerminalServicesAware

有效值: | yes 或 no
默认值: | yes
描述:

Specifies whether the compiler should set the "Terminal Services aware" flag in the headers of the Setup and Uninstall programs. This feature is new to version 5.1.7 and defaults to yes; previous versions never set the flag。

最重要的是，the "Terminal Services aware" flag affects the behavior of the {win} constant (and GetWinDir support function) on servers with Terminal Services installed in application mode。

如果使用该标记，{win} will consistently return the system's real Windows directory, typically "C:\WINDOWS", just as on systems that do not have Terminal Services installed。

如果没有使用标记，Windows 用兼容模式运行程序，where {win} may return either the real Windows directory or a user-specific Windows directory, such as "C:\Documents and Settings\<user name>\WINDOWS". Which one you get depends on the name of the program's EXE file and how it is launched. If the program is named setup.exe or install.exe, or if it is launched from the Add/Remove Programs Control Panel applet, then Windows will put the system in "install mode", which effectively makes the program (and all other programs running in the session) behave as if the "Terminal Services aware" flag were set. Otherwise, the program is treated as a legacy application and is given a private Windows directory. (This is true even if the user running the program has full administrative privileges.)

Because the behavior that results from setting TerminalServicesAware to no is inconsistent and hard to predict, it is recommended that you use the default setting of yes. Only use no as a temporary fix if you encounter troubles on systems with Terminal Services after upgrading from a previous Inno Setup version。


[Setup]: TimeStampRounding

有效值: | 0 到 60
默认值: | 2
描述:

按默认，被 [Files] 段条目引用的时间戳被向下平衡到最近两秒范围。FAT 分区只有 2 秒时间戳分辨能力，因此这可以确保在 FAT 和 NTFS 分区中设置的时间戳相同。

该平衡动作可以通过设置 TimeStampRounding 指令来改变或禁用。将它设置为 0 将禁用平衡。将它设置为 1 和 60 之间的数值导致时间戳被向下平衡到最近 TimeStampRounding 秒数范围。


[Setup]: TimeStampsInUTC

有效值: | yes 或 no
默认值: | no
描述:

按默认，被 [Files] 段条目引用的时间戳保存和恢复为本地时间。这表示如果一个特殊的文件在编译时有一个本地时间 01:00 的时间戳，安装程序将按本地时间 01:00 的时间戳提取文件，不考虑用户的时间区域设置或夏令时是否有效。

如果 TimeStampsInUTC 设为 yes，时间戳将保存并恢复为 UTC -- Win32 和 NTFS 的本地时间格式。在这个模式中，带纽约本地时间 01:00 时间戳的文件伦敦安装时将有一个本地时间 06:00 的时间戳。


[Setup]: TouchDate

有效值: | current, none, or YYYY-MM-DD
默认值: | current
描述:

The date used in the time/date stamp of files referenced by [Files] section entries that include the touch flag。

A value of current causes the current system date (at compile time) to be used. A value of none leaves the date as-is. Otherwise, TouchDate is interpreted as an explicit date in YYYY-MM-DD (ISO 8601) format. If TimeStampsInUTC is set to yes, the date is assumed to be a UTC date。

示例:
TouchDate=2004-01-31


[Setup]: TouchTime

有效值: | current, none, HH:MM，或 HH:MM:SS
默认值: | current
描述:

The time used in the time/date stamp of files referenced by [Files] section entries that include the touch flag。

A value of current causes the current system time (at compile time) to be used. A value of none leaves the time as-is. Otherwise, TouchTime is interpreted as an explicit time in HH:MM 或 HH:MM:SS format. If TimeStampsInUTC is set to yes, the time is assumed to be a UTC time。

示例:
TouchTime=13:00


[Setup]: Uninstallable

有效值: | yes or no , or a boolean expression
默认值: | yes
描述:

This determines if Inno Setup's automatic uninstaller is to be included in the installation. If this is yes or to a boolean expression evaluating to True the uninstaller is included. Otherwise, no uninstallation support is included, requiring the end-user to manually remove the files pertaining to your application.

请查阅:
CreateUninstallRegKey


[Setup]: UninstallDisplayIcon

描述:

This lets you specify a particular icon file (either an executable or an .ico file) to display for the Uninstall entry in the Add/Remove Programs Control Panel applet. The filename will normally begin with a directory constant。

If the file you specify contains multiple icons, you may append the suffix ",n" to specify an icon index, where n is the zero-based numeric index。

If this directive is not specified or is blank, Windows will select an icon itself, which may not be the one you prefer。

示例:
UninstallDisplayIcon={app}\MyProg.exe
UninstallDisplayIcon={app}\MyProg.exe,1


[Setup]: UninstallDisplayName

描述:

这用来让你指过在添加/删除程序控制面板中显示的程序自定义名。这个值可以包含常量。如果该指令未指定或是空白的，安装程序将使用 [Setup] 段 AppVerName 指令的值作为名字。

由于 Windows 95/98/Me 的添加/删除程序控制面板程序的局限性，如果 UninstallDisplayName 的值超过 63 个字符，将被截短。

示例:
UninstallDisplayName=My Program


[Setup]: UninstallDisplaySize

描述:

On Windows 7 and newer, Setup uses this directive to set the EstimatedSize value in the Uninstall registry key when possible since the Windows 7 Add/Remove Programs Control Panel (called Program and Features ) no longer automatically calculates it. If an UninstallDisplaySize is not set, Setup estimates the size itself by taking the size of all files installed and adding any ExtraDiskSpaceRequired values set. Note: Windows 7 without any service pack only supports the display of values smaller than 4 GB.

Set in bytes. (1048576 bytes = 1 megabyte)

示例:
UninstallDisplaySize=1073741824


[Setup]: UninstallFilesDir

默认值:

{app}
描述:

指定卸载程序的配置文件“unins*.*”文件贮存的目录。

注意: 在这里你不应该在安装程序的新版本中分配不同的值，或其它安装程序不能从先前版本找到卸载日志，使它不能附加到它们。

示例:
UninstallFilesDir={app}\uninst


[Setup]: UninstallIconFile

描述:

在 5.0.0 中废弃。安装程序和卸载程序已合并到单个可执行文件，不能再为卸载程序设置自定义图标了。


[Setup]: UninstallIconName

描述:

在 3.0 版本中废弃。这个指令已不支持。如果你想创建一个卸载图标，在 [Icons] 段条目的 Filename 参数中使用新的 {uninstallexe} 常量。


[Setup]: UninstallLogMode

有效值: | append, new，或 overwrite
默认值: | append
描述:

append (默认设置)，告诉安装程序在可能时附加到现有的卸载日志。

new，用于考虑早于 1.3 版本的 Inno Setup 动作，告诉安装程序总是创建一个新的卸载日志。

overwrite，告诉安装程序覆盖任何相同应用程序的现有卸载日志，而不是添加到卸载日志 (不推荐)。添加到现有日志相同规则应用到覆盖现有日志。

示例:
UninstallLogMode=append


[Setup]: UninstallRestartComputer

有效值: | yes 或 no
默认值: | no
描述:

当设为 yes，卸载程序在卸载结束后总是提示用户重新启动电脑，不考虑它是否真的需要 (例如，因为 [Files] 段条目用了 uninsrestartdelete 标记)。


[Setup]: UninstallStyle

描述:

在 5.0.0 中废弃。现在只支持“modern”卸载程序样式。


[Setup]: UpdateUninstallLogAppName

有效值: | yes 或 no
默认值: | yes
描述:

如果设为 yes，当添加到现有的卸载日志时，安装程序将用当前安装程序的 AppName 替换日志中的 AppName 对象。卸载程序的 AppName 对象用来确定在卸载程序中显示的标题。如果你的安装程序只是现有程序的升级或插件，或者你不想改变卸载程序标题，你可以将它设为 no。


[Setup]: UsePreviousAppDir

有效值: | yes 或 no
默认值: | yes
描述:

当这个指令设为 yes (默认)，在启动安装程序将访问注册表查看是否安装了相同应用程序当这个指令设为 yes (默认)，在启动安装程序将访问注册表查看是否安装了相同应用程序。如果是，它将使用先前安装的目录在向导页中作为默认目录提供给用户。

注意，安装程序不能从以前的已有 Uninstallable 设为 no 的安装程序重新使用设置，当 Uninstallable 设为 no 时，不能找到注册表条目。


[Setup]: UsePreviousGroup

有效值: | yes 或 no
默认值: | yes
描述:

当这个指令设为 yes (默认)，在启动安装程序将访问注册表查看是否安装了相同应用程序。如果是，它将使用先前安装的开始菜单文件夹名作为默认开始菜单文件夹名在向导中提供给用户。另外，如果 AllowNoIcons 设为 yes，先前安装中不创建任何快捷方式设置将被恢复。

注意，安装程序不能从以前的已有 Uninstallable 设为 no 的安装程序重新使用设置，当 Uninstallable 设为 no 时，不能找到注册表条目。


[Setup]: UsePreviousLanguage

有效值: | yes or no
默认值: | yes
描述:

When this directive is yes , the default, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will use the language of the previous installation as the default language selected in the list of available languages on the Select Language dialog.

Note that this directive does not change the language used by the Select Language dialog itself because it cannot assume that the current user understands the same languages as the previous user. See the [Languages] section help topic for details on which language the Select Language dialog uses by default.

Also note that Setup cannot re-use settings from a previous installation that had Uninstallable set to no , since the registry entries it looks for are not created when Uninstallable is no .

UsePreviousLanguage must be set to no when AppId includes constants.


[Setup]: UsePreviousSetupType

有效值: | yes 或 no
默认值: | yes
描述:

当这个指令设为 yes (默认)，在启动安装程序将访问注册表查看是否安装了相同应用程序。如果是，它将使用先前的安装类型和组件设置提供给用户作为向导中的默认设置。

注意，安装程序不能从以前的已有 Uninstallable 设为 no 的安装程序重新使用设置，当 Uninstallable 设为 no 时，不能找到注册表条目。


[Setup]: UsePreviousTasks

有效值: | yes 或 no
默认值: | yes
描述:

当这个指令设为 yes (默认)，在启动安装程序将访问注册表查看是否安装了相同应用程序。如果是，它将使用先前的任务设置提供给用户作为向导中的默认设置。

注意，安装程序不能从以前的已有 Uninstallable 设为 no 的安装程序重新使用设置，当 Uninstallable 设为 no 时，不能找到注册表条目。


[Setup]: UsePreviousUserInfo

有效值: | yes 或 no
默认值: | yes
描述:

当这个指令设为 yes (默认)，在启动安装程序将访问注册表查看是否安装了相同应用程序。如果是，它将使用先前输入的名字、组织和序列号作为出现在用户信息向导页中的默认设置。

注意，安装程序不能从以前的已有 Uninstallable 设为 no 的安装程序重新使用设置，当 Uninstallable 设为 no 时，不能找到注册表条目。


[Setup]: UserInfoPage

有效值: | yes 或 no
默认值: | no
描述:

如果这个设为 yes，安装程序将显示一个用户信息向导页，询问用户名，组织和在有可能的情况下询问序列号。用户输入的值贮存在 {userinfoname}、{userinfoorg} 和 {userinfoserial} 常量中。你可以使用这些常量在 [Registry] 或 [INI] 条目中保存它们以便稍后使用。

For the serial number field to appear, a CheckSerial event function must be present。

DefaultUserInfoName、DefaultUserInfoOrg 和 DefaultUserInfoSerial 指令确定显示的默认名、组织和序列号。如果 UsePreviousUserInfo 设为 yes (默认) 以及安装程序发现已经安装了相同应用程序的先前版本，它将使用先前安装时输入的名字、组织和序列号。

On silent installs, the default user name, organization, and serial number values will be assumed. Setup will not check whether the user name is blank (since the user has no way of correcting it), however it will still check the serial number。


[Setup]: UseSetupLdr

有效值: | yes 或. no
默认值: | yes
描述:

这是告诉安装程序编译器要创建什么样的安装类型。如果设为 yes，将所有要安装的数据编译成单个 EXE。如果设为 no，它会将要安装的数据编译成至少两个文件: SETUP.EXE、SETUP.0.BIN 和 SETUP-1.BIN。你大概在调试使用时才会设置为 no。

注意: 不在在安装程序中在使用磁盘延伸 (DiskSpanning=yes) 的情况下使用 UseSetupLdr=no。当 UseSetupLdr 为 yes，安装程序将复制到用户临时目录并从中运行。这个在当 UseSetupLdr 设置为 no 时不会出现，并在如果 Windows 尝度在磁盘定位 setup.exe 且因为磁盘不同不能在驱动器找到时会导致错误。

注意: Do not use UseSetupLdr=no to avoid digital signature verification startup delays on a large Setup, use disk spanning instead. See SignTool for more information. Also note that digitally signing a UseSetupLdr=no based Setup will lead to an invalid digital signature for Uninstall.


[Setup]: VersionInfoCompany

默认值:

AppPublisher 如果 AppPublisher 不包含常量，用空字符串替换
描述:

指定安装程序版本信息中的公司名的值。

This setting has no effect if UseSetupLdr is set to no .


[Setup]: VersionInfoCopyright

默认值:

AppCopyright 如果 AppCopyright 不包含常量，用空字符串替换
描述:

指定安装程序版本信息的版权值。

This setting has no effect if UseSetupLdr is set to no .


[Setup]: VersionInfoDescription

默认值:

AppName 安装，如果 AppName 不包含常量，用空字符串替换
描述:

指定安装程序版本信息的文件描述值。

This setting has no effect if UseSetupLdr is set to no .


[Setup]: VersionInfoProductName

默认值:

AppName 如果 AppName 不包含常量，用空字符串替换
描述:

指定安装程序版本信息产品名称值。

This setting has no effect if UseSetupLdr is set to no .


[Setup]: VersionInfoProductTextVersion

默认值:

VersionInfoProductVersion if set, else AppVersion if set and does not include constants, else VersionInfoTextVersion
描述:

Specifies the textual product version value for the Setup version info.

This setting has no effect if UseSetupLdr is set to no .


[Setup]: VersionInfoProductVersion

有效值: | A value in the form of up to 4 numbers separated by dots
默认值: | VersionInfoVersion
描述:

指定安装程序版本信息二进制产品版本值。

Partial version numbers are allowed. Missing numbers will be appended as zero's.

Note that this value is only known to be displayed by Explorer on Windows Vista SP2. Other versions display the textual product version value ( VersionInfoProductTextVersion ) instead.

This setting has no effect if UseSetupLdr is set to no .


[Setup]: VersionInfoTextVersion

默认值:

VersionInfoVersion
描述:

指定安装程序版本信息中文本形式的文件版本值。

以后的版本用显示二进制版本值的 (VersionInfoVersion) 替换。

This setting has no effect if UseSetupLdr is set to no .


[Setup]: VersionInfoVersion

有效值: | 用点隔开的 4 个数形式的值
默认值: | 0.0.0.0
描述:

指定安装程序版本信息的二进制文件版本值。

允许部分版本号。缺少的数字将用零附加。

This setting has no effect if UseSetupLdr is set to no .


[Setup]: WindowResizable

有效值: | yes 或 no
默认值: | yes
描述:

如果设为 no，在安装程序背景窗口未处于最大化状态时，用户不能调整其大小。

这个指令在 WindowVisible 未设为 yes 时无效。


[Setup]: WindowShowCaption

有效值: | yes 或 no
默认值: | yes
描述:

如果设为 no，安装程序将完全“全屏” -- 它将没有标题栏和边框，并且它将在任务栏之上。

这个指令在 WindowVisible 未设为 yes 时无效。


[Setup]: WindowStartMaximized

有效值: | yes 或 no
默认值: | yes
描述:

如果设为 yes，安装程序背景窗口将在初始化时用最大化状态显示，但不遮盖任务栏。

这个指令在 WindowVisible 未设为 yes 时无效。


[Setup]: WindowVisible

有效值: | yes 或 no
默认值: | no
描述:

如果设为 yes，在启动向导时将显示一个渐变背景。

注意这是一个目前使用的功能；很可能在以后被删除。


[Setup]: WizardImageBackColor

有效值: | $bbggrr 结构的值，这里的 rr,gg,和 bb 分别指定红、绿、蓝的两个数字的亮度值 (用十六进制)，或者可以是下列预置颜色名中的一个: clBlack，clMaroon，clGreen，clOlive，clNavy，clPurple，clTeal，clGray，clSilver，clRed，clLime，clYellow，clBlue，clFuchsia，clAqua，clWhite。
默认值: | $400000
描述:

这个指令指定用于填充小尺寸的向导位图 (用 WizardImageFile 指定) 区域内未使用的背景颜色。只能是 WizardImageStretch 设置为 no 时的未使用空间。


[Setup]: WizardImageFile

默认值:

compiler:WIZMODERNIMAGE.BMP
描述:

指定显示在安装程序向导左边的位图文件名。在运行安装程序编译器时，这个文件必须位于你的安装程序的来源目录，除非你指定了一个完整的路径名，或路径名用“compiler:”作为前缀，在这种情况下，它将在编译器目录下查找文件。

256 色位图在 256 色模式中不能正确显示，它不处理调色板。位图最大尺寸是 164x314 像素。请注意，如果 Windows 正运行于大字体环境，向导中位图范围将变大。

示例:
WizardImageFile=myimage.bmp


[Setup]: WizardImageStretch

有效值: | yes 或 no
默认值: | yes
描述:

如果设置为 yes (默认)，向导图像大于或小于所要求的大小时，将拉伸或收缩，，例如，如果用户正运行于大字体环境。

如果设置为 no，如果向导大于普通模式，向导图像将在各自的范围内居中显示。如果向导小于普通模式，图像将被裁剪显示。(这符合 Inno Setup 4.1.2 及早期版本的默认动作。)


[Setup]: WizardSmallImageBackColor

描述:

在 5.0.4 中废弃。这个指令以前是用来当 WizardImageStretch 设为 no 时，指定用于填充小向导位图周围的未使用的空间。现在未使用的空间用标准窗口颜色 (通常为白色)。如果你想在图像周围创建彩色边界，可以修改位图本身。


[Setup]: WizardSmallImageFile

默认值:

compiler:WIZMODERNSMALLIMAGE.BMP
描述:

指定显示在向导窗口右上角的位图文件名。在运行安装程序编译器时，这个文件必须位于你的安装程序的来源目录，除非你指定了一个完整的路径名，或路径名用“compiler:”作为前缀，在这种情况下，它将在编译器目录下查找文件。

256 色位图在 256 色模式中不能正确显示，它不处理调色板。位图最大尺寸是 55x58 像素。

示例:
WizardSmallImageFile=mysmallimage.bmp


[Setup]: WizardStyle

有效值: | modern
默认值: | modern
描述:

在 3.0 版本中废弃。Inno Setup 2.x 支持“classic”的替换向导样式，“classic”样式支持在 Inno Setup 3.0 中被放弃。


来源目录

按默认，如果指定的文件不包含完整的路径，安装程序编译器希望能在脚本所在位置同一目录下找到脚本中的 [Files] 段 Source 参数中涉及的文件，以及在 [Setup] 段涉及的文件，要指定其它来源目录，在脚本的 [Setup] 段创建一个 SourceDir 指令。


用户 & 组标识

admins | 内部管理员组
authusers | 认证用户组
everyone | Everyone 组
powerusers | 内部权力用户组
system | 本地系统用户
users | 内部用户组


Windows 版本

5.0.2195 | Windows 2000
5.1.2600 | Windows XP 或 Windows XP 64 位版本 2002 (Itanium)
5.2.3790 | Windows Server 2003 或 Windows XP x64 版本 (AMD64/EM64T) 或 Windows XP 64 位版本 (Itanium)
6.0.6000 | Windows Vista
6.0.6001 | Windows Vista with Service Pack 1 或 Windows Server 2008
6.1.7600 | Windows 7 或 Windows Server 2008 R2
6.1.7601 | Windows 7 with Service Pack 1 或 Windows Server 2008 R2 with Service Pack 1
6.2.9200 | Windows 8 或 Windows Server 2012
6.3.9200 | Windows 8.1 或 Windows Server 2012 R2

请注意，这里通常不需要指定构建号 (比如你对于 Windows XP，可以简单地使用“5.1”)。


“yes”和“no”注意事项

为了与以前的 Inno Setup 版本兼容，个别项目可以用 1 和 0 代替 yes 和 no。

另外，它允许用 true 和 false 替换 yes 和 no。