Inno Setup 详解中文资料
其一:使用教程
一、Inno Setup 是什么?
Inno Setup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件。
二、Inno Setup 能干什么?
1.支持现在所有正在使用的 Windows 版本: 7, 2008 R2, Vista, XP, 2008, 2003, 2000, Me, 98, 95, 和 NT 4.0 (不需要服务包)。
2.广泛支持在 64 位的 Windows XP and Windows Server 2003 版本的操作系统中的 64 位应用程序安装。支持 x64 和 Itanium 两个结构。(在 Itanium 结构中,必须在 64 位模式安装 Service Pack 1。)
3.支持创建单个 EXE 格式的安装程序,使你的程序可以很方便地在网络上发表。同时也支持磁盘延伸。
4.标准的 Windows 2000/XP 样式向导界面。
5.定制安装类型,例如:完整安装,最小安装,自定义安装。
6.完整的卸载功能。
7.文件安装:
包括完全的“压缩”支持,bzip2 和 7-Zip LZMA 文件压缩。安装程序可以比较文件版本信息,替换正在使用的文件,使用共享文件计数,注册 DLL/OCX 和类型库,以及安装字体。
8.可以在任意地方创建快捷方式,包括开始菜单和桌面。
9.创建注册表和 .INI 条目。
10.在安装之前、之中或之后可运行其他程序。
11.支持多语言安装。
12.支持密码和加密安装。
13.支持数字签名、安装和卸载。
14.后台安装和后台卸载。
15.Unicode 安装。(Windows 2000/XP 或更高)
16.完整的 Pascal 脚本引擎选项于运行期高级自定义安装和卸载。
17.全部源代码公开 (Borland Delphi 2.0-5.0 和 2009)。
二、创建安装程序的方式:脚本
安装程序用编译脚本的方式创建,脚本其实就是一个类似 .INI 文件格式的 ASCII 码文本文件。(它不象你想象的那么复杂!)。 Unicode Inno Setup支持 UTF-8 编码文本文件。
脚本用一个“.iss”(表示 Inno Setup Script脚本) 的扩展名。脚本控制着安装程序的所有方面。由它指定哪些文件将被安装到什么地方,在哪里创建快捷方式,且被命名为什么。
脚本文件一般可以用安装程序编译器程序内置的编辑器进行编辑。在你编写完脚本后,下一个最终步骤就是选择安装程序编译器中的“编译”。创建完成后,就可以运行根据你脚本编译的安装程序了。按默认,这个安装程序创建在包含脚本文件目录下的名为“输出”目录中。
如果你想看看它是怎样工作的,启动安装程序编译器,单击“文件 | 打开”,并选择位于 Inno Setup 安装目录下的 Examples 子目录中的一个脚本文件。(你也可以将这些示例脚本作为你自己编写脚本的模板。)
Inno setup脚本示范(注释)
[Setup]
;程序名
AppName=ISsample
;版本号
AppVerName=ISsample 1.0.0.0
;发布者名
AppPublisher=Hkiss
;相关连接
AppPublisherURL=https://www.doczj.com/doc/d44302880.html,/ AppSupportURL=https://www.doczj.com/doc/d44302880.html,/
AppUpdatesURL=https://www.doczj.com/doc/d44302880.html,/
;默认安装目录
DefaultDirName={pf}\ISsample
;默认开始菜单名
DefaultGroupName=ISsample
;是否打开->可选安装开始菜单项
;AllowNoIcons=yes
;安装协议
;LicenseFile=C:\Example\原始文件\agreement.txt
;安装前查看的文本文件
;InfoBeforeFile=C:\Example\原始文件\Setup_New.txt ;安装后查看文本文件
;InfoAfterFile=C:\Example\原始文件\Setup_Old.txt ;输出文件夹
OutputDir=C:\Example\InnoSetup\out
;输出文件名
OutputBaseFilename=setup
;安装图标
SetupIconFile=C:\Example\原始文件\title.ico
;安装需要输入密码
;Password=123
;Encryption=yes
;压缩相关
Compression=lzma
SolidCompression=yes
;可以让用户忽略选择语言相关
ShowLanguageDialog = yes
;备注版本信息
VersionInfoCompany=https://www.doczj.com/doc/d44302880.html, VersionInfoDescription=ISsample 汉化增强版VersionInfoVersion=1.0.0.0
VersionInfoCopyright=Copyright (C) 2007-2008 Hkiss ;制作选择语言
[Languages]
Name: "chs"; MessagesFile: "compiler:Default.isl" ;LicenSeFile :"C:\Example\原始文件\chs\agreement.txt"
Name: "en"; MessagesFile: "compiler:Languages\English.isl";LicenSeFile :"C:\Example\原始文件\en\agreement.txt"
;用户定制任务
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "Tasks_1" ; Description:"用户自定义任务1"; Flags: unchecked
Name: "Tasks_2" ; Description:"用户自定义任务2"; Flags: unchecked
;选择了组件才会出现的定制任务
Name: "Tasks_3" ; Description:"用户自定义任务3";Components: c1 ; Flags: unchecked
;文件安装
[Files]
;多语言安装环境设置公共参数Languages 来设置
Source: "C:\Example\原始文件\enfile.txt"; DestDir: "{app}"; Languages: en ; Flags: ignoreversion
Source: "C:\Example\原始文件\chsfile.txt"; DestDir: "{app}"; Languages: chs ; Flags: ignoreversion
;用户自定义任务 Tasks
Source: "C:\Example\原始文件\Tasks\tasks_1.txt"; DestDir: "{app}\Tasks"; Flags: ignoreversion ;Tasks : Tasks_1
Source: "C:\Example\原始文件\Tasks\tasks_2.txt"; DestDir: "{app}\Tasks"; Flags: ignoreversion ;Tasks :Tasks_2
Source: "C:\Example\原始文件\Tasks\tasks_Components.txt"; DestDir: "{app}\Tasks"; Flags: ignoreversion ;Tasks :Tasks_2
;用户定义组件安装
Source: "C:\Example\原始文件\Components\Components_1.txt"; DestDir:
"{app}\Components"; Flags: ignoreversion ; Components: a1;
Source: "C:\Example\原始文件\Components\Components_2.txt"; DestDir:
"{app}\Components"; Flags: ignoreversion ; Components: a2;
Source: "C:\Example\原始文件\Components\Components_3.txt"; DestDir:
"{app}\Components"; Flags: ignoreversion ; Components: a3;
Source: "C:\Example\原始文件\Components\Components_4.txt"; DestDir:
"{app}\Components"; Flags: ignoreversion ; Components: a1 a2 a3;
;用户注册自定义Dll文件 regserver 注册 noregerror 不显示错误信息
Source: "C:\Example\原始文件\jmail.dll"; DestDir: "{app}"; Flags: ignoreversion regserver
;添加自述文件
Source: "C:\Example\原始文件\ISsample.txt"; DestDir: "{app}"; Flags: ignoreversion ;添加一个文件到缓存文件夹{Tmp} deleteafterinstall 安装后删除
Source: "C:\Example\原始文件\test.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
Source: "C:\Example\原始文件\ISsample.chm"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Example\原始文件\ISsample.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Example\原始文件\ISsample.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Example\原始文件\ISsample.ini"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Example\原始文件\ISsample.rar"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Example\原始文件\ISsample_sys.dll"; DestDir: "{win}\System32"; Flags: ignoreversion
Source: "C:\Example\原始文件\log\*"; DestDir: "{app}\log"; Flags: ignoreversion recursesubdirs createallsubdirs
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
;安装类型设置
[Types]
Name: Full ;Description:"完全安装"; Flags: iscustom
Name: Compact ;Description:"简洁安装";
Name: Custom; Description:"自定义安装";
;组件安装
[Components]
Name: c1; Description: "自定义任务3" ; Types: Full
Name: a1; Description: "安装Components_1"; Types: Full Compact Custom ;
Name: a2; Description: "安装Components_2"; Types : Full Compact
Name: a3; Description: "安装Components_3"; Types : Full
;开始菜单,桌面快捷方式
[Icons]
Name: "{group}\ISsample"; Filename: "{app}\ISsample.exe"
Name: "{group}\{cm:ProgramOnTheWeb,ISsample}"; Filename: "https://www.doczj.com/doc/d44302880.html,/"
Name: "{group}\{cm:UninstallProgram,ISsample}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\ISsample"; Filename: "{app}\ISsample.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\ISsample"; Filename: "{app}\ISsample.exe"; Tasks: quicklaunchicon
;添加一个帮助文挡
Name: {group}\ISsample 1.0.0.0 帮助文档;Filename: {app}\ISsample.chm
;用来在程序安装完成后在安装程序显示最终对话框之前执行程序常用与运行主程序显示自述文件删除临时文件
[Run]
Filename: "{app}\ISsample.exe"; Description: "{cm:LaunchProgram,ISsample}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\ISsample.txt"; Description: "查看显示自述文件"; Flags: postinstall skipifsilent shellexec
;更改显示在程序中显示的消息文本
[Messages]
BeveledLabel=HKiss科技
;卸载对话框说明
ConfirmUninstall=您真的想要从电脑中卸载ISsample吗?%n%n按 [是] 则完全删除 %1 以及它的所有组件;%n按 [否]则让软件继续留在您的电脑上.
;定义解压说明
;StatusExtractFiles=解压并复制主程序文件及相关库文件...
;用与在用户系统中创建,修改或删除注册表健值
[Registry]
Root:
HKLM ;SubKey:"Software\ISsample";ValueType:dword;ValueName:config;ValueData:10 ;Flags: uninsdeletevalue
;在执行脚本
;注意:下面是code,因为与论坛使用的代码标签重名,改为了c0de,需要改回去。
[c0de]
//全局变量
var MyProgChecked: Boolean;
//判断程序是否存在
//初始华程序事件
function InitializeSetup(): boolean;
var Isbl: boolean; //声明变量
var Isstr: string;
begin //开始
Isbl := true; //变量赋值
Isstr := '欢迎';
if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\ISsample', 'config') then
begin
MsgBox('已安装过,请先卸载在安装',mbConfirmation, MB_OK);
isbl := false;
end else
begin
//MsgBox('无值',mbConfirmation, MB_OK);
isbl := true;
end;
//下面是个麻烦的条件语句 end else 注意
//if MsgBox(Isstr, mbConfirmation, MB_OKCANCEL) = IDOK then
//begin
// isbl := true;
// MsgBox('执行了', mbConfirmation, MB_OK);
//end else
//begin
// isbl := false;
//MsgBox('执行了', mbConfirmation, MB_OK);
//end;
Result := Isbl;
end; //结束
procedure CurStepChanged(CurStep: TSetupStep);
var Isstr :string;
begin
if CurStep=ssInstall then //实际安装前调用
begin
//MsgBox('CurStepChanged:实际安装前调用', mbConfirmation, MB_OKCANCEL); //安装完成后调用
end;
if CurStep=ssPostInstall then
begin
Isstr := ExpandConstant('{tmp}\tmp.rar');
// if FileExists(Isstr) then
// begin
// MsgBox('文件存在',mbConfirmation, MB_OK);
// end else
// begin
// MsgBox('文件不存在',mbConfirmation, MB_OK);
// end;
// MsgBox('CurStepChanged:实际安装后调用', mbConfirmation, MB_OKCANCEL);
end;
end;
//下一步按钮按钮事件
function NextButtonClick(CurPageID: Integer): Boolean;
var ResultCode: Integer;
var IsSetup : Boolean;
begin
IsSetup := true ;
case CurPageID of
wpSelectDir:
MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardDirValue + '''.', mbInformation, MB_OK); //WizardDirValue路径
wpSelectProgramGroup:
MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardGroupValue + '''.', mbInformation, MB_OK); //开始菜单名
wpReady:
begin
if not RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Test', 'config') then begin
if MsgBox('程序执行需要Test.ext,是否安装!', mbConfirmation, MB_YESNO) = idYes then begin
ExtractTemporaryFile('test.exe');
if not Exec(ExpandConstant('{tmp}\test.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
MsgBox('Test.exe出错:' #13#13 ' ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
end else begin
IsSetup := false ;
end ;
BringToFrontAndRestore();
end;
end;
end;
Result := IsSetup;
end;
三.脚本格式概述
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:”作为前缀的场合中,在编译器目录中查找文件。
四、段中参数
所有脚本中的段,除 [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 目录 (在 NT 平台上是 System32)。
例如: 如果你在项目中使用了 {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:”。在 Windows NT 平台,这个目录常量等同于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,则显示内部错误原因。
外壳文件夹常量
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 版本,包括 Windows 95 和 NT 4.0。
* = 如果登录的用户缺少管理员权限,或操作系统是 Windwos 95/98/Me,“common”结构映射到“user”结构。
{group}
开始菜单文件夹路径,由用户在安装程序的选择开始菜单文件夹向导页中选定。在 Windows
NT/2000/XP/2003,这个文件夹总是创建在所有用户配置文件下,除非非用户安装程序的用户没有管理员权限,这种情况下它将创建在用户配置文件下。
{localappdata}
本地Application Data文件夹。
{sendto}
当前用户的 Send To 文件夹路径。(这里不是指公共 Send To 文件夹。)
{userappdata} & {commonappdata}
Application Data文件夹路径。
{userdesktop} & {commondesktop} *
桌面文件夹路径。
{userdocs} & {commondocs}
我的文档 (My Documents) 文件夹路径 (在 NT 4.0,私人文件夹)。
{userfavorites} & {commonfavorites} *
收藏夹文件夹路径。这些常量设置必须至少“4.1, 4” MinVersion 设置。只在 Windows 2000 和更高版本支持 {commonfavorites};如果在先前的 Windows 版本中使用,它将翻译为等同于{userfavorites} 目录。
{userprograms} & {commonprograms} *
开始菜单中程序文件夹路径。
{userstartmenu} & {commonstartmenu} *
开始菜单顶层路径。
{userstartup} & {commonstartup} *
开始菜单启动文件夹路径。
{usertemplates} & {commontemplates} *
模板文件夹路径。仅在 Windows 2000 和更高版本支持 {commontemplates},如果使用的是先前的Windows 版本,它将被翻译为等同于 {usertemplates} 目录。
其它常量
{\}
反斜杠字符。查阅本页顶部的注释获取使用 {\} 和只使用一个 \ 字符之间的差异。
{% NAME | DefaultValue }
嵌入一个环境变量值。
NAME 用于指定要使用的环境变量的名字。
DefaultValue 确定如果指定的变量在用户系统中不存在时置入的字符串。
如果你想在常量内部包含一个逗号、竖条 (“|”),或括弧后半部 (“}”),你必须通过“%-encoding.”先用一个“%”字符然后跟随它的两上数字的十六进制代码替换,从而避开它。逗号是“%2c”,竖条是“%7c”括弧后半部是“%7d”。如果你想实际使用“%”,使用“%25”。
NAME 和 DefaultValue 可以包含常量。注意,你不需要将常量中的括弧替换成上面所说的字符;上面所说的括弧后半部只在使用于其它地方时需要替换。
示例:
{%COMSPEC}
{%PROMPT|$P$G}
{cmd}
系统标准命令解释器的完整路径名。在 Windows NT/2000/XP/2003,是 Windows\System32\cmd.exe。在 Windows 95/98/Me,是 Windows\https://www.doczj.com/doc/d44302880.html,。注意当展开这个常量时 COMSPEC 环境变量不使用。
{computername}
正在运行安装程序或卸载程序的电脑名 (等同于由 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 没启用则返回一个空字符。
创建脚本
段内参数
一些常量
公共参数
安装脚本段
[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] 段