如何使用:
文档约定
创建安装程序
创建脚本
段内参数
一些常量
公共参数
安装脚本段
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
其它问题:
其它注意事项
在命令行执行编译器
安装命令行参数
文档约定
"Windows 95/NT 4+"
这是 Windows 95, 98, NT 4.0, 2000 以及更高版本的简称。
"Windows 98/NT 4+"
这是 Windows 98, NT 4.0, 2000 以及更高版本的简称。
"Windows NT"
无论何时提及 Windows NT,除非有其他说明,他总是包括 Windows 2000(亦即 NT 5.0)。
等宽字体
当你看见文档里的等宽字体,说明他是脚本文件的引用。
创建安装程序
安装程序是以脚本(script)的方式来创建的。(不要一看见“脚本”这个术语就害怕,你只需要花上几分钟的时间就可以掌握它的要领!)
该脚本文件的扩展名是“.iss”(意思是 Inno Setup Script)。脚本文件控制了安装程序的每一个外观界面。它指定了哪些文件要被复制及其位置,创建什么应用程序图标和为它们命名等等。
脚本文件通常可以用安装编译程序内建的编辑器来创建和编辑,完成以后写入脚本文件,下一步也是最后一 步是在安装编译器的菜单里选择“编译”(Compile)。创建完成以后该干什么呢?准备运行这个基于该脚本的安装程序吧!默认情况下,这个文件被创建在 脚本文件所在文件夹的“OUTPUT”子文件夹下。
要了解脚本文件是如何工作的,运行安装编译器,单击“文件/打开”选择一个位于 Inno Setup 文件夹的 Samples 子文件夹下的示例脚本文件。(用这些示例文件作为你自己的脚本文件的模板可能示非常有用处的。)
参见
创建脚本
创建脚本
一个 Inno Setup 脚本是一个简单的 ASCII 文本文件。它的格式非常类似于 .INI 文件,如果你有这方面的经验你就会发现学习起来有多么的容易。
就象下面的示例所显示的,脚本文件包括“段”(sections)和“项”(entries)。段名的两边始终有一对中括号“[]”,在 [Setup] 段中的每一项包括一个关键字和他的值,关键字和值用等于号“=”连接在一起。下面的这个示例说明了脚本文件是如何被组织的:
[在这里添加段名,例如 Setup]
这是一个关键字=这是一个值
这是其它的关键字=这是其它的值
[在这里添加段名,例如 Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
你也可以在你的脚本文件中加上注释(这些注释将会被安装编译器忽略),方法是在每一行注释的行首加上一个分号“;”,例如:
; 这是一行注释,我可以在这里写上提醒我的内容...
参见
段内参数
一些常量
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
段内参数
脚本文件中的所有的段,除了[Setup],都是以行位单位,每行分为若干个参数。下面是一个 [Files] 段的示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
每一个参数都有一个名称,后面紧跟一个冒号,然后是它的值。除非有其它的说明,参数是可选的,如果参数没有指定则取它们的默认值。如果一行内有多个参数则用分号将其分开 (还可以加一个空格符),他们可以按任何顺序排列出来。
参数的值多数情况下是用引号扩起来("),但使用引号也是可选的。然而如果这个参数的值里面的前导符号或者后缀符号是空格的话就必须加上引号了。另外需要说明的是使用内嵌的分号和引号,要插入一个引号则使用两个连续的引号来代替。例如,下面的示例:
"This "" contains "" embedded "" quotes"
""""
安装程序编译器将会视为:
This " contains " embedded " quotes
"
一些常量
多数的脚本项都可以在它们的内部嵌入“常量(constants)”,它们总是被一对大括号({ })扩起来的。当安装程序被启动的时候,这些常量将被转换成其真实的值,这依赖于用户的选择和系统配置,例如,{win} 这个常量在绝大多数的系统当中将被转换成“C:/WINDOWS”。
字符“{”被视为一个常量的起始标记,如果你想获得的是它的真实字符,那么你必须使用两个连续的“{”字符。
如果一个常量的后面紧跟着一个反斜杠,而此时这个常量被转换成其真实值的结尾也是一个反斜杠 时,Inno Setup 会自动的删除一个反斜杠,这样处理的明显的好处是如果这个常量指向了“C:/”,{常量名}/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)目录(在 Windows NT/2000 下是 System32)。 例如:如果你使用了 {sys}/CTL3D32.DLL 作为一项并且系统的 Windows 系统目录是“C:/WINDOWS/SYSTEM”,那么安装程序就会将它转换成“C:/WINDOWS/SYSTEM/CTL3D32.DLL”。
{src}
这个文件夹指向安装程序所在的位置。
例如:如果你使用了 {src}/MYPROG.EXE 作为一项并且用户是从“S:/ ”安装的,那么安装程序就会将它转换成“S:/MYPROG.EXE”。
{sd}
系统驱动器,它是指 Windows 被安装到的那个驱动器,典型的是“C:”,对于 Windows NT/2000,这个常量同系统的环境变量“SystemDrive”是等效的。
{pf}
程序文件夹(Program Files),这个路径是系统的 Program Files 目录,典型的是“C:/Program Files”。
{cf}
公共文件夹(Common Files),这个路径是系统的 Common Files 文件夹,典型的是“C:/Program Files/Common Files”。
{tmp}
临时目录,这个目录并不是用户的 TEMP 环境变量指向的目录,而是安装程序在启动时在用户的临时目录下建立的一个子目录(它有一个类似于“
C:/WINDOWS/TEMP/IS-xxxxx.tmp”这样的名字),在安装程序退出时所有的文件和子目录将会被删除。对于在 [Run] 段里面要被执行且在安装以后又不需要的程序文件来说这个功能是非常有用的。
{fonts}
字体目录,在 Windows 95/NT 4+ 下有一个专门为字体设立的目录(通常这个目录在 Windows 目录下且被命名为“FONTS”),这个常量就指向这个目录。对于 Windows NT 3.51,这个常量是和 {sys} 等效的,因为当时还没有字体目录。
{dao}
DAO 目录,当安装程序运行在 Windows 95/NT 4+ 上时,它被等效为 {
cf}/Microsoft Shared/DAO,当运行于 Windows NT 3.51 时,它被等效为 {
win}/MSAPPS/DAO.
外壳(Shell)文件夹常量
Inno Setup 还支持另外一套目录常量,这就是涉及到的外壳(shell)文件夹常量,它们具有和其它的目录常量相同的使用方法。然而,如果在脚本的 [Setup] 段里面放入了 MinVersion=4,3.51 这一行来表示允许支持 NT 3.51,那么将只有 {group} 这个外壳文件夹常量能被使用,并签只能用在 [Icons] 段。
下面的包含了“user”的常量涉及到当前登陆的用户私人文档(profile),而带有“
common”的常量会涉及到全部用户(All Users)的私人文档(profile)。当安装程序运行在 Windows NT/2000 操作系统下并且用户不具有管理员的权限时,所有的带有“common”的常量会强迫同带有“user”的常量等效。
* 标记表示带有“common”的常量在 Windows 9x 操作系统下同带有“user”的常量等效。
{group}
程序组的路径,取决于用户在安装程序向导的“选择程序组”页的选择。对于 Windows NT,这个文件夹始终被建立在所有用户的私人文档(All Users profile),除非用户正在安装的这个应用程序不具有管理员的权限,那么在这种情况下它将被建立在用户的私人文档中(profile).
{sendto}
当前用户的“发送”的路径。(没有公共的“发送”文件夹。)
{userappdata} & {commonappdata}
应用程序数据(Application Data)文件夹的路径。
{userdesktop} & {commondesktop} *
桌面文件夹的路径,推荐桌面快捷方式使用 {userdesktop}.
{userdocs} & {commondocs}
“我的文档”文件夹的路径(或者对于 NT 4.0,是指私人文件夹).
{userfavorites} & {commonfavorites}
“收藏夹”的路径,这个常量的使用方法是需要 MinVersion 的设置至少为“4.1, 4”,目前只有 Windows 2000 支持 {commonfavorites},如果使用的是在这之前的版本的 Windows,那么它将会被转换成和{userfavorites} 相同的目录。
{userprograms} & {commonprograms} *
在开始菜单里面的程序文件夹的路径。
{userstartmenu} & {commonstartmenu} *
开始菜单的定级路径。
{userstartup} & {commonstartup} *
开始菜单里面的启动文件夹的路径。
{usertemplates} & {commontemplates}
模板(Templates)文件夹的路径,目前只有 Windows 2000 支持 {
commontemplates},如果使用的是在这之前的版本的 Windows ,它将会被转换成和 {usertemplates} 相同的目录。
其他的常量
{/}
一个反斜杠字符,请参见本页前面提到的关于常量 {/} 和单字符 / 在使用上有何不同的说明。
{%NAME}
内嵌一个环境变量,这个 NAME 是要使用的环境变量的名字。如果在用户的系统当中指定的环境变量不存在,这个常量就会被一个空的字符串所替代。
{computername}
安装程序正在运行的计算机的名称(就是“GetComputerName”函数的返回值)。
{groupname}
用户在安装程序向导的选择程序组页选择的程序组的名称,这个是不同于 {group} 的,它不包括路径。
{hwnd}
(专门用途)传送安装程序背景窗口的窗口句柄。
{reg:HKxx/SubkeyName,ValueName|DefaultValue}
内嵌一个注册表值。
HKxx 指定根键(root key),参见 [Registry] 段 文档所列出的根键。
SubkeyName 指定要读取的子键的名称。
ValueName 指定要读取的值的名称,要读取一个键的默认值就让 ValueName 为空。
DefaultValue 如果指定的注册表值不存在或者它不是一个字符串类型(REG_SZ 或者 REG_EXPAND_SZ),则嵌入这个值。
如果你希望包括一个逗号,竖线(字符“|”)或大括号闭弧“}”在常量里面,你必须通过“%-编码” 形式用“%”后紧跟一个两位的16进制代码转译后替换原来的字符,一个逗号是“%2c”,一个竖线符是“%7c”,一个大括号闭弧是“%7d”。
DefaultValue 可以包括常量,然而,如上所诉内嵌的常量的大括号的闭弧
(“}”) 必须被改成“%7d”才可以。
{srcexe}
安装程序的文件名全称(包括全程路径和文件名),例如“C:/SETUP.EXE”。
{username}
运行安装程序的用户的名称(函数 GetUserName 的返回值)。
公共参数
有俩个可选的参数可以在所有的段里面的任何项中使用,它们是:
MinVersion
说明:
该项处理所需的分别最低的 Windows 版本和 Windows NT 版本. 如果将某个版本号指定为 0 那么在该平台上就再也不会处理这项了,版本创建编号(Build numbers)和(或)服务包级别(Service pack levels)也可以被包括在版本号当中。这个参数将会覆盖位于 [Setup] 段当中的 MinVersion 关键字。
示例:
MinVersion: 4.0,4.0
OnlyBelowVersion
说明:
基本上是和 MinVersion 相反,该项所指定的最低的 Windows 版本 和 Windows NT
版本将不会被处理,例如:如果你指定了 4.1,5.0 并且用户运行在 Windows 95 或 NT 4.0 下,那么该项将会被处理,但是如果用户运行在 Windows 98 (报告的版本信息是 4.1)或 Windows 2000 (报告的版本信息是 NT 5.0),则该项就不会被处理。使用“0”表示该版本号上限的限制。版本创建编号(Build numbers)和(或)服务包级别(Service pack levels) 也可以包括在版本号当中。这个参数将会覆盖位于 [Setup] 段当中的 OnlyBelowVersion 关键字。
示例:
OnlyBelowVersion: 4.1,5.0
其它注意事项
安装程序是按照段内的排列顺序来处理所有的项的,[UninstallRun] 段是个例外,卸载时处理所有项的顺序是与安装程序相反的。
在这个示例中:
[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 标记。
如果安装程序在用户的系统中检测到一个 Windows 共享版本,Windows 系统目录是写保护的,{sys} 目录常量将会被转变为用户的 Windows 目录替代系统目录。
在命令行执行编译器
脚本文件也可以在命令行被安装编译器编译。命令行的使用方法如下:
compiler /cc <脚本文件>
示例:
compil16 /cc c:/isetup/sample16/sample16.iss
compil32 /cc "c:/isetup/sample32/my script.iss"
在上面列出的例子中,带有空格的文件名必须用引号括起来。
在命令行运行安装编译器不支持正常的进程显示或任何错误消息。如果编译成功安装编译器将会返回一个退出代码 0,如果是 1 则表示有无效的命令行参数, 2 则表明编译失败。
安装命令行参数
安装程序本身接受三个不同的可选的命令行参数,这些参数能被用于系统管理员和其他程序调用安装程序。
/SP-
在安装程序开始时禁止“即将安装 ... ,继续吗?”的提示,当然,它将使 [Setup] 段的 DisableStartupPrompt 关键字设置为 yes 无效
/DIR="x:/dirname"
替换在“选择目标文件夹”向导页显示的默认的目录名,必需要指定一个全程路径名。如果 [Setup] 段的 DisableDirPage 关键字被设置为 yes, 那么该命令行参数将被忽略。
/GROUP="group name"
替换在“选择程序组”向导页显示的默认的程序组名,如果 [Setup] 段的 DisableProgramGroupPage 关键字被设置为 yes, 那么该命令行参数将被忽略。
安装脚本段
安装脚本段
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
其它问题:
其它注意事项
在命令行执行编译器
安装命令行参数
[Setup] 段
这个段包括了安装和卸载程序所使用的全局设置,并且有些关键字在你建立的安装程序中是必须要用到的。这个是 [Setup] 段的一个示例:
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}/My Program
DefaultGroupName=My Program
下面的这些关键字可以被放进 [Setup] 段中去:
(粗体字 表示是必需的)
编译器相关
CompressLevel
DiskClusterSize
DiskSize
DiskSpanning
DontMergeDuplicateFilesOutputBaseFilename
OutputDir
ReserveBytes
SourceDir
UseSetupLdr
安装程序相关
功能关键字: 这些关键字影响到安装程序的操作,或是保存起来以备将来卸载时所用到。
AdminPrivilegesRequired
AllowNoIcons
AllowRootDirectory
AlwaysCreateUninstallIcon
AlwaysRestart
AlwaysUsePersonalGroup
AppName
AppId
AppMutex
AppPublisher
AppPublisherURL
AppSupportURL
AppUpdatesURL
AppVersion
AppVerName
ChangesAssociations
CreateAppDir
CreateUninstallRegKey
DefaultDirName
DefaultGroupName
DirExistsWarning
DisableAppendDir
DisableDirPage
DisableFinishedPage
DisableProgramGroupPage
DisableStartupPrompt
EnableDirDoesntExistWarning
ExtraDiskSpaceRequired
InfoAfterFile
InfoBeforeFile
LicenseFile
MessagesFile
MinVersion
OnlyBelowVersion
Password
Uninstallable
UninstallDisplayIcon
UninstallDisplayName
UninstallFilesDir
UninstallIconName
UninstallLogMode
UpdateUninstallAppName
UsePreviousAppDir
UsePreviousGroup
外观界面关键字:这些关键字决定了安装程序的外观样式。
AppCopyright
BackColor
BackColor2
BackColorDirection
BackSolid
WindowShowCaption
WindowStartMaximized
WindowResizable
WindowVisible
WizardImageBackColor
WizardImageFile
废弃的
Bits
DisableDirExistsWarning
OverwriteUninstRegEntries
[Dirs] 段
这个段是可选的,而且通常对于大多数简单的应用程序来书不是必需的。这个段是用来创建除用户选择的应用程序目录以外的其它的附加的目录,它是被自动创建 的。这个段所创建的子目录是可以脱离主应用程序而共同使用的目录。当然在 [Files] 段里面的文件被复制到某个目录之前你并不一定要创建它,然而在卸载程序的时候在 [Dirs] 和 [UninstallDelete] 段里面没有指定的目录就不会被删除。
这是一个 [Dirs] 段的示例:
[Dirs]
Name: "{app}/data"
Name: "{app}/bin"
上面的示例演示了在安装程序的应用程序目录被创建之后,在应用程序的下面建立两个子目录。
下面列出了支持的参数:
Name (必需的)
说明:
要被建立的目录的名称,通常它以一个目录常数开始。
示例:
Name: "{app}/MyDir"
Flags
说明:
“标记”,这个参数是一个附加的选项集合,可以多个选项共同使用,使用空格分开多个选项。下面列出了被支持的选项:
deleteafterinstall
告诉安装程序象平常一样建立目录,但是当安装程序结束(或被中止)之后这个目录是空的情况下将这个目录删除。如果释放脚本的 [Run] 段所执行的程序所需要的临时的数据时这个选项是很有用的。
uninsalwaysuninstall
告诉卸载程序试图删除这个目录而不管它是不是空的。通常卸载程序只会尝试删除在安装之前不存在的目录。
uninsneveruninstall
告诉卸载程序不要去删除这个目录。在默认情况下,在 [Dirs] 段里面指定的目录如果是空的卸载程序就会尝试将其删除。
示例:
Flags: uninsneveruninstall
公共参数