Inno Setup使用进阶(一)

时间:2023-01-20 16:11:49
   说明:本文用的Inno Setup 的版本是5.1.8 。示例程序位于Inno Setup V5.18 安装目录"Examples 目录下。本文对笔者转载的一篇文章《Inno Setup 使用教程》根据笔者实际工作中用到的东西进行缩减和修改而成。

一.介绍

Inno Setup是一个开源免费的安装程序制作工作。安装程序是以脚本的方式创建的,其扩展名为.issInno Setup Script)。

二.常量

       Inno Setup有一些自带的常量,它们被一对大括号({})括起来,当安装程序被启动的时候,这些常量将被转换成其真实的值,这依赖于用户的选择和系统配置,例如,{win} 这个常量在绝大多数的系统当中将被转换成“C:"WINDOWS” 

1.      目录常量

1{app}

       应用程序目录,这是用户在安装向导的选择安装目录页里面所选择的。这是Inno Setup中最常用的一个变量。

2{win}

       系统的Windows目录,一般为“C:"WINDOWS”。例如:如果你使用了 {win}"MYPROG.INI ,而你的 Windows 目录是“C:"WINDOWS”,那么安装程序就会将它转换成“C:"WINDOWS"MYPROG.INI” 

3{sys}

       系统的 Windows 系统(System)目录(在 Windows NT/2000 下是 System32)。 例如:如果你使用了 {sys}"CTL3D32.DLL,并且系统的 Windows 系统目录是“C:"WINDOWS"SYSTEM”,那么安装程序就会将它转换成“C:"WINDOWS"SYSTEM"CTL3D32.DLL” 

4{src}

       指向安装程序所在的位置。

5{sd}

       系统驱动器,它是指 Windows 被安装到的那个驱动器,典型的是“C:”,对于 Windows NT/2000,这个常量同系统的环境变量“SystemDrive”是等效的。 

6{pf}

       也是Inno Setup中比较常用的一个常量,这个路径是系统的Program Files目录,典型的是“C:"Program Files”。

7{cf}

       公共文件夹(Common Files),这个路径是系统的 Common Files 文件夹,典型的是“C:"Program Files"Common Files” 

8{tmp}

       临时目录,这个目录并不是用户的 TEMP 环境变量指向的目录,而是安装程序在启动时在用户的临时目录下建立的一个子目录(它有一个类似于“ C:"WINDOWS"TEMP"IS-xxxxx.tmp”这样的名字),在安装程序退出时所有的文件和子目录将会被删除。对于在 [Run] 段里面要被执行且在安装以后又不需要的程序文件来说这个功能是非常有用的。

9{fonts}

字体目录。

10{dao}

        DAO 目录,当安装程序运行在 Windows 95/NT 4+ 上时,它被等效为 {cf}"Microsoft Shared"DAO,当运行于 Windows NT 3.51 时,它被等效为 { win}"MSAPPS"DAO

2.      Shell文件夹常量

笔者尚未用到,在此不作讲述。

3.      其它的常量

1{"}

       一个反斜杠字符,请参见本页前面提到的关于常量 {"} 和单字符 " 在使用上有何不同的说明。

2{%NAME}

       内嵌一个环境变量,这个 NAME 是要使用的环境变量的名字。如果在用户的系统当中指定的环境变量不存在,这个常量就会被一个空的字符串所替代。 

3{computername}

       安装程序正在运行的计算机的名称(就是“GetComputerName”函数的返回值)。 

4{groupame}

       用户在安装程序向导的选择程序组页选择的程序组的名称,这个是不同于 {group} 的,它不包括路径。

5{hwnd}

       (专门用途)传送安装程序背景窗口的窗口句柄。

6{reg:HKxx"SubkeyName,ValueName|DefaultValue}  

HKxx 指定根键(root key),参见 [Registry]  文档所列出的根键。 

SubkeyName 指定要读取的子键的名称。 

ValueName 指定要读取的值的名称,要读取一个键的默认值就让 ValueName 为空。 

DefaultValue 如果指定的注册表值不存在或者它不是一个字符串类型(REG_SZ 或者 REG_EXPAND_SZ),则嵌入这个值。 

如果你希望包括一个逗号,竖线(字符“|”)或大括号闭弧“}”在常量里面,你必须通过“%-编码” 形式用“%”后紧跟一个两位的16进制代码转译后替换原来的字符,一个逗号是“%2c”,一个竖线符是“%7c”,一个大括号闭弧是“%7d”  DefaultValue 可以包括常量,然而,如上所诉内嵌的常量的大括号的闭弧 

“}” 必须被改成“%7d”才可以。

7{srcexe}  

安装程序的文件名全称(包括全程路径和文件名),例如“C:"SETUP.EXE” 

8{username}  

运行安装程序的用户的名称(函数 GetUserName 的返回值)。

二.脚本的段

       Inno Setup的脚本的段分为几段,下面看一个Inno Setup自带的例子:Example1.iss,其内容如下:

; -- Example1.iss --

; Demonstrates copying 3 files and creating an icon.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!

[Setup]

AppName=My Program

AppVerName=My Program version 1.5

DefaultDirName={pf}"My Program

DefaultGroupName=My Program

UninstallDisplayIcon={app}"MyProg.exe

Compression=lzma

SolidCompression=yes

OutputDir=userdocs:Inno Setup Examples Output

[Files]

Source: "MyProg.exe"; DestDir: "{app}"

Source: "MyProg.chm"; DestDir: "{app}"

Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

[Icons]

Name: "{group}"My Program"; Filename: "{app}"MyProg.exe"

       从上面可以看出,iss文件是由一段一段的脚本组成的,例如,在上例中写了三段,分别为:[Setup][Files][Icons]

在本小节中只是粗略的介绍一下这几段的作用,至于具体每一段的使用,在本小节不予讲述。

1. [Setup]  

       这个段包括了安装和卸载程序所使用的全局设置,并且有些关键字在你建立的安装程序中是必须要用到的。

2. [Dirs] 

       这个段是可选的,而且通常对于大多数简单的应用程序来书不是必需的。这个段是用来创建除用户选择的应用程序目录以外的其它的附加的目录,它是被自动创建的。这个段所创建的子目录是可以脱离主应用程序而共同使用的目录。当然在 [Files] 段里面的文件被复制到某个目录之前你并不一定要创建它,然而在卸载程序的时候在 [Dirs]  [UninstallDelete] 段里面没有指定的目录就不会被删除。

3. [Files]  

这个段是可选的,但对于大多数安装程序来说是必不可少的。在这里定义了安装程序需要复制到用户的系统当中的全部文件。 

在安装期间,卸载程序和数据被自动的复制到应用程序的目录当中去,因此你不必手工的将它们添加到 [Files] 段。

4.      [Icons] 

这个段是可选的,但对于大多数安装程序来说是必不可少的。它定义了所有的安装程序要在用户系统中创建的程序管理器/开始菜单的图标。它也能被用来在其它的位置创建应用程序图标(快捷方式),比如就像桌面。 

卸载图标是由安装程序内部创建的,这样一来你就不需要在 [Icons] 段里面手工的添加它。默认情况下,安装程序运行在 Windows 95/NT 4+ 的时候是不创建卸载图标的 ――除了安装程序运行于 Windows NT 3.51 的时候。 要强制创建一个卸载图标,请使用 [Setup] 段里面的 AlwaysCreateUninstallIcon 关键字。

5.      [INI]  

此段是可选的,它定义了一些 .INI 文件项,在文件被复制以后安装程序在用户的系统中的设定。  

6.      [InstallDelete] 

它使用的是和 [UninstallDelete] 段相同的格式,不同的是它是在安装程序的第一步被处理的。 

7.      [Messages]  

[Messages] 段是用于定义安装程序和卸载程序所显示的消息。通常你不需要在你的脚本文件里面创建 [Messages] 段,默认情况下所有的显示消息都由 Inno Setup 包含的文件 Default.isl 定义。 (或由 [Setup] 段的关键字 MessagesFile 指定的任何文件)。

8.       [Registry] 

这个段是可选的,他定义了一些注册表项,用于在复制完文件之后创建在用户的系统中。 

9.      [Run]  & [UninstallRun]  

[Run] 段是可选的,指定任意数量的程序在成功安装程序以后及显示结束对话框之前被执行。同样 [UninstallRun] 段也是可选的,指定任意数量的程序在卸载程序的第一步时被执行。除非下面有其它说明,两个段共有相同的语法。 
每个程序按照你的脚本编排的顺序被执行,当出路 [Run]/[UninstallRun] 的项时,安装程序将会等到当前的程序终止之后才处理下一个,当然除非使用了 nowait 标记。

10.  [UninstallDelete]  

该段是可选的。该段是用来定义一些附加的除了那些被安装的应用程序之外的要被卸载程序删除的文件或目录。使用该段来删除由你的应用程序创建的 .INI 文件是一个常用的办法。卸载程序在卸载过程的最后一步处理这些项。

11.[CustomMessages] 段
[CustomMessages] 段用于定义 {cm:...} 常量的自定义消息值。查阅常量帮助文档内容获取更多信息。
从 [CustomMessages] 段使用 {cm:...} 常量获取的带描述的任务示例: 
[CustomMessages] 
createDesktopIcon=创建桌面快捷方式(&D)
[Tasks] 
Name: desktopicon; Description: "{cm:createDesktopIcon}"

三.注释和段内参数

       Inno Setup中将以“;”开始的行作为注释行,例如在上小节中的Example1.iss中的前几行都是该例的注释行。

       脚本文件中的所有的段,除了[Setup],都是以行位单位,每行分为若干个参数。例如Example1.iss[Files]段内容如下:

[Files]

Source: "MyProg.exe"; DestDir: "{app}"

Source: "MyProg.chm"; DestDir: "{app}"

Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

       从上面的脚本代码可以看出,每个参数都有一个名称,例如SourceDestDir,后面紧跟一个冒号,然后是它的值。当一行有多个参数时,参数之间则用分号(;)隔开。

参数的值多数情况下是用引号扩起来("),但使用引号也是可选的。然而如果这个参数的值里面的前导符号或者后缀符号是空格的话就必须加上引号了。另外需要说明的是使用内嵌的分号和引号,要插入一个引号则使用两个连续的引号来代替。

四.简单实例讲解

       在本小节中,我们讲述Inno Setup中的一个简单例子,即前面各节提及的Example.iss。首先看一下[Files]

[Setup]

AppName=My Program

AppVerName=My Program version 1.5

DefaultDirName={pf}"My Program

DefaultGroupName=My Program

UninstallDisplayIcon={app}"MyProg.exe

Compression=lzma

SolidCompression=yes

OutputDir=userdocs:Inno Setup Examples Output

       上述脚本代码中,AppName为应用程序的名称,在Inno Setup5.1.8中,点击运行按钮运行时,可以看到在安装窗口的左上角显示的是应用程序的名称,窗口如下所示:
    Inno Setup使用进阶(一)

       AppVerName为应用程序的版本号,也是在安装向导的首页显示的。DefaultDirName为默认的路径,点击上图的“继续”按钮,安装窗口如下:
   Inno Setup使用进阶(一)

       DefaultDirName即为上图中的默认的安装路径。

Compression表示压缩的类型,指示现在默认为lzma。基本上在所有的实例中,lzma压缩较其它支持的压缩方法好。先前默认为 zip(ML)可执行文件现在压缩率更高。

DefaultGroupName表示的是开始菜单文件夹,在上图中点击“继续”按钮,进入的窗口如下:
   Inno Setup使用进阶(一)