Inno Setup 详解中文资料
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=http://www.yan.com/
AppSupportURL=http://www.yan.com/
AppUpdatesURL=http://www.yan.com/
;默认安装目录
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=HTTP://www.Hkiss.COM
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: "http://www.yan.com/"
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\COMMAND.COM。注意当展开这个常量时 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] 段
[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
公共参数
[Files] 段
这个段是可选的,但对于大多数安装程序来说是必不可少的。在这里定义了安装程序需要复制到用户的系统当中的全部文件。
在安装期间,卸载程序和数据被自动的复制到应用程序的目录当中去,因此你不必手工的将它们添加到 [Files] 段。
这是一个 [Files] 段的示例:
[Files]
Source: "CTL3DV2.DLL"; DestDir: "{sys}"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
下面列出了支持的参数:
Source (必需的)
说明:
“源文件”的名称,如果没有提供全程路径时编译器会根据安装程序的源目录的路径预先设定号路径。
允许通配符,根据通配符可以在一项里面简单的指定一组文件。当使用了通配符的时候,所有匹配的文件使用相同的可选项。
当标记(flag) external 被指定的时候,Source 必须是一个在发布介质或用户的系统中已经存在的文件(或带有通配符)的全程路径。(例如“{src}\license.ini”).
示例:
Source: "MYPROG.EXE"
DestDir (必需的)
说明:
这个是文件将要被安装到用户的系统当中去的目录。它几乎总是以一个目录常量开始的。如果指定的路径不存在于用户的系统中,它将会被自动的创建。
示例:
DestDir: "{app}"
DestName
说明:
这个常数为将要安装到用户的系统中的文件指定一个新的名字。在默认的情况下,安装程序使用的是同 Source 参数一样的文件名,因此在多数情况下不需要指定该参数。
示例:
DestName: "MYPROG2.EXE"
CopyMode
默认:
normal
说明:
“复制模式”,指定文件复制的规则,必须是下列规则之一。
normal
这是最常使用的选项。如果文件已经存在于用户的系统当中并且比要复制的文件的版本更新时(由文件的版本信息决定),安装程序将会向用户提出询问是否要替换掉已经存在的文件。如果已经存在的文件不包含文件的版本信息,它将会被覆盖而不会向用户询问。
参见这个标题下面的注意中关于版本检查的重要说明。
onlyifdoesntexist
只有当用户的系统中的文件不存在时才复制文件。
alwaysoverwrite
总是覆盖已经存在的文件,甚至如果已经存在的文件比被安装的文件的版本更新的情况下也是如此。对于共享的系统文件永远也不要这样做!
alwaysskipifsameorolder
类似于 normal, 不同之处是如果遇到已经存在的文件不会向用户提出询问。当这个模式被使用时,更新的一经存在的文件时从来不会被替换的。
示例:
CopyMode: normal
Attribs
说明:
为文件指定附加的“属性”,它可以包括一个或多个属性,它们是:readonly, hidden, system. 如果没有指定这个参数,安装程序不会给文件指派任何特殊的属性。
示例:
Attribs: hidden system
FontInstall
说明:
告诉安装程序需要被安装的文件是一个字体文件,该值是被保存到注册表或 WIN.INI 文件中的字体名称,这个名称必须严格地和在资源管理器中双击字体文件看到的名称相对应。注意,安装程序会自动的在字体名称的末尾加上“(TrueType)”。
如果这个字体文件不是一个 TrueType 字体,你必须在 Flags 参数中指定 fontisnttruetype 标记。
建议在安装字体到 {fonts} 目录的时候使用复制模式参数 onlyifdoesntexist 和标记(flag)参数 uninsneveruninstall.
示例:
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Flags
说明:
“标记”,这个参数是一个附加的选项集合,可以多个选项共同使用,使用空格分开多个选项。下面列出了被支持的选项:
comparetimestampalso
(专门用途) 如果要被复制到用户系统的文件已经存在于用户的系统当中并且它们具有相同的版本信息,告诉安装程序进行时间戳(文件的日期时间属性)的比较。 在正常情况下安装程序不会覆盖已经存在的文件,但是当使用了这个标记的时候, 如果已存在的文件的时间戳比它的版本信息还要旧,安装程序在安装文件时就会覆盖它。当复制模式不是 normal 或 alwaysskipifsameorolder 这两者之一时该标记不起作用。
confirmoverwrite
当文件已经存在每个文件在复制之前始终向用户提出询问。
deleteafterinstall
告诉安装程序象平常一样复制文件,但是当安装程序结束(或被中止)之后将这个文件删除。如果释放脚本的 [Run] 段所执行的程序所需要的临时的数据时这个选项是很有用的。
此标记不能和下列标记在一起组合使用: isreadme, regserver, regtypelib, restartreplace, sharedfile, uninsneveruninstall.
external
此标记告诉 Inno Setup 不要将由 Source 参数指定的文件编译进安装程序文件中,在复制文件的时候由发布介质或用户的系统中已经存在文件代替。要获得更多详细的信息请参见 Source 参数的说明。
fontisnttruetype
如果 FontInstall 参数指定的是一个 非 TrueType 字体则使用此标记。
isreadme
该文件是“自述(README)”文件,安装程序中只有一个文件能够使用此参数。当有一个文件使用了这个参数时,用户将被询问是否愿意在安装程序结束时查看自述文件,如果选择了是,安装程序将会根据文件的类型用默认的程序打开这个文件,基于这个原因,自述文件应该具有象 .txt, .wri 或 .doc. 这样的扩展名。
注意如果安装程序要重新启动用户的计算机(比如安装了一个带有 restartreplace 参数的文件或在 [Setup] 段中的 AlwaysRestart
关键字的值为 yes),安装程序就不会向用户询问是否要查看自述文件。
overwritereadonly
始终覆盖一个只读 (read-only) 文件,如果没有这个参数,当一个已存在的只读文件要被覆盖时安装程序将会询问用户。
regserver
注册 OLE 服务器 (或称作 ActiveX 控件)。如果设置了此标记,安装程序将查找并执行 DLL/OCX 的 DllRegisterServer 输出,卸载程序调用 DllUnregisterServer. 当结合 sharedfile 标记一起使用,只有参照技术器的值归零时 DLL/OCX 才可能百取消登记 (unregistered).
要获得更多的详细信息请参见此标题最后的 注意。
regtypelib
注册类型库 (.tlb). 卸载程序将会取消注册类型库 (除非指定了 uninsneveruninstall 标记). 就像 regserver 标记那样,如果结合 sharedfile 标记一起使用,这个文件只有参照计数器的值归零时才可能被卸载。
要获得更多的详细信息请参见此标题最后的 注意。
restartreplace
此标记通常用于替换系统核心文件。如果文件已经预先存在并发现它已经被锁定结果导致安装程序无法替换该文件,安装程序就会注册此文件(对于 Windows 和 Windows NT 分别使用 WININIT.INI 和函数 MoveFileEx)在下次启动系统时被替换。当遇到这种情况,在安装过程结束时用户将被提示重新启动计算机。
要保持 Windows95/98 和 3.1 的兼容性,使用了此标记的项不应该使用长文件名,只能支持“8.3”格式的文件名。(Windows NT 和 2000 则没有此限制。)
重要提示:在 Windows NT/2000 下只有当用户具有管理员权限时使用 restartreplace 标记才可以成功的替换使用中的文件。如果用户没有管理员权限,将会显示如下的信息:“RestartReplace failed: MoveFileEx failed; code 5.”,因此,当使用 restartreplace 标记时强烈建议让你的安装程序需要管理员权限,在 [Setup] 段里面设置 "AdminPrivilegesRequired=1"。
sharedfile
(仅 Windows 95/NT 4+) 使用 Windows 的共享文件计数功能 (位于注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs). 这样会使应用程序之间能够共享一个文件,不用担心在不注意的情况下会删除文件。在每次安装共享文件的时候,与这个文件相对应的“参照计数器”的值就会加一,而每次应用程序被卸载的时候,参照计数器的值就会减一,如果参照计数器的值归零的时候,该共享文件就会被删除(在用户确认的情况下)。
绝大多数被安装到 Windows 系统目录下的文件都应当使用这个标记,包括 .OCX 和 .DPL (Delphi 3 package) 文件。不使用这个标记的仅有的一个例外是 MFC DLLs. 作为替代,应该在复制模式中使用 onlyifdoesntexist ,并结合 uninsneveruninstall 标记,或者是如果安装单独发布的 MFC DLL 的最近的版本,则使用复制模式 alwaysskipifsameorolder ,并结合使用标记 uninsneveruninstall 和 restartreplace.
当安装程序被运行在一个 NT 3.51 系统时,被安装的带有此标记的文件就再也不会被删除了。
skipifsourcedoesntexist
只有当 external 标记也使用了的时候这个标记才会有用。它会告诉安装程序如果源文件不存在的话则无任何提示的(静静的)跳过该项,如果没有使用这个标记则会显示一个错误消息。
uninsneveruninstall
从来不会卸载这个文件。此标记应当被保守地使用,而且通常它是和复制模式 onlyifdoesntexist 在一起结合使用。意思是用于安装一个特别公共的共享文件,就像 CTL3DV2.DLL 或者一个 MFC DLL, 你不应该用卸载程序去删除这个文件的原因是以后其它的应用程序也要使用到它。
示例:
Flags: isreadme
公共参数
注意
如果安装程序正在安装一个已经存在于用户的系统当中的 16 位的 DLL 或者 EXE 文件,两个文件的版本信息是不会相比较的,已存在的文件将始终被覆盖(除非当复制模式的参数是 onlyifdoesntexist),这是由一个 Windows 的限制决定的,32 位的程序就像 Inno Setup 只能读取 32 位可执行文件的版本信息。
在安装程序的最后一步安装程序会注册所有的带有 regserver 或 regtypelib 标记的文件。然而,如果 [Setup] 段关键字 AlwaysRestart 的值是 yes, 或如果有文件带有 restartreplace 标记,全部的文件将会在下次启动的时候注册(在 Windows 注册表的 RunOnce 创建一项)。
当带有 .HLP 扩展名(Windows 的帮助文件)的文件被卸载的时候,其对应的 .GID 和 .FTS 文件同样会被自动删除。
[Icons] 段
这个段是可选的,但对于大多数安装程序来说是必不可少的。它定义了所有的安装程序要在用户系统中创建的程序管理器/开始菜单的图标。它也能被用来在其它的位置创建应用程序图标(快捷方式),比如就像桌面。
卸载图标是由安装程序内部创建的,这样一来你就不需要在 [Icons] 段里面手工的添加它。默认情况下,安装程序运行在 Windows 95/NT 4+ 的时候是不创建卸载图标的 ――除了安装程序运行于 Windows NT 3.51 的时候。 要强制创建一个卸载图标,请使用 [Setup] 段里面的 AlwaysCreateUninstallIcon 关键字。
这是 [Icons] 段的一个示例:
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
下面列出了支持的参数:
Name (必需的)
说明:
要创建的应用程序图标的名称和位置。此参数可以使用任何任何“外壳文件夹常量”和“目录常量”。
注意: 记住 Windows 95/NT 4+ 的应用程序图标是作为文件直接存储的,这样一来普通文件所不允许使用的字符都不能用来作为应用程序图标的名称。
示例:
Name: "{group}\My Program"
Name: "{group}\Subfolder\My Program"
Name: "{userdesktop}\My Program"
Name: "{commonprograms}\My Program"
Filename (必需的)
说明:
应用程序图标的命令行文件名,它通常以一个目录常量开始。
示例:
Filename: "{app}\MYPROG.EXE"
Parameters
说明:
应用程序图标的可选的命令行参数,可以包括常量,在 Windows 95/NT 4+ 下运行时才可以包括引号。
示例:
Parameters: "/play filename.mid"
WorkingDir
说明:
应用程序图标的工作目录,应用程序启动的那个目录,如果没有指定该参数或该参数是空的,Windows 将使用一个默认的路径,它随着 Windows 的版本的不同而改变。这个参数可以包括常量。
示例:
WorkingDir: "{app}"
Comment
说明:
指定快捷方式的“注释”(或“描述”)栏的内容,它决定了在 Windows 2000 下的弹出信息,早期的 Windows 版本忽略这个注释。
示例:
Comment: "This is my program"
IconFilename
说明:
要被显示的一个自定义的应用程序图标(位于用户的系统中)的文件名。它可以是一个包含图标的可执行文件映像 (.exe, .dll) 或一个 .ico 文件。如果没有指定该参数或该参速是空的,Windows 将会使用文件的默认图标。这个参数可以包括常量。
示例:
IconFilename: "{app}\myicon.ico"
IconIndex
默认:
0
说明:
由 IconFilename 指定的文件的以零开始的图标索引。
示例:
IconIndex: 0
Flags
说明:
“标记”,这个参数是一个附加的选项集合,可以多个选项共同使用,使用空格分开多个选项。下面列出了被支持的选项:
closeonexit
当设置了此标记时,安装程序将设置快捷方式的“退出时关闭”属性。这个标记仅对基于 MS-DOS 的应用程序有效 (具体说就是是否具有 .pif 扩展名)。如果这个标记和 dontcloseonexit 标记都没有指定,安装程序就不会去改变“退出时关闭”的属性。
createonlyiffileexists
当设置了此标记时,安装程序只创建已存在的由 Filename 参数指定的文件的应用程序图标。
dontcloseonexit
类似于 closeonexit, 只是会导致安装程序不选定“退出时关闭”属性。
runmaximized
当设置了此标记时,安装程序将应用程序图标的“运行方式”设置为“最大化”,这样当程序被启动时以最大化的模式初始化。当安装在 Windows NT 3.51 上时该标记不起作用。
runminimized
当设置了此标记时,安装程序将应用程序图标的“运行方式”设置为“最小化”,这样当程序被启动时以最小化的模式初始化。
uninsneveruninstall
告诉卸载程序不要删除这个应用程序图标。
useapppaths
当设置了此标记时,在 Filename 参数里仅指定没有路径的文件名,以后安装程序将会从注册表的 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" 键里面自动得到预先设定好的对应该文件名的路径名。
示例:
Flags: runminimized
公共参数
[INI] 段
此段时可选的,它定义了一些 .INI 文件项,在文件被复制以后安装程序在用户的系统中的设定。
这是 [INI] 段的一个示例:
[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesection
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"
下面列出了支持的参数:
Filename (必需的)
说明:
你想要安装程序修改的 .INI 文件的文件名,它可以包括常量。如果这个参数时空的,它将写入系统的 Windows 目录的 WIN.INI 文件。
示例:
Filename: "{win}\MYPROG.INI"
Section (必需的)
说明:
要被创建的段的名称,可以包括常量。
示例:
Section: "Settings"
Key
说明:
要被设定的键的名称,可以包括常量。如果没有指定这个参数或这个参数是空的就不会创建任何键。
示例:
Key: "Version"
String
说明:
赋给键的值,可以使用常量。如果没有指定该参数不会创建该键。
示例:
String: "1.0"
Flags
说明:
“标记”,这个参数是一个附加的选项集合,可以多个选项共同使用,使用空格分开多个选项。下面列出了被支持的选项:
createkeyifdoesntexist
只有该键不存在是才能给改建赋值。
uninsdeleteentry
程序被卸载时删除该项,它可以结合 uninsdeletesectionifempty 标记一起使用。
uninsdeletesection
当程序被卸载时,删除该项所在的整个段。对于由 Windows 本身使用的段(例如一些在 WIN.INI 中的段)来说这明显不是一个好的主意,你应当将它用到自己的应用程序中的段。
uninsdeletesectionifempty
类似于 uninsdeletesection, 但是只能在该段中没有了键的时候才能删除。它可以结合 uninsdeleteentry 标记一起使用。
示例:
Flags: uninsdeleteentry
公共参数
[InstallDelete] 段
它使用的是和 [UninstallDelete] 段相同的格式,不同的是它是在安装程序的第一步被处理的。
[Messages] 段
[Messages] 段是用于定义安装程序和卸载程序所显示的消息。通常你不需要在你的脚本文件里面创建 [Messages] 段,默认情况下所有的显示消息都由 Inno Setup 包含的文件 Default.isl 定义。 (或由 [Setup] 段的关键字 MessagesFile 指定的任何文件).
然而,单独的消息可以被你的脚本中创建的 [Messages] 段覆盖。要这么做,首先你需要知道你要改变的消息的标识 (ID),在搜索 Default.isl 文件时能很容易的发现。例如,你想要改变安装向导的按钮 “下一步(&N)” 为 “向前(&F)”,该消息的标识为“ButtonNext”,那么你应该象这样创建 [Messages] 段:
[Messages]
ButtonNext=&Forward >
有些消息带有象 %1 和 %2 这样的参数,你可以重新排列参数的顺序(例如将 %2 移到 %1 的前面)并且如果需要的话可以重复使用参数(例如“
%1 ... %1 %2”)。在带有参数的消息中,使用两个连续的“%”代替一个嵌入的“%”,“%n”创建一个换行。
如果你希望将 Inno Setup 的文本翻译成其他语言修改并替换文件 Default.isl 或在你创建的脚本里面覆盖每个消息,做一个 Default.isl 的副本并另起一个名字就像 MyTranslation.isl. 在你要使用 MyTranslation.isl 的任何安装程序中,简单的将 [Setup] 段中的关键字 MessagesFile 指向该文件。
特殊用途的标识
有几个 [Messages] 段的项实际上不是用于在屏幕上显示的,它们是用于在安装程序中指定所使用的字体和字型号的。这些可选项中的每一个都有一个前导下划线字符 (“_”) 开始,请参阅 Default.isl 文件头部的注释的使用方法示例。
[Registry] 段
这个段是可选的,他定义了一些注册表项,用于在复制完文件之后创建在用户的系统中。
下面是 [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"; 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)
示例:
Root: HKCU
Subkey (必需的)
说明:
子键名称,可以包括常量。
示例:
Subkey: "Software\My Company\My Program"
ValueType
说明:
键值的数据类型,必须是下列各项之一:
none
string
expandsz
multisz
dword
binary
如果指定了 none (默认设置),安装程序将创建一个没有键值的键,在这种情况下将忽略 ValueName 和 ValueData 参数。
如果指定了 string,安装程序将创建一个字符串 (REG_SZ) 值。
如果指定了 expandsz,安装程序将创建一个扩展字符串 (REG_EXPAND_SZ) 值。这种数据类型主要用在 Windows NT 上,但是也支持 Windows 95/98.
如果指定了 multisz,安装程序将创建一个多行文本 (REG_MULTI_SZ) 值。
如果指定了 dword,安装程序将创建一个整数 (REG_DWORD) 值。
如果指定了 binary,安装程序将创建一个二进制 (REG_BINARY) 值。
示例:
ValueType: string
ValueName
说明:
要创建的键值的名称,可以包含常量。如果它是空的,将会写入“默认”(Default)值中。如果ValueType 参数被设置为 none, 该参数将被忽略。
示例:
ValueName: "Version"
ValueData
说明:
键值的数据。如果 ValueType 参数是 string, expandsz 或 multisz, 该参数是一个可以包含常量的字符串。如果数据类型是 dword, 该参数可以是一个十进制整数(例如“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} 的常量来嵌入换行(nulls)。
示例:
ValueData: "1.0"
Flags
说明:
“标记”,这个参数是一个附加的选项集合,可以多个选项共同使用,使用空格分开多个选项。下面列出了被支持的选项:
createvalueifdoesntexist
当指定了此标记时,只有当相同名称的键值不存在时安装程序才会创建该键值。如果数据类型是 none ,或者同时指定了 deletevalue 标记将忽略该标记。
deletekey
当指定了此标记时,如果该项已存在,安装程序会首先尝试去删除它,包括其中的键值和子键,然后如果 ValueType 不是 none 的话它将创建一个新的键和键值。
deletevalue
当指定了此标记时,如果该键值已存在,安装程序会首先尝试删除该键值。然后如果 ValueType 不是 none ,并且该键不存在时它将创建该键和新的键值。
dontcreatekey
当指定了此标记时,如果该键不存在于用户的系统中安装程序将不会试图创建该键或任何键值。如果改建不存在将不显示错误消息。
典型地该标记同 uninsdeletekey 标记结合使用,以便在安装时没有创建该键时确保在卸载期间删除该键。
noerror
如果安装程序在创建键或键值时无论什么原因失败不显示错误消息。
preservestringtype
该标记只用于 ValueType 参数为 string 或 expandsz 时。当指定了此标记并且该键值不存在或者已存在的键值不是字符串类型 (REG_SZ 或 REG_EXPAND_SZ) 时,该项将由 ValueType 指定的类型创建,如果该键值存在并且是一个字符串类型,该项将由与预先存在的键值相同的键值类型替代。
uninsclearvalue
当程序被卸载时,将设置该键值的数据为空的字符串 (类型 REG_SZ). 该标记不能同 uninsdeletekey 标记一起使用。
uninsdeletekey
当程序被卸载时,删除整个键,包括其下全部的键值和子键。对于由 Windows 自身使用的键来说使用该标记明显不是一个好的主意,你应当将该标记应用到你自己的应用程序键中。
uninsdeletekeyifempty
当程序被卸载时,如果该键下没有其它键值和子键则将其删除。该标记可以结合 uninsdeletevalue 标记一起使用。
uninsdeletevalue
当程序卸载时删除该键值,该标记可以结合 uninsdeletekeyifempty 标记一起使用。
注意:对于 Inno Setup 1.1 之前的版本,你可以与 none 数据类型一起使用该标记则将会成为 “delete key if empty” (如为空则删除该键)功能的标记。这个技巧现在已经不在被支持,你必须使用 uninsdeletekeyifempty 标记来实现该功能。
示例:
Flags: uninsdeletevalue
公共参数
[Run] & [UninstallRun] 段
[Run] 段是可选的,指定任意数量的程序在成功安装程序以后及显示结束对话框之前被执行。同样 [UninstallRun] 段也是可选的,指定任意数量的程序在“卸载程序”的第一步时被执行。除非下面有其它说明,两个段共有相同的语法。
每个程序按照你的脚本编排的顺序被执行,当出路 [Run]/[UninstallRun] 的项时,安装程序将会等到当前的程序终止之后才处理下一个,当然除非使用了 nowait 标记。
这是一个 [Run] 段的示例。
[Run]
Filename: "{app}\INIT.EXE"; Parameters: "/x"
下面列出了支持的参数:
Filename (必需的)
说明:
要被执行的程序,或要被打开的文件/文件夹。如果 Filename 不是一个 .exe 或 .com 文件,你必须在该项中使用 shellexec 标记。该参数可以包含常量。
示例:
Filename: "{app}\INIT.EXE"
Parameters
说明:
程序可选的命令行参数,该参数可以包含常量。
示例:
Parameters: "/x"
WorkingDir
说明:
程序起始位置的目录。如果没有指定该参数或该参数是空的,将不会改变任何特殊的目录。该参数可以包含常量。
示例:
WorkingDir: "{app}"
RunOnceId
说明:
只在 [UninstallRun] 段里面有效。如果相同的应用程序被安装超过了一次,“run”项将会重复出现在卸载记录文件里面。通过将一个字符串赋值给 RunOnceId, 你可以确保一个独特的 [UninstallRun] 项在卸载期间只被执行一次。例如,如果在卸载记录中的“run”中有两个或者更多的带有 RunOnceId 参数并被设置为“DelService”的项,则只有最后一个带有一个 RunOnceId 参数并被设置为“DelService”的项会被执行。其余的将被忽略。注意 RunOnceId 参数是大小写敏感的。
示例:
RunOnceId: "DelService"
Flags
说明:
“标记”,这个参数是一个附加的选项集合,可以多个选项共同使用,使用空格分开多个选项。下面列出了被支持的选项:
nowait
如果指定了该标记,将不会等待该项处理被结束运行之前就进行到下一个 [Run] 项,或者结束安装程序。不能结合 waituntilidle
标记一起使用。
shellexec
如果 Filename 不是一个可以直接执行的文件(一个 .exe 或 .com 文件)则该标记是必需的。当设置了该标记时,Filename 可以是一个文件夹或者任何已注册的文件类型 ―― 包括 .hlp, .doc 等等。文件将会被用户系统中的与该文件类型相关联的应用程序打开,就像用户在资源管理器中用鼠标双击该文件一样。
当在 Filename 中使用一个文件夹名称时,建议在后面加上一个反斜杠字符(例如“{group}\”),以确保可能有相同名称的程序不会被执行。同样要注意文件夹只能在 Windows 95/NT 4+ 上被打开,因为从那时起使用了一个新的资源管理器的外壳。
使用 shellexec 标记有一个缺点,那就是无法等待该过程结束,因此,它始终就像被指定了 nowait 标记一样操作。
skipifdoesntexist
如果指定了该标记,如果 Filename 不存在安装程序将不会显示错误消息。它只适用于 [Run] 段,因为卸载程序从来不显示错误消息在 [UninstallRun] 项执行失败时。
runmaximized
如果指定了该标记,将会在一个最大化的窗口启动程序或文档。
runminimized
如果指定了该标记,将会在一个最小化的窗口启动程序或文档。
waituntilidle
如果指定了该标记,它将暂停直到该过程正在等待用户的输入并且没有未决的输入时,取而代之的是等待该过程的结束。(该标记调用 WaitForInputIdle Win32 函数.) 不能结核 nowait 一起使用。
示例:
Flags: nowait
公共参数
[UninstallDelete] 段
该段是可选的。该段是用来定义一些附加的除了那些被安装的应用程序之外的要被卸载程序删除的文件或目录。使用该段来删除由你的应用程序创建的 .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"
公共参数
编译器相关
[Setup]: Bits
有效值: 32
说明:
1.3 版本以后已废弃。 1.3 以前的版本的 Inno Setup 有一个 16 位的版本,编译器将检查 Bits 关键字以判断是否使用了正确的编译器来编译脚本。以后 Inno Setup 的更新的版本只有 32 位的版本可用,你将不再需要设置该关键字。无论什么时候如果 Bits 被设置为“16”,编译器都将会失败并提示一个错误消息。
[Setup]: UseSetupLdr
有效值: yes 或 no
默认值: yes
说明:
告诉安装程序编译器要创建的安装程序的类型,如果是 yes, 将把所有的安装程序数据编译成一个单独的 SETUP.EXE (如果你愿意也可以重新命名为任何名称)。如果是 no, 将把安装程序数据编译成至少三个文件:SETUP.EXE, SETUP.0 和 SETUP.1. 你想使用 no 的仅有的理由大概是为了调试的目的。
注意:不要在一个使用了多磁盘生成(DiskSpanning=yes)的安装程序中使用 UseSetupLdr=no,当 UseSetupLdr 是 yes 时,安装程序被复制到用户的临时 (TEMP) 目录并在那里运行,这不会发生在 UseSetupLdr 是 no 的情况下,如果 Windows 试图去在磁盘上寻找 setup.exe 文件却不能找到,因为在驱动器中的是一个不同的磁盘,所以会产生错误的结果。
[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]: AppName
说明:
这个必需的关键字指定了你正在安装的应用程序的标题。不要包含版本号,那样应该使用 AppVerName 关键字。AppName 在安装程序的全部过程始终被显示,位于安装程序屏幕的左上角和向导中。
示例: AppName=My Program
[Setup]: AppVerName
说明:
这个必需的关键字的值应该和 AppName 的值相同(或相似),但是它还应当包含程序的版本号。
示例: AppVerName=My Program version 3.0
[Setup]: AppId
默认值: 如果没有指定 AppId 或者它是空值,编译器将会把 AppName 的值作为 AppId 来使用。
说明:
AppId 的值是被存储在卸载记录文件 (unins???.dat) 里面的,以便随后的安装程序检查后决定是否可以被添加到一个特定的已存在的卸载记录,安装程序只有在已存在的卸载记录中的 AppId 和当前的安装程序的 AppId 相同是才能添加到卸载记录。举一个实际的例子,比方说你右两个安装程序,一个叫做《我的程序》而另外一个叫做《我的程序 1.1 升级版》,要想把《我的程序 1.1 升级版》添加到《我的程序》的卸载记录中,你应该设置两个安装程序的 AppId 为相同的值。
AppId 还决定了卸载注册表键的实际名称,被 Inno Setup 在其末尾附加上“_is1”(因此,如果 AppId 是 “MyProgram”,那么这个键将会被命名为“MyProgram_is1”)。Inno Setup 的早于 1.3 的版本的键的名称是基于 AppVerName 的值的。
无论什么时候 AppId 都不会被显示出来,因此你要求非常隐讳的感觉很轻松。
示例: AppId=MyProgram
[Setup]: AppMutex
说明:
如果用户要为当前的应用程序升级为新的版本,然而当前的应用程序正在运行,该关键字就是用来防止这类事情的发生的,而且它也可以防止用户卸载正在运行的应用程序。它指定了一个或多个同名互斥体的名称(多个互斥体用逗号隔开),安装程序和卸载程序将会在启动时检查,如果存在,安装程序/卸载程序将显示如下的信息:“[安装程序或卸载程序] 检测到 [应用程序] 现在正在运行。请立即关闭它的全部实例,然后单机'确定’继续,或者'取消’退出。”
如果你要使用这个关键字就必须在你的应用程序中以该关键字指定的名称添加一个同名的互斥体。例如在 Delphi 和 C 中创建如下显示的同名互斥体,该代码应该在应用程序启动是被执行。
Delphi:
CreateMutex(nil, False, ’MyProgramsMutexName’);
C:
CreateMutex(NULL, FALSE, "MyProgramsMutexName");
并不是必需在应用程序被结束之前显示的销毁同名互斥体对象,系统会自动完成此功能,也不推荐你这样做,因为理想状态下同名互斥体对象必须存在直到进程被完全终止。
注意在 Windows 下同名互斥体是大小写敏感的。
要想获得有关同名互斥体的更多信息请参阅 MS SDK 帮助的 CreateMutex 主题。
示例: AppMutex=MyProgramsMutexName
[Setup]: AppCopyright
说明:
可选的,它只是用来在安装程序屏幕的右下角显示一个版权消息。
示例: AppCopyright=Copyright ? 1997 My Company, Inc.
[Setup]: AppPublisher, AppPublisherURL, AppSupportURL, AppUpdatesURL, AppVersion
说明:
所有这些关键字都是用来在 Windows 2000 的控制面板“添加/删除程序”的“支持”对话框中显示一些信息。这些设置是可选的,并且在早期的 Windows 版本中是没有作用的。
示例:
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.mycompany.com/
AppVersion=1.5
[Setup]: DefaultDirName
说明:
这是个必需的关键字,该值是默认的目录名称,用于“选择目录页”向导。通常它有一个目录常量前缀。
如果 UsePreviousAppDir 是 yes (默认值)并且安装程序发现已经安装了一个相同应用程序的早期版本,它将用先前选择的目录代替默认的目录名称。
示例:
如果你使用:
DefaultDirName={sd}\MYPROG
在 Setup 中,典型地应有如下显示:
C:\MYPROG
如果你使用:
DefaultDirName={pf}\My Program
在 Setup 中,典型地应有如下显示:
C:\Program Files\My Program
[Setup]: Uninstallable
有效值: yes 或 no
默认值: yes
说明:
它决定了 Inno Setup 的自动卸载程序是否被包含在安装程序中。如果是 yes 将包含卸载程序,如果是 no 将不会包括可卸载支持,最终用户只能用手工的方法删除属于你的应用程序的文件。
[Setup]: MinVersion
格式: a.bb,c.dd, 这里的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默认值: 4,4
说明:
该关键字让你指定运行你的软件所需要的最低的 Windows 或 Windows NT 的版本,默认值是“4,4”,实际上它也可以被设置为“4,3.51”来支持 NT 3.51 . 要防止你的程序被运行在 Windows 或 Windows NT 上,指定“0”为其中之一的最低版本。版本创建编号(Build numbers)和(或)服务包级别(Service pack levels)可以被包括在版本号中。
如果用户的系统不适合所要求的最低版本,安装程序将给出一个错误消息然后退出。
[Setup]: OnlyBelowVersion
格式: a.bb,c.dd, 这里的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默认: 0,0
说明:
该关键字让你指定不能运行你的软件的最低的 Windows 或 Windows NT 的版本(亦即高于此版本则无法运行)。指定 0 为其中之一的版本的意思是没有版本上限。版本创建编号(Build numbers)和(或)服务包级别(service pack levels)可以被包括在版本号中。
该关键字实际上是和 MinVersion 恰好相反。
[Setup]: AdminPrivilegesRequired
有效值: yes 或 no
默认值: no
说明:
如果设置为 yes, 而且用户没有管理员的权限,那么安装程序在启动的时候将给出一个错误消息(“安装这个程序时你必须以管理员的身份登录。”)。它只适用于 Windows NT/2000.
[Setup]: DisableAppendDir
有效值: yes 或 no
默认值: no
说明:
当设置为 yes 时,安装程序不会自动的添加上次组件的路径从 DefaultDirName 到用户在“选择目录”向导页上双击鼠标选择的目录。此外,它设置目录列表框的初始目录为 DefaultDirName (如果该目录存在)而不是上一级。
[Setup]: EnableDirDoesntExistWarning
有效值: yes 或 no
默认值: no
说明:
当设置为 yes 时,如果用户选择的文件夹不存在安装程序将显示一个消息框。当这项为 yes 时通常你还应该设置 DirExistsWarning=no。
[Setup]: AlwaysCreateUninstallIcon
有效值: yes 或 no
默认值: no
说明:
如果该项为 yes, 除了在控制面板的添加/删除程序中添加一项之外安装程序还将创建一个 “卸载 ...” 应用程序图标。
在 NT 3.51 上安装程序将会始终创建这个应用程序图标不管该项的设置,因为它没有包含“添加/删除程序”的部件。
[Setup]: ExtraDiskSpaceRequired
默认值: 0
说明:
正常情况下,磁盘空间的需求是依照 [Files] 段中的所有文件的合计值计算出来并在向导中被显示的。如果不管什么原因你想要增加显示的磁盘空间,以字节为单位设置 ExtraDiskSpaceRequired 的数值你想要合计该数字。 (1048576 字节 = 1 兆字节)
[Setup]: CompressLevel
有效值: 0 到 9
默认值: 7
说明:
这是一个从 1 到 9 的数字,它指定了要给文件使用多大的压缩率,0 表示不压缩,9 表示最大限度的压缩。数字越大处理的就越慢,使用高于默认值 7 的数字来压缩并没有多大的改善。
[Setup]: CreateAppDir
有效值: yes 或 no
默认值: yes
说明:
如果该值设置位 no, 将不会创建应用程序的目录,也不会显示“选择目的文件夹”向导页,并且 {app} 目录常量会等效为 {win} 目录常量。当 CreateAppDir 是 no 时如果卸载功能是允许的,卸载数据文件将会被创建于系统的 Windows 目录。
[Setup]: CreateUninstallRegKey
有效值: yes 或 no
默认值: yes
说明:
如果该值设置为 no, 安装程序将不会在控制面板的“添加/删除程序”中创建一项。这个可以用于你的应用程序只是更新一个已经存在的应用程序而不想创建其它的项,但是请不要完全的禁止卸载功能(通过 Uninstallable=no)。
当这个关键字设置为 no 时,UpdateUninstallAppName 通常也设置为 no .
[Setup]: OverwriteUninstRegEntries
说明:
1.3 版本以后已废弃。该关键字已经不再被支持并且被忽略。在 Inno Setup 1.3.6 及以后的版本中,它的功能作为如果设置为 1 优先版本的 OverwriteUninstRegEntries 关键字(这是默认的设置)。
[Setup]: DirExistsWarning
有效值: auto, yes 或 no
默认值: auto
说明:
当设置为 auto 时,即默认的设置,如果用户在选择目标文件夹向导页中选择了一个已经存在的文件夹,安装程序将显示“文件夹: … 已经存在,以愿意将程序安装到这个文件夹下面吗?”的消息,除非有相同的应用程序的其它版本已经安装并且也选择了和上次安装时相同的目录(仅如果 UsePreviousAppDir 是 yes ,即默认设置)。
当设置为 yes 时,如果用户选择了已存在的目录安装程序将始终显示“目录已存在的消息”。
当设置为 no 时,安装程序决不会显示“目录已存在的消息”。
[Setup]: DisableDirExistsWarning
有效值: yes 或 no
默认值: no
说明:
到版本 1.3.6 时已经废弃。使用 DirExistsWarning 代替。
编译器仍然承认 DisableDirExistsWarning,但是如果 DisableDirExistsWarning=no 它将被转换成 DirExistsWarning=auto, 而且 DisableDirExistsWarning=yes 被转换成 DirExistsWarning=no. 如果同时指定了 DisableDirExistsWarning 和 DirExistsWarning 关键字,则优先处理 DirExistsWarning.
[Setup]: DisableDirPage
有效值: yes 或 no
默认值: no
说明:
如果该项设置为 yes, 安装程序将不会显示“选择目标文件夹”向导页。在这种情况下,它将始终使用默认的目录名。
[Setup]: DisableFinishedPage
有效值: yes 或 no
默认值: no
说明:
如果该项设置为 yes, 安装程序将不会显示“安装完成”向导页,并且在一次安装过程结束后会立即关闭安装程序。如果在 [Run] 段里面有一个要被执行的程序使用了 nowait 标记,并且你不希望在该程序被启动之候安装完成窗口还逗留在后台,此时该项是有用的。
注意安装程序认为要重新启动计算机,或如果指派了一个文件给 [Setup] 段的 InfoAfterFile 关键字,都将忽略 DisableFinishedPage 关键字。象这些情况,仍然会显示“安装完成”向导页。
[Setup]: DisableProgramGroupPage
有效值: yes 或 no
默认值: no
说明:
如果该项设置为 yes, 安装程序将不会显示“选择程序组”向导页。在这种情况下,它将使用由 [Setup] 段的 DefaultGroupName 关键字指定的组名,或者“(Default)”如果没有指定组名的话。
[Setup]: AlwaysUsePersonalGroup
有效值: yes 或 no
默认值: no
说明:
通常对于 Windows NT/2000, 如果用户具有管理员权限,Inno Setup 的 {group} 常量被指向全部用户(All Users)的开始菜单。如果该项被设置为 yes, 它将始终使用当前用户的私人文档(Profile)。
[Setup]: OutputBaseFilename
默认值: setup
说明:
这个关键字允许你为输出的安装程序文件指定一个不同的名字,这样一来你就不用在运行完安装编译器以后手工为它们改名。
注意:如果 UseSetupLdr 被设置为 no, 输出文件 SETUP.0 和 SETUP.MSG 的名字是不会被改变的,因为它们是强制编码(hard-coded)的名字。
示例: OutputBaseFilename=MyProg100
[Setup]: UninstallFilesDir
默认值: {app}
说明:
指定存放卸载程序文件“unins*.*”的目录。
注意:对于同一个应用程序的更新版本不应该将它赋一个不同的值,这样一来安装程序就不能在以前的版本中找到卸载记录,因此就不能添加到该应用程序。
示例: UninstallFilesDir={app}\uninst
[Setup]: UninstallDisplayIcon
说明:
让你指定一个确定的图标文件(可以是一个可执行文件或者一个 .ico 文件)来显示在 Windows 2000 控制面板的“添加删除程序”的卸载项当中,文件名通常以一个目录常量开始。
如果指定的文件包含多个图标,你可以加上“,n”后缀以指定一个图标索引,这里的 n 是以零为基数的索引数值。
如果没有指定该关键字或者该关键字为空,Windows 将自己选择一个图标,当然这个可能是你不太喜欢的图标。
示例:
UninstallDisplayIcon={app}\MyProg.exe
UninstallDisplayIcon={app}\MyProg.exe,1
[Setup]: UninstallDisplayName
说明:
让你为控制面板的“添加/删除程序”中的程序项指定一个制定的名字。如果未指定该关键字或该关键字为空,安装程序将使用 [Setup] 段中的 AppVerName 关键字的名字(就像老版本的 Inno Setup 一样)。
由于 Windows 9x 的控制面板的“添加/删除程序”项的限制,UninstallDisplayName 不能超过 63 个字符。
示例:
UninstallDisplayName=My Program
[Setup]: UninstallIconName
说明:
你能够使用该关键字给安装程序创建的卸载图标指定一个制定的名字(参见AlwaysCreateUninstallIcon)。如果该关键字为空或没有指定,安装程序将其命名为“卸载 App-Name”,这里的“App-Name”是由 [Setup] 段的关键字 AppName 指定的。
注意: 记住 Windows 95/NT 4+ 的应用程序图标是作为文件直接存储的,这样一来普通文件所不允许使用的字符都不能用来作为应用程序图标的名称。
示例: UninstallIconName=Uninstall My Program
[Setup]: UninstallLogMode
有效值: append, new 或 overwrite
默认值: append
说明:
append, 默认设置,如果可能,通知安装程序添加到一个已存在的卸载记录。
new, 同 Inno Setup 1.3 版本以前的版本的行为是一致的,通知安装程序始终创建一个新的卸载记录。
overwrite 通知安装程序要覆盖相同的应用程序的任何已存在的卸载记录而不是添加(这是不被推荐的)。相同的规则添加到已存在的记录应用于覆盖已存在的记录。
示例: UninstallLogMode=append
[Setup]: UpdateUninstallAppName
有效值: yes 或 no
默认值: yes
说明:
如果为 yes, 当添加到一个已存在的卸载记录时,安装程序将以当前的安装程序的 AppName 替换在卸载记录中的 AppName. 卸载记录中的 AppName 决定了卸载程序显示的标题。如果你的安装程序只是一个升级或附加到一个已存在的程序,并且你不想改变卸载程序的标题,那么你可以设置该值为 no.
[Setup]: DefaultGroupName
说明:
该关键字的值是默认的“程序管理器/开始菜单”程序组的名称,它被“选择程序组”向导页使用。如果该关键字为空或没有指定的话,它将会使用“(默认)”作为其名称。
注意: 记住 Windows 95/NT 4+ 的应用程序图标是作为文件直接存储的,这样一来普通文件所不允许使用的字符都不能用来作为应用程序图标的名称。
示例: DefaultGroupName=My Program
[Setup]: DisableStartupPrompt
有效值: yes 或 no
默认值: no
说明:
如果该值被设为 yes, 安装程序将不会显示“准备安装…,你希望继续吗?”的提示。
如果 UseSetupLdr 被设置为 no 该值将不会产生作用。
[Setup]: DiskSpanning
有效值: yes 或 no
默认值: no
说明:
决定编译器是创建一个单独的 SETUP.EXE, 还是把它分割成为几个文件以适合于放到分开的软磁盘上。当这个关键字被设置为 yes, 磁盘生成是允许的,将输出文件 SETUP.EXE 和 SETUP.1 复制到第一个磁盘上,SETUP.2 复制到第二个磁盘上,等等。
[Setup]: DiskSize
默认值: 1457664 (一个 1.44MB 软磁盘的大小)
说明:
指定了一个磁盘的可用空间统计数值的字节值。
如果 [Setup] 段的关键字 DiskSpanning 没有允许磁盘输出则这个关键字就会被忽略。
[Setup]: DiskClusterSize
默认值: 512 (软磁盘的标准的簇的大小)
说明:
它指定了磁盘介质的簇的大小。安装编译器需要知道该值为了适当的填充每一个磁盘的容量。
如果 [Setup] 段的关键字 DiskSpanning 没有允许磁盘输出则这个关键字就会被忽略。
[Setup]: ReserveBytes
默认值: 0
说明:
指定了应该在第一张磁盘上保留的最小空闲字节数,这样可以用于将其它的不是安装程序部分的文件复制到第一张磁盘上,比如说一个自述文档。
安装编译器将把这个数值取整为最接近的簇。
如果 [Setup] 段的关键字 DiskSpanning 没有允许磁盘输出则这个关键字就会被忽略。
[Setup]: DontMergeDuplicateFiles
有效值: yes 或 no
默认值: no
说明:
通常两个具有相同的源文件的项将只会被存储和压缩一次。如果你的安装程序中有一组相同的文件,在脚本中使他们只想相同的源文件,这样你的安装程序的能够明显缩小。如果由于某些原因你希望禁止这个功能,设置该关键字为 yes .
[Setup]: AllowNoIcons
有效值: yes 或 no
默认值: no
说明:
这个用于决定安装程序是否显示一个“不创建任何图标”的复选框,这样使用户能够跳过创建程序图标的过程。如果该项为 no 将不会显示复选框,如果为 yes 则将被显示。
如果安装程序运行在 NT 3.51 上时选择了“不创建任何图标”的复选框,那么用户能够彻底卸载应用程序的办法只有执行应用程序目录下面的 unins???.exe 文件。因为这个原因,我们推荐你保留 AllowNoIcons 设置为 no.
[Setup]: AllowRootDirectory
有效值: yes 或 no
默认值: no
说明:
当设置为 no 时,即默认的,用户将不能被允许在“选择目录页”向导中输入一个根目录(就像“C:\”)。
[Setup]: AlwaysRestart
有效值: yes 或 no
默认值: no
说明:
当设置为 yes, 安装程序始终会在一次成功的安装过程结束后提示用户重新启动系统,而不管这是不是必须的(因为在 [Files] 段的一些项当中带有 restartreplace 标记)。
[Setup]: MessagesFile
默认值: compiler:DEFAULT.ISL
说明:
指定要读取的默认信息的文件的名称。运行安装编译器时该文件必须位于你的安装程序的源目录中,除非指定了一个全程路径名称,或者路径名是以“compiler:”作为其前缀,这样它会在编译器的目录当中查找该文件。
当指定了多个文件时,它们时按照它们所排列的顺序被读取的,因而最后的消息文件中的消息就会覆盖其先前的消息文件。
请参见 [Messages] 段帮助主题关于 .isl 文件格式的详细资料。
示例: MessagesFile=compiler:czech.isl
MessagesFile=compiler:default.isl,compiler:mymessages.isl
[Setup]: LicenseFile
说明:
指定一个可选的许可协议文件的名称,为 .txt 或 .rtf (丰富文本)格式,它在用户选择程序的目标文件夹之前被显示。运行安装编译器时该文件必须位于你的安装程序的源目录中,除非指定了一个全程路径名称,或者路径名是以“compiler:”作为其前缀,这样它会在编译器的目录当中查找该文件。
示例: LicenseFile=license.txt
[Setup]: InfoBeforeFile
说明:
指定一个可选的自述文档(Readme)的名称,为 .txt 或 .rtf (丰富文本)格式,它在用户选择程序的目标文件夹之前被显示。运行安装编译器时该文件必须位于你的安装程序的源目录中,除非指定了一个全程路径名称,或者路径名是以“compiler:”作为其前缀,这样它会在编译器的目录当中查找该文件。
示例: InfoBeforeFile=infobefore.txt
[Setup]: InfoAfterFile
说明:
指定一个可选的自述文档(Readme)的名称,为 .txt 或 .rtf (丰富文本)格式,它会在安装成功以后被显示。运行安装编译器时该文件必须位于你的安装程序的源目录中,除非指定了一个全程路径名称,或者路径名是以“compiler:”作为其前缀,这样它会在编译器的目录当中查找该文件。
这个不同于代有 isreadme 标记的文件项,它的文本是作为向导的一页被显示的,而后者显示于一个单独的记事本窗口。
示例: InfoAfterFile=infoafter.txt
[Setup]: ChangesAssociations
有效值: yes 或 no
默认值: no
说明:
当设置为 yes 时,安装程序会在其安装过程结束时告诉资源管理器要刷新它的文件关联信息,并且卸载程序在其卸载过程结束时也会去这样作。如果安装程序运行在 Windows NT 3.51 上时这个关键字时不起作用的。
如果你的安装程序创建了一个文件关联但是没有将 ChangesAssociations 设置为 yes, 该文件类型的正确的图标很可能不会被显示知道用户注销或者重新启动计算机。
[Setup]: UsePreviousAppDir
有效值: yes 或 no
默认值: yes
说明:
当该关键字被设置为 yes 时,即默认值,再安装程序启动时将会在注册表中查找看是否有相同的应用程序已经被安装,如果是这样,它将使用先前的安装程序的目录作为默认的目录提供给用户的向导。
注意只有 Inno Setup 1.3.1 和其后续版本才会在注册表中保存安装的目录,就是说安装程序不会“看见”老版本的 Inno Setup 安装的应用程序。
[Setup]: UsePreviousGroup
有效值: yes 或 no
默认值: yes
说明:
当该关键字被设置为 yes 时,即默认值,再安装程序启动时将会在注册表中查找看是否有相同的应用程序已经被安装,如果是这样,它将使用先前的安装程序的开始菜单组作为默认的开始菜单组提供给用户的向导。
注意只有 Inno Setup 1.3.1 和其后续版本才会在注册表中保存安装的目录,就是说安装程序不会“看见”老版本的 Inno Setup 安装的应用程序。
[Setup]: Password
说明:
指定一个口令,在安装过程开始时提示用户输入。
如果使用了一个口令,重要的是要紧记并没有加密技术被使用,并且 Inno Setup 的源代码是完全开放的,对于一个个别的富有经验的人来说从安装程序中移去口令的保护不是十分困难的。使用口令仅仅起到一个阻止那些没有得到授权的人使用你的安装程序。
[Setup]: WizardImageFile
默认值: compiler:WIZIMAGE.BMP
说明:
指定要在安装程序向导左侧显示的位图文件的名称。运行安装编译器时该文件必须位于你的安装程序的源目录中,除非指定了一个全程路径名称,或者路径名是以“compiler:”作为其前缀,这样它会在编译器的目录当中查找该文件。
当前还不支持 256 色位图,因为尚未使用调色板句柄。位图的最大尺寸是 117x231 象素。
示例: WizardImageFile=myimage.bmp
[Setup]: WindowShowCaption
有效值: yes 或 no
默认值: yes
说明:
如果设置为 no, 安装程序将会是真正的“全屏幕” ―― 它没有标题栏和边框,并且会位于任务栏的前面。
[Setup]: WindowStartMaximized
有效值: yes 或 no
默认值: yes
说明:
如果设置为 no, 安装程序启动时不会初始为最大化,这样会导致藏起任务栏。
[Setup]: WindowResizable
有效值: yes 或 no
默认值: yes
说明:
如果设置为 no, 在安装程序背景窗口不是最大化状态时用户将不能调整其大小。
[Setup]: WindowVisible
有效值: yes 或 no
默认值: yes
说明:
如果设置为 no, 安装程序背景窗口将是不可见的 ―― 只有向导和安装过程窗口。
[Setup]: WizardImageBackColor
有效值: 一个值形如 $bbggrr, 这里的 rr, gg 和 bb 指定了两位的亮度值(以十六进制表示)分别为红色,绿色和蓝色。或者也可以是下列预定义的颜色名称之一:clBlack(黑色),clMaroon(暗红),clGreen(绿色),clOlive(橄榄绿),clNavy(深蓝),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(浅灰),clRed(红色),clLime(浅绿),clYellow(黄色),clBlue(蓝色),clFuchsia(紫红),clAqua(青绿),clWhite(白色)。
默认值: clTeal
说明:
该关键字指定了用于填充向导位图(由 WizardImageFile 指定)周围的未使用区域的背景颜色。
[Setup]: SourceDir
说明:
给脚本指定一个新的源目录sourcedirectorynotes。
示例: SourceDir=c:\files
[Setup]: OutputDir
说明:
给脚本指定一个新的输出目录,这是安装编译器放置输出的 SETUP.* 文件的地方。默认情况下它在含有脚本文件的目录下创建一个“OUTPUT”子目录。
示例: OutputDir=c:\output
其它
关于 Program Files 目录的说明
Program Files 目录历来就只被 Windows 95/NT 4+ 支持。在 NT 3.51 上一个“模拟的” Program Files 目录被创建于系统驱动器目录下硬代码名称“\Program Files”。
源目录
默认情况下,如果没有包含全程路径名,安装编译器期望在与脚本文件相同的目录中找到在脚本中 [Files] 段引用的 Source 参数的文件和 [Setup] 段引用的文件。要指定一个不同的源目录,在脚本的 [Setup] 段中创建一个 SourceDir 关键字。
使用版本创建编号和(或)服务包级别
在 MinVersion 和 OnlyBelowVersion 中的版本号能够包含版本创建编号(Build numbers)和(或)服务包级别(service pack levels) 例如:5.0.2195, 5.0sp1, 5.0.2195sp1。如果一个版本创建编号没有被指定或者为零,安装程序将不会检查版本创建编号。如果一个服务包级别没有被指定或者为零,安装程序会将其解释为“没有服务包”。注意安装程序只能在 NT 4.0 及其后续版本中检查服务包级别,所以指定“3.51sp5”去检查NT 3.51 SP5 将不会工作。
关于"yes" 和 "no" 的说明
为了保持和旧版本 Inno Setup 的兼容性,1 和 0 可以分别的代替 yes 和 no 使用。
另外,它也允许 true 和 false 代替 yes 和 no 使用。
相同的应用程序
“相同的应用程序” 涉及到两个分开的安装程序共享一个相同的 AppId 设置 (或者如果 AppId 没有设置,那么有相同的 AppName 设置).
添加到已存在的卸载记录
当一个新版本的应用程序被安装并覆盖一个已存在的版本时,并不创建一个新的卸载记录文件(unins???.dat),安装程序会在默认的情况下寻找并添加到一个已存在的属于相同的应用程序并在相同的目录中的卸载记录文件中,这样,当应用程序被卸载时,所有的不同的安装程序所做的改变将会被撤销(开始于最近的安装程序)。
卸载程序将会使用最近的应用程序的安装程序的消息(messages)。然而,有一个例外:如果一个安装程序被一个旧版本的 Inno Setup 所创建,它包含一个比用户系统中的已存在的版本还要旧的卸载程序,两个卸载程序的消息都不会被替换,尽管在这种情况下卸载记录仍然会被添加,因为它的文件格式是向后兼容的。
卸载程序显示的应用程序的名称将会与最近安装程序中 [Setup] 段的关键字 AppName 的值相同,除非 UpdateUninstallAppName 被设置为 no.
卸载记录添加功能是不熟悉的 Inno Setup 1.3。如果你希望禁止它,设置 [Setup] 段的关键字 UninstallLogMode.
注意:安装程序只能添加到被 Inno Setup 1.3.1 (及其后续版本)的安装程序创建的卸载记录文件中。
其二:帮助汉译
前言:
Inno Setup 是一个非常优秀的安装制作器,它可以很轻易地制作出界面美观,风格独特的安装程序。它所提供的向导更是让你从繁琐的脚本中解脱出来,就算你不懂脚本语言也能轻易地制作功能强大的安装程序。
但如果想更好地使用该制作器或制作出功能更强大的安装程序,了解其脚本格式及语法是必须的 ,它本身所附带的帮助文件也基本上提供了全面的叙述和丰富的例子。
该制作器是基于脚本来做的,脚本大致上分成若干的段,各段掌管不同的功能。其详细的功能见段内叙述。
[Setup]段 这段包含了安装和卸载时用到的全局设置, 和你所创建的安装程序的必备指令。下面是一个实例:
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}\My Program
DefaultGroupName=My Program 以下指令可以放置在[Setup]段中: (粗体的指令是必须要有的) 编译器相关指令: * Compression * DiskClusterSize * DiskSize * DiskSpanning * DontMergeDuplicateFiles * InternalCompressLevel * OutputBaseFilename * OutputDir * ReserveBytes * SourceDir * UseSetupLdr 安装程序相关指令:(这些指令将影响设置程序的操作, 或保存起来在日后卸载时使用。) * AdminPrivilegesRequired * AllowNoIcons * AllowRootDirectory * AllowUNCPath * AlwaysCreateUninstallIcon * AlwaysRestart * AlwaysShowComponentsList * AlwaysShowDirOnReadyPage * AlwaysShowGroupOnReadyPage * AlwaysUsePersonalGroup * AppName * AppId * AppMutex * AppPublisher * AppPublisherURL * AppSupportURL * AppUpdatesURL * AppVersion * AppVerName * ChangesAssociations * CreateAppDir * CreateUninstallRegKey * DefaultDirName * DefaultGroupName * DirExistsWarning * DisableAppendDir * DisableDirPage * DisableFinishedPage * DisableProgramGroupPage * DisableReadyMemo * DisableReadyPage * DisableStartupPrompt * EnableDirDoesntExistWarning * ExtraDiskSpaceRequired * InfoAfterFile * InfoBeforeFile * LicenseFile * MessagesFile * MinVersion * OnlyBelowVersion * Password * Uninstallable * UninstallDisplayIcon * UninstallDisplayName * UninstallFilesDir * UninstallIconName * UninstallLogMode * UpdateUninstallLogAppName * UsePreviousAppDir * UsePreviousGroup * UsePreviousSetupType * UsePreviousTasks 润饰: 使用这些指令仅是为了安装程序的显示效果。 * AppCopyright * BackColor * BackColor2 * BackColorDirection * BackSolid * FlatComponentsList * ShowComponentSizes * UninstallStyle * WindowShowCaption * WindowStartMaximized * WindowResizable * WindowVisible * WizardImageBackColor * WizardImageFile * WizardSmallImageFile * WizardStyle 不常使用的: * Bits * CompressLevel * DisableDirExistsWarning * OverwriteUninstRegEntries [Types]段 这段是可选段。它定义了安装程序时选择安装部件页向导中的所有安装类型。如果你在[Components]段中定义了部件,但却没有定义[Type]类型,则在编译期间会创建一系列默认的安装类型。如果你使用默认语言(英文)的信息文件,则这些类型会与下面的例子相同。以下是[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: "Full installation" Flags :该参数是一个附加的可选项。多个选项可以用空格来隔开。下面是该参数所支持的选项: iscustom :告诉安装程序该类型是一个自定义类型,用户可以在安装时随时地手动更改部件集合,安装程序会将安装类型转成自定义类型。注意:如果你定义了一个自定义类型,则安装程序就只允许用户选择一个安装类型进行安装,这样用户就再也无法随意地选择要安装的部件。 例:Flags: iscustom [Components]段 这段是可选段,它定义了某一安装类型下,安装程序显示在选择部件页中的所有部件。下面是 [Components]段的一个实例: [Components] Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed Name: "help"; Description: "Help Files"; Types: full 上面的实例生成两个部件:"main"部件在用户选择"full"或"compact" 或 "custom"安装类型时都会被安装,而"help"部件则在用户选择"full"安装类型时才被安装,一但当用户自定义安装并选择了安装该部件时,即使该部件没有指定"custom"类型,它也同样会被安装。 下面是该段所支持的参数列表: Name (必须) :该部件的内部名称。例:Name: "help" Description (必须):部件的说明,可以包含常量。该说明是在安装时显示给用户看的。 例: Name: "Help Files" Types :由空格分隔的该部件所属类型列表。如果用户选择的安装类型包含在此列表中,则该部件将被安装。如果没有使用fixed 标志,则任何自定义的安装类型在该列表中将被安装程序忽略。 例:Types: full compact ExtraDiskSpaceRequired :该部件所需的磁盘空间,类似于[Setup]段的ExtraDiskSpaceRequired 指令。 例:ExtraDiskSpaceRequired: 0 Flags :该参数是一个额外的可选项,可用空格隔开多个选项。下面是该参数所支持的选项: fixed :告诉安装程序,用户不能在安装过程中手动地选择或取消选择该部件。 restart :告诉安装程序,在安装该部件后询问用户是否重新启动计算机。不管怎样,如果[Files]段的某项带有restartreplace 标记就必须加上此参数。类似于AlwaysRestart ,但就是每个部件都要加上。 disablenouninstallwarning :告诉安装程序,如果用户安装了该部件又在卸载时没有选择卸载该部件时是否警告用户,该部件没有卸载。 考虑到你的部件的复杂性,你可以尝试使用[InstallDelete]段。这样该标记就可以自动地卸载没有选择卸载的部件。 例:Flags: fixed [Tasks]段 这段是可选段,它定义了安装过程中,用户所自定义所有需要安装程序执行的任务。这些任务将以复选框或选择按钮的形式出现在选择另外的任务页中。下面是[Tasks]段的一个实例: [Tasks] Name: desktopicon; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Components: main Name: quicklaunchicon; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:"; Components: main; Flags: unchecked Name: associate; Description: "&Associate files"; GroupDescription: "Other tasks:"; Flags: unchecked 下面是该段的参数列表: Name (必须) :任务的内部名称。 例: Name: "desktopicon" Description (必须) :任务的说明文字,可以包含常量。该说明是在安装过程中给用户看的。 例: Description: "Create a &desktop icon" GroupDescription :一组任务的组说明,也可以包含常量。同一组内连续的任务说明要以一个文本标签来分组。该文本标签显示了组的说明。 例: GroupDescription: "Additional icons" Components :一个以空格分隔的该任务所属组件列表。如果用户选择的组件包含在此列表中,则该任务会被显示出来。而一个没有Components 参数的任务总是会显示出来的。 例: Components: main Flags :该参数是一个额外的可选项,可用空格隔开多个选项。下面是该参数所支持的选项: checkedonce : 告诉安装程序,当安装程序发现该软件前一个版本已经安装了的时候,该任务就不能再勾选。该标记不能与unchecked 标记一齐使用。 如果[Setup]段中没有UsePreviousTasks 指令, 该标记将不会生效。 exclusive :告诉安装程序,该任务与其他拥有相同组说明或使用exclusive标记的任务是相互排斥的。这意味着安装程序将会显示选择按钮而不是复选框。在一个组中不能只有一个exclusive 标记的任务,否则安装程序将自动地将它变成非exclusive 标记的任务(用复选框代替选择按钮)。 restart :告诉安装程序,如果该任务被选择,则在安装结束后询问用户是否重新启动计算机。不管怎样,如果[Files]段的某项带有restartreplace 标记就必须加上此参数。类似于AlwaysRestart ,但就是每个任务都要加上。 unchecked :告诉安装程序,该任务在开始时不该被勾选。该标记不能与checkedonce 一齐使用。 [Dirs]段 这段是可选段,而且是大多数简单安装程序中不常使用的。这段用于自动创建用户选择的软件安装目录之外的目录。创建应用软件目录下的子目录是该段最普通的用法。你无需在将[Files]段中的文件复制到这些子目录内前就创建他们,因此该段的主要用途是用于创建空的子目录。下面是[Dirs]段的一个实例: [Dirs] Name: "{app}\data" Name: "{app}\bin" 上面的实例将会在安装程序创建软件目录后创建两个软件目录下的子目录。下面是该段支持的参数列表: Name (必须):要创建的目录名,通常会以一个目录常量开头。 例:Name: "{app}\MyDir" Attribs :为该目录指定属性。属性包括: readonly, hidden, system。若不指定该参数,安装程序不会为目录指定任何属性。如果目录已经存在,则指定的属性会该目录原有的属性组合后作为新的属性使用。 例: Attribs: hidden system Flags :该参数是一个额外的可选项,可用空格隔开多个选项。下面是该参数所支持的选项: deleteafterinstall :告诉安装程序以普通的形式创建该目录,但安装结束(或非正常终止)后,如果目录为空就将其删除。这在脚本的[Run]段中需要执行一个程序来解开临时数据时是非常有用的。该标记不会删除安装前就存在的目录。 uninsalwaysuninstall :告诉卸载程序总是尝试当目录为空时将其删除。正常情况下,卸载程序只会尝试删除软件安装前不存在的目录,即安装时所创建的目录。 uninsneveruninstall :告诉卸载程序不要尝试删除该目录。默认情况下,卸载程序会删除[Dirs]段中的空目录。例:Flags: uninsneveruninstall [Files]段 虽然这段是可选段,但很多的安装都需要到。它定义了安装程序要复制到用户系统中的所有文件。安装期间,卸载程序和卸载数据会被自动地复制到所装软件的目录中,所以你无需干预这两个文件。下面是[Files]段的一个实例: [Files] Source: "CTL3DV2.DLL"; DestDir: "{sys}"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall Source: "MYPROG.EXE"; DestDir: "{app}" Source: "MYPROG.HLP"; DestDir: "{app}" Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme 下面是该段所支持的参数列表: Source (必须) :源文件名。如果你不给出一个完整的路径,编译器将自动补上安装的源目录路径在此文件名前。可以通过使用通配符来达到在一行中指定一组的文件。当使用通配符时,所有匹配的文件将会应用相同的选项。当指定了external 标记时,源文件名必须是一个带有完整路径的文件(或通配文件)并存在于发行介质或用户的系统上。常量只能够在指定了external标记时使用,因为编译本身不作常量的翻译。 例:Source: "MYPROG.EXE" 或 Source: "Files\*" DestDir (必须) :指定文件安装到用户系统中的目录。它几乎总是以目录常量开头的。如果指定的目录在用户系统中不存在,它将自动创建该目录并在卸载后目录为空时自动删除。 例: DestDir: "{app}" 或 DestDir: "{app}\subdir" DestName :该参数指定了该文件被安装到用户的系统后的新文件名。默认情况下,安装程序使用源文件名。因此大多数都不需要该参数。 例: DestName: "MYPROG2.EXE" CopyMode :复制文件时使用的办法。包括: normal :这是最常用的选项。如果用户的系统中已经有相同版本的同名文件时,原来已有的文件将不会被取代。如果原有的文件版本比要复制的新,将会询问用户是否替换原有文件。如果已存在的文件没有版本信息时将不会询问用户就将其覆盖。 onlyifdoesntexist :只在用户系统中没有该文件时复制。 alwaysoverwrite :总是覆盖已有的文件,即使已有的文件的版本比要复制的要新。在安装共享的系统文件时不要使用此选项。 alwaysskipifsameorolder :同normal选项相同,但有点例外的是当有已存在的文件时将不会提示用户。使用此选项时,新版的文件将保证不会被改写。 例:CopyMode: normal Attribs :为该文件指定属性。属性包括:readonly, hidden, system.。如果不指定该参数,安装程序将不会为文件指定任何属性。例:Attribs: hidden system FontInstall :告诉安装程序,要复制的是一个字体文件,需要到用户的系统中。该参数的值将会被保存到注册表或WIN.INI中。该值必须和你在资源管理器中双击该字体文件时看到的字体名一致。 注:安装程序将会自动增加" (TrueType)"在该值后面。如果不是TrueType 的字体文件,你必须使用 Flags参数标明为fontisnttruetype 。 建议你在安装字体时,使用onlyifdoesntexist 模式的CopyMode 并加上值为uninsneveruninstall 的Flag参数。在Windows 2000/XP中,要安装字体时要求用户必须是超级用户或管理员组的成员。而Windows NT 4.0 及早期的版本中则没有这个限制,任何人都可以安装字体。 例:Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall Flags :该参数是一个额外的可选项,可用空格隔开多个选项。下面是该参数所支持的选项: allowunsafefiles :禁止编译自动检查不安全的文件。强烈建议你不要使用该选项,除非你绝对相信自己在干什么。 comparetimestampalso :(特别用途) 让安装程序在遇到已有文件与该文件具有相同版本时比较两者的时间戳。通常,在这情况下,安装程序不会尝试去改写已有的文件,但使用该选项后,当已有文件的时间戳比要安装的文件旧时就会改写它。当copy mode不是normal或alwaysskipifsameorolder时,该标记选项不会生效。 保留该选项只是为了向后兼容,建议不要使用。如果一定要用,当用户改变系统的时区或发改变时制时,NT的用户可能会遇到"existing file is newer" 的错误信息。另外,如果在NTFS下编译的安装程序在FAT上安装时也会出现类似的错误,因为FAT分区只有2位的秒数精度。 confirmoverwrite :如果文件已存在,总是要求用户确认。 deleteafterinstall :让安装程序正常地复制文件,但当安装结束或非法终止后即将其删除。这在脚本[Run]段中的程序需要解开临时数据时相当有用。该选项不会令已有的文件在安装过程中被删除。该选项不能与isreadme, regserver, regtypelib, restartreplace, sharedfile, 或 uninsneveruninstall 等标记合用。 external :该标记不让Inno Setup 将Source 参数指定的文件包含在安装文件内。但会将该文件复制到发行介质上或用户的系统中。详见Source参数的说明。 fontisnttruetype :当使用FontInstall参数并且所安装的文件不是TrueType字体时要使用此标记。 isreadme :标明该文件是一个说明文件。安装文件中只能有一个文件带此标记。当安装结束后,安装程序会询问用户是否想查看该说明文件。如果用户回答是,则会使用此类文件所关联的程序打开此文件。为此,说明文件最好是TXT或DOC等类型的文件。 注意:当安装文件带有restartreplace 标记或在[Setup]段中AlwaysRestart 属性为yes 而重新启动了计算机时,用户将无机会看到说明文件。 noregerror :当与regserver 或 regtypelib 标记结合使用时,安装程序不会在注册出错时显示错误信息。 onlyifdestfileexists :仅在用户系统中无同名文件存在时复制。该标记在你的补丁安装中,并且你不想在用户先前没有安装该文件时显得很有用。 overwritereadonly :总是覆盖只读文件。当没有该标记时,安装程序会询问用户是否要覆盖已有的只读文件。 recursesubdirs :让编译器在源目录下搜索源文件或通配文件。该标记不能与external 标记合用。 regserver :注册OLE服务器(如ActiveX控件)。通过放置此标记,安装程序将会找到并执行注册DLL/OCX用的DllRegisterServer来注册它。卸载时会调用DllUnregisterServer来卸载它。当与sharedfile 合用时,只会在其引用参照计数器为0时才将它卸载。有关的详细说明请查阅下面的说明。 regtypelib :注册类型函数库(.tlb)。卸载程序将会卸载该类型库(除非指定了uninsneveruninstall标记)。当与sharedfile 合用时,只会在其引用参照计数器为0时才将它卸载。有关的详细说明请查阅下面的说明。 restartreplace :该标记通常在替换系统核心文件时使用。如果文件事先已经存在并且在安装程序替换它时被锁定的话,安装程序会记下该文件(在WININIT.INI中或使用MoveFileEx命令,视乎是在Windows 或 Windows NT下),等到系统在下次启动时才替换。如果遇到此情况时,安装程序会提示用户在安装结束后重启。为保持在Windows 95/98 and Me下的兼容性,请不要在此使用长文件名,因此只支持"8.3"格式。(Windows NT下就没有这个限制) 重点:在Windows NT下, 要想使用restartreplace 标记成功替换一个正在使用的文件,用户必须拥有管理权限。否则,将会出现错误并显示如下提示: "RestartReplace failed: MoveFileEx failed; code 5." 因此,极力建议你在[Setup]段中加入"AdminPrivilegesRequired=1"命令以保证用户具有管理级的权限。 sharedfile :(Windows 95/NT 4+ ) 使用共享文件计数特性,(在注册表中的位置为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs)。这使得应用软件间可以共享一个文件时而无需担心文件被不小心删除。文件在每次安装时,参照计数器将会加1,当应用软件使用的文件在卸载时,计数器将被减1。如果计数器为0时,文件将被删除(将经用户确认)。大部分被安装到Windows\System 目录下的文件都应该使用此标记,包括 .OCX 和.DPL (Delphi 包) 文件。少数的 MFC DLLs 可以例外,不应使用该标记,反而应该使用onlyifdoesntexist 复制模式结合uninsneveruninstall 标记。否则,如果安装最新版的特别MFC DLL 是一个发行版, 请使用alwaysskipifsameorolder复制模式,并结合uninsneveruninstall和restartreplace.标记。当在NT 3.51 中执行安装,使用此标记将不会删除文件。 skipifsourcedoesntexist :此标记只在与external标记连用时才生效。它令安装程序在源文件不存在时跳该行而不会给出错误信息。 uninsneveruninstall :在卸载时不卸载此文件。请谨慎地使用此标记,通常会在onlyifdoesntexist复制模式时使用。它意味着在安装一个很普通的共享文件时使用,例如CTL3DV2.DLL或一个MFC DLL,因为你将不希望卸载程序在其他软件也使用该文件时删除该文件。例:Flags: isreadme 备注:安装程序会在最后一步的安装中注册所有regserver或regtypelib标记的文件。然而,如果[Setup]段中的AlwaysRestart指令设为yes时,或者有文件使用了restartreplace 标记时,所有要注册的文件会在下次启动时注册(通过在注册表中的RunOnce 键下创建一个值),当卸载一个.HLP类型的文件(Windows 的帮助文件)时,相应的.GID和.FTS文件会被自动删除。 [Icons]段 虽然这段是可选段,但很多的安装都需要到。它定义了所有安装程序要在用户的开始菜单和/或桌面中要创建的快捷方式。卸载图标由安装程序内部创建,因此你无须在[Icons]段中加入。默认情况下,在Windows 95/NT 4+下运行安装程序不会创建卸载图标,仅在NT 3.51下才会。要强行创建卸载图标,请在[Setup]段中使用AlwaysCreateUninstallIcon指令。下面是[Icons]段的一个实例: [Icons] Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}" 下面是该段所支持参数的列表: Name (必须) :要创建的快捷方式(或程序菜单中的图标)的名称和位置。所有的系统文件夹常量或目录常量都可在此参数中使用。需要注意的是:快捷方式是以字符文件方式保存的,因此文件名所不能使用的字符在此处也是不允许的。同样,因为不允许两个同名文件的存在,所以也不能创建两个同名的快捷方式。例: Name: "{group}\My Program" Name: "{group}\Subfolder\My Program" Name: "{userdesktop}\My Program" Name: "{commonprograms}\My Program" Name: "{commonstartup}\My Program" Filename (必须) :快捷方式的命令行文件名,通常由目录常量开头。 例:Filename: "{app}\MYPROG.EXE" Parameters :快捷方式的命令行参数,可以包含常量。仅在Windows 95/NT 4+中可以包含引号。 例:Parameters: "/play filename.mid" WorkingDir :快捷方式的工作(开始)目录,即程序开始时所在的目录。如果不指定该参数或留空它, Windows 会使用一个默认的路径,该路径将随Windows 的版本而变。该参数也可以包含常量。 例:WorkingDir: "{app}" HotKey :快捷方式的快捷键,即能够启动程序的组合键。 注:如果你改变了快捷键并且重装该软件,Windows将继续使用旧的快捷键直到你取消登录或者重新启动系统。 例:HotKey: "ctrl+alt+k" Comment :为快捷方式指定注释,该注释能在Windows 2000, Me, 和以后的版本中可以弹出作为提示,在此以前的版本则将被忽略。 例:Comment: "This is my program" IconFilename :将用于显示的自定义图标所在的文件名。它可以是一个包含图标的可执行文件或专门的图标文件。如果不指定该参数,Windows 将使用默认图标。该参数也可包含常量。 例:IconFilename: "{app}\myicon.ico" IconIndex :由0开始的IconFilename文件中的图标索引值,默认为0。如果IconIndex 不为0而且没有指定IconFilename,则默认IconFilename 为Filename参数的值。 例:IconIndex: 0 Flags :该参数是一个额外的可选项,可用空格隔开多个选项。下面是该参数所支持的选项: closeonexit :当设置此标记时,安装程序会将该快捷方式的"Close on Exit"属性打开。该标记仅在快捷方式指向MS-DOS应用程序时生效。如果不指定此标记或dontcloseonexit 标记时,安装程序将不会改变其"Close on Exit"属性。 createonlyiffileexists :当设置此标记时,安装程序只在Filename参数指定的文件存在时才尝试创建图标。 dontcloseonexit :和closeonexit一样,不过就是取消"Close on Exit"属性。 runmaximized :当设置此标记时,安装程序会设置图标的"Run"值为"Maximized",这样就能使程序在启动时达到最大化的窗口。该标记在NT 3.51中无效。 runminimized :同上面一样,不过就是使程序启动时最小化窗口。 uninsneveruninstall :令卸载程序在卸载时不删除此图标。 useapppaths :当设置此标记时,安装程序自动将Filename参数中没有路径的文件名前补上注册表中"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" 的键值。 例:Flags: runminimized [INI]段 这段是可选段。它定义了所有你想安装程序设置用户系统上的INI 文件内容,该操作将在复制完文件后进行。下面是[INI]段的一个实例: [INI] Filename: "{win}\MYPROG.INI";段: "InstallSettings"; Flags: uninsdeletesection Filename: "{win}\MYPROG.INI";段: "InstallSettings"; Key: "InstallPath"; String: "{app}" 现在是该段支持的参数列表: Filename (必须) 你想修改的.INI文件,可以包含常量。如果该参数空白,它将写入WindowsWIN.INI文件中。 例:Filename: "{win}\MYPROG.INI" Section (必须) :你想创建键值的INI文件中的段名,同样可以包含常量。 例:Section: "Settings" Key :要设置的键名,也可以包含常量。如果不指定该参数或留空它,则不生成键。 例:Key: "Version" String :要赋给键名的值,也可以包含常量。若不指定此参数,则不生成键。例:String: "1.0" Flags :该参数是一个额外的可选项,可用空格隔开多个选项。下面是该参数所支持的选项: createkeyifdoesntexist :只在指定的键定的键名不存在时创建它。 uninsdeleteentry :在软件卸载时删除该键的内容。可以与uninsdeletesectionifempty标记合用。 uninsdeletesection :在软件卸载时删除该键所在的整个段。显然这不是一个好主意,特别是在Windows本身使用的段中。应该在软件私有的段中使用。 uninsdeletesectionifempty :卸载时如果段中没有键内容时删除该段。可与uninsdeleteentry标记连用。 例:Flags: uninsdeleteentry [Messages]段 [Messages]段用于定义安装或卸载时要显示的信息。正常情况下,你无须在你的脚本文件中创建[Messages]段,因为所有的信息都是从Inno Setup 自带的Default.isl文件中提取的。包括在[Setup]段 中使用MessagesFile 指定的文件。然而,特殊的信息可以由你脚本文件中[Messages]段取代。若真要这样,你必须清楚你想修改的信息ID,这可以很容易地在Default.isl搜索得到。例如,你想将"&Next >"按钮的内容变成"&Forward >",那么你要在[Messages]段中创建如下的内容: [Messages] ButtonNext=&Forward > 有些信息包含%1、%2等内容其实是参数。你可以重新安排它们的位置或者按需要在信息中多次使用。参数中,使用两个连续的"%"字符来嵌入一个"%"符号。"%n" 将生成一个换行符。 如果你想将Inno Setup的信息全部翻译为其他语言,你可以直接修改Default.isl文件或在每个脚本中重写所有的信息,将Default.isl文件做一个其他语言的副本,这样当你想在安装中使用该种语言时,只需简单地在[Setup]段中使用MessagesFile指令指向该文件即可。 特殊用途的ID BeveledLabel能够在安装程序和卸载程序的左下角显示一行文字。例如: [Messages] BeveledLabel=Inno Setup [LangOptions]段 [LangOptions]段用于定义指定的语言设置,例如安装程序和卸载程序的字体。通常,你无须在你的脚本中创建[LangOptions],因为默认会使用Inno Setup 下Default.isl或[Setup]段中MessagesFile指令指向的文件中的设置。下面是[LangOptions]段的一个实例:(下面的设置采用默认值) [LangOptions] LanguageName=English LanguageID=$0409 DialogFontName=MS Shell Dlg DialogFontSize=8 DialogFontStandardHeight=13 TitleFontName=Arial TitleFontSize=29 WelcomeFontName=Verdana WelcomeFontSize=12 CopyrightFontName=Arial CopyrightFontSize=8 LanguageName是语言名,通常不需要使用,但需在多语言安装时应用。 LanguageID是语言的数值式"语言标识",可以在http://msdn.microsoft.com/library/en-us/intl/nls_238z.asp 处看到有效的语言标识列表。当指定了LanguageName时,该项就不需要。但在多语言安装时还是需要的。具体地,LanguageID将用于自动检测用户首选的语言。 DialogFontName和DialogFontSize 指定了对话框的字体和字符大小。如果指定的字体在用户的系统中不存在,MS Shell Dlg 或MS Sans Serif字体会成为替代。(至于那一个就取决于先找到谁) DialogFontStandardHeight 将影响对话框的比例。如果你使用的字体不是13像素(在96 DPI 模式下)时,你可能需要调整DialogFontStandardHeight,否则对话框可能出现膨胀或收缩。 TitleFontName和TitleFontSize 指定了底层窗口(仅在WizardStyle=classic或WindowVisible=yes时可见)中的软件名称的字体和大小。如果指定的字体在用户系统中不存在,则Arial字体将会代替。 WelcomeFontName和WelcomeFontSize 指定了在现代型向导的欢迎页中顶部文字的字体和大小。如果指定的字体在用户系统中不存在,则Arial字体将会代替。 CopyrightFontName和CopyrightFontSize 指定了底层窗口(仅在WizardStyle=classic或WindowVisible=yes时可见)中的版权信息的字体和大小。如果指定的字体在用户系统中不存在,则Arial字体将会代替。 [Registry]段 这段是可选段。它定义了在复制完文件后所有需要向用户系统注册表中增加的键信息。下面是[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"; 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) Subkey (必须) :子键名。可以包含常量。例:Subkey: "Software\My Company\My Program" ValueType :数据类型。必须是以下中的一个: none string expandsz multisz dword binary 如果不指定类型(默认设置),安装程序将会创建子键而非键值。这时ValueName和ValueData参数将被忽略。如果指定了string,将创建一个string (REG_SZ)类型的键值。如果指定了expandsz,将创建一个expand-string (REG_EXPAND_SZ)类型的键值,该类型最初是用在Windows NT中的,但Windows 95/98中也被支持。如果指定multisz,将创建一个(REG_MULTI_SZ)类型的键值。如果指定dword,则创建一个integer (REG_DWORD) 型的键值。如果指定binary,则创建binary (REG_BINARY) 类型的键值。例: ValueType: string ValueName :要创建的键值名,可以包含常量。如果留空,则使用"Default"值。如果ValueType 参数设置为none,该参数则被忽略。例:ValueName: "Version" ValueData :键值的数据。如果ValueType参数是string,expandsz或multisz,它将是一个可以包含常量的字符串。如果数据类型是dword,它将是一个十进制整数(如"123")或十六进制整数(如"$7B")。如果数据类型是binary,它将是格式为"00 ff 12 34"的十六进制的字节序列,如果数据类型为none,这将被忽略。对于一个string, expandsz, 或 multisz 类型的值,你可以在此参数中使用一个特殊的常量{olddata} {olddata}常量会用先前的注册键值所取代。常量{olddata}将在你需要对一个已存在的键值中附加一个字符串时非常有用,例如:{olddata};{app}。如果键值不存在或者键值不是字符串类型,{olddata}常量将被无声地移去。如果创建的键值是multisz 类型,但存在的键值却不是multi-string 类型(如REG_SZ or REG_EXPAND_SZ)时,该常量同样会被无声地移去,反之亦然。对于一个multisz类型的值,你可以在此参数中使用一个称为{break}的常量来插入一个换行符。例:ValueData: "1.0" Flags :该参数是一个额外的可选项,可用空格隔开多个选项。下面是该参数所支持的选项: createvalueifdoesntexist :当指定该标记时,安装程序只会在同名键值不存在时创建该键值。该标记在数据类型为none或者指定了deletevalue标记时不会生效。 deletekey :当指定该标记时,安装程序将会先删除整个键(若存在的话),包括其中的所有键值和子键。如果ValueType 为none时,它才会创建新的键和键值。 deletevalue :当指定该标记时,安装程序会先删除这个键值(若存在的话)。如果ValueType 为none并且不曾存在时,它才会创建新的键值。 dontcreatekey :当指定该标记时,如果指定的键在用户的系统中未曾存在时,安装程序不会尝试去创建指定的键或键值。如果指定的键已经存在,将不显示错误信息。典型的例子就是该标记与uninsdeletekey标记合用,以此达到在卸载时删除键而在安装时不会创建它们。 noerror :无论任何原因而导致安装程序创建该键失败都不会显示错误信息。 preservestringtype :这只在ValueType参数是string或expandsz时使用。当指定了该标记后,如果键值不存在并且它是字符串类型时,它将被换成先前值的相同类型。 uninsclearvalue :卸载程序时,清空键值的数据(REG_SZ类型)。该标记不能与uninsdeletekey标记合用。 uninsdeletekey :卸载程序时,删除整个键,包括其中所有的键值和子键。显然,在Windows自身的键内时,这不是一个好主意。你只应在你软件的私有键中使用它。 uninsdeletekeyifempty :卸载程序时,如果该键没有键值或子键时将其删除。该标记可以与uninsdeletevalue.标记合用。 uninsdeletevalue :卸载程序时删除键值。该标记可以与uninsdeletekeyifempty标记合用。 注意:在Inno Setup 1.1版前,你可以在数据类型为none时使用该标记,其功能与"delete key if empty"标记一样。但该方法不再被支持,你现在必须使用uninsdeletekeyifempty标记来完成。 例:Flags: uninsdeletevalue [Run]段和[UninstallRun]段 [Run]段是可选的,并且指定任意数目的程序在安装成功结束后,显示最后一个对话框前执行。 [UninstallRun]段同样是可选段,它将会执行任意数据的程序作为卸载的第一步。除特别说明外,否则两段的语法都相同。各程序的执行顺序是以脚本中出现的顺序为准的。当执行[Run]/[UninstallRun]中的项时,安装程序将等待当前程序结束后才开始执行下一个程序,除非使用nowait标记。下面是[Run]段的一个实例: [Run] Filename: "{app}\INIT.EXE"; Parameters: "/x" Filename: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent Filename: "{app}\MYPROG.EXE"; Description: "Launch application"; Flags: postinstall nowait skipifsilent unchecked 下面是该段支持的参数列表: Filename (必须) :要招待的程序名或要打开的文件或文件夹。如果Filename不是一个.exe或.com文件,你必须在此项中使用shellexec标记,该参数可以包含常量。 例:Filename: "{app}\INIT.EXE" Description :只在[Run]段中有效。是该项的说明。该说明用于postinstall标记。如果不指定说明,安装程序将使用默认的说明。该说明由该项的类型而定(normal or shellexec)。 例:Description: "View the README file" Parameters :为程序准备的可选命令行参数,可以包含常量。 例:Parameters: "/x" WorkingDir :启动程序时的目录。如果不指定该参数或留空它,它不会变为其他目录。该参数也可以使用常量。 例:WorkingDir: "{app}" StatusMsg :只在[Run]段中生效,确定了执行程序时向导上显示的信息。如果不指定该参数或留空它,将使用默认的信息"Finishing installation..."。 例:StatusMsg: "Installing BDE..." RunOnceId :只在[UninstallRun]段中生效,如果相同的安装程序不止一次运行,那么"run"项将被复制到卸载记录文件中。通过指定一个字符串给RunOnceId,你可以保证特别的[UninstallRun]项在卸载时只执行一次。例如,若两个或多个"run"项在卸载记录文件中有一个RunOnceId 设为"DelService",只有最后的RunOnceId 中的"DelService"被执行,其余的都会被忽略。注意:RunOnceId中的内容是大小写敏感的。 例:RunOnceId: "DelService" Flags :该参数是一个额外的可选项,可用空格隔开多个选项。下面是该参数所支持的选项: hidewizard :如果指定此参数,向导会在程序运行期间被隐藏。 nowait :如果指定此参数,安装程序不会等该进程结束就处理下个[Run]项或结束安装。该标记不能与waituntilidle合用。 shellexec :该标记在Filename不是一个可直接执行的文件时才需要。当设置该标记时,Filename可以是一个文件夹或任何已注册了的文件类型,包括.hlp, .doc,和其他。文件将被用户系统中与该类型关联的程序打开,结果与用户在资源管理器中双击该文件一样。当在Filename 中使用文件夹名时,建议你在其后加上"\"字符(如"{group}\"),以保证同名的程序不会被执行。同样值得注意的是文件夹只能在Windows 95/NT 4+中打开,因为它是Explorer shell的新特性。 使用shellexec标记的一点不利就是:它不能等到进程结束。因此,它执行的效果总是好似指定了nowait标记一样。 skipifdoesntexist :如果指定该标记,并且Filename不存在时,安装程序将不会显示错误信息。该标记只应用在[Run]段,因为卸载程序在[UninstallRun]项执行失败时从不显示出错信息的。 runmaximized :如果指定该标记,执行的程序或打开的文件的窗口将被最大化。 runminimized :如果指定该标记,执行的程序或打开的文件的窗口将被最小化。 waituntilidle :如果指定该标记,安装程序将会暂停执行直到没有需要用户输入时,并非进程结束。(这是调用Win32函数的WaitForInputIdle 来实现的) 不能与nowait合用。 postinstall :只在[Run]段有效。它令到安装程序在安装结束页中创建一个复选项,让用户能够选择该项来决定是否执行该项。以前该标记称为showcheckbox.。 [Files]段中项的isreadme标记此时将会搁置。如果编译器侦测到某项带有isreadme标记,它会去掉[Files]中的isreadme 标记,代之以在[Run]段列表的开头处生成一个新项。该生成的[Run]项以shellexec, skipifdoesntexist, postinstall and skipifsilent标记运行该readme文件。 unchecked :只在[Run]段中有效。指示安装程序在开始时取消勾选该复选框。在用户勾选该复选框后才执行该项。该标记在postinstall 标记没有指定时被忽略。 skipifsilent :只在[Run]段中有效。指示安装程序如果以后台程序方式运行时跳过此项。 skipifnotsilent :只在[Run]段中有效。指示安装程序如果以非后台程序方式运行时跳过此项。 例:Flags: postinstall nowait skipifsilent [UninstallDelete]段 这段是可选段。用于定义卸载程序要删除的其他文件或目录,还有那些你的程序所安装的。删除你程序中创建的.INI文件是该段最普通的用法。卸载程序会在卸载的最后一步处理这些项。下面是该段的一个实例: [UninstallDelete] Type: files; Name: "{win}\MYPROG.INI" 以下是该段所支持的参数列表: Type (必须) :指定卸载程序要删除的东西。它必须是以下中的一种: files :指定一个特定的文件或通配文件。 filesandordirs :功能与files相同,不过就是包括匹配的目录及其下的所有文件和子目录。 dirifempty :当使用此标记时,Name参数必须是一个目录名,但就不可以包括通配符。只删除空目录。 例:Type: files Name (必须) :要删除的文件或目录名。 注意:在此不要冒险使用一个通配符去删除{app}目录中的所有文件。强烈建议你不要这样做的原因有两个:用户不赞赏他们在软件目录中放置的文件在没有警告下就将其删除(他们卸载它可能只是要将其移到其他驱动器中),最好是让用户在需要时自己手动去删除。同样,如果因为用户出错而将软件安装到一个错误的目录下时(如C:\WINDOWS),这样如果执行卸载,将会造成惨重的后果。因此,再次呼吁,不要这样做! 例:Name: "{win}\MYPROG.INI"
Inno Setup 5.22安装脚本示例
[Setup]
;应用程序的标题,显示在安装屏幕的左上角以及安装向导中
AppName=Inno Setup
汉化增强版
;应用程序的标题,包含程序的版本号
AppVerName=Inno Setup 5.2.2
汉化增强版
;默认开始菜单文件夹名
DefaultGroupName=Inno Setup
汉化增强版
;选择目标位置向导面中的默认目录名
DefaultDirName={pf}\Inno Setup
5
;安装程序编译器将生成的.EXE文件输出目录
OutputDir=.\
;生成的安装程序文件名字
OutputBaseFilename=InnoSetup_522_HA
;固实压缩
SolidCompression=yes
Compression=lzma/max
;是否显示一个不创建任何图标选择框
AllowNoIcons=yes
InfoBeforeFile=embedded\InfoBefore.txt
WizardImageFile=embedded\dreams8.bmp
WizardSmallImageFile=embedded\dreams8smallimage.bmp
SetupIconFile=embedded\dreams8.ico
UninstallDisplayIcon=embedded\dreams8.ico
;备注版本信息
VersionInfoCompany=HTTP://DREAMS8.COM
VersionInfoDescription=Inno
Setup 汉化增强版
VersionInfoVersion=5.2.2.0
VersionInfoCopyright=Copyright (C)
2006-2007 似水年华
Encryption=true
Password=http://www.dreams8.com
[Files]
Source: Dreams8.CoM; DestDir: " "; Flags: dontcopy
Source:
{app}\JanHKill.exe; DestDir: {app}; Flags: ignoreversion
Source:
{app}\psvince.dll; DestDir: {app}; Flags: ignoreversion noencryption
Source:
{app}\Compil32.exe; DestDir: {app}; Flags: ignoreversion
Source:
{app}\Default.isl; DestDir: {app}; Flags: ignoreversion
Source:
{app}\isbunzip.dll; DestDir: {app}; Flags: ignoreversion
Source:
{app}\isbzip.dll; DestDir: {app}; Flags: ignoreversion
Source:
{app}\ISCC.exe; DestDir: {app}; Flags: ignoreversion; Check: not
IsISPP('ISCC.exe')
Source: {app}\ISCmplr.dll; DestDir: {app}; Flags:
ignoreversion; Check: not IsISPP('ISCmplr.dll')
Source: {app}\ISCrypt.dll;
DestDir: {app}; Flags: ignoreversion
Source: {app}\ISetup.hlp; DestDir:
{app}; Flags: ignoreversion
Source: {app}\ISetup.chm; DestDir: {app}; Flags:
ignoreversion
Source: {app}\isfaq.htm; DestDir: {app}; Flags:
ignoreversion
Source: {app}\islzma.dll; DestDir: {app}; Flags:
ignoreversion
Source: {app}\isunzlib.dll; DestDir: {app}; Flags:
ignoreversion
Source: {app}\iszlib.dll; DestDir: {app}; Flags:
ignoreversion
Source: {app}\license.txt; DestDir: {app}; Flags:
ignoreversion
Source: {app}\Setup.e32; DestDir: {app}; Flags:
ignoreversion
Source: {app}\SetupLdr.e32; DestDir: {app}; Flags:
ignoreversion
Source: {app}\whatsnew.htm; DestDir: {app}; Flags:
ignoreversion
Source: {app}\WizModernImage-IS.bmp; DestDir: {app}; Flags:
ignoreversion
Source: {app}\WizModernImage.bmp; DestDir: {app}; Flags:
ignoreversion
Source: {app}\WizModernSmallImage-IS.bmp; DestDir: {app};
Flags: ignoreversion
Source: {app}\WizModernSmallImage.bmp; DestDir: {app};
Flags: ignoreversion
Source: {app}\Examples\64Bit.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\64BitThreeArch.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\64BitTwoArch.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\CodeAutomation.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\CodeClasses.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\CodeDlg.iss;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\CodeDll.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\CodeExample1.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\Components.iss;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\Example1.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\Example2.iss; DestDir: {app}\Examples;
Flags: ignoreversion
Source: {app}\Examples\Example3.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\Example4.iss;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\Example5.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\ISPPExample1.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\ISPPExample1License.txt; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\Languages.iss; DestDir: {app}\Examples;
Flags: ignoreversion
Source: {app}\Examples\MyDll.dll; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\MyProg-IA64.exe;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\MyProg-x64.exe; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\MyProg.exe; DestDir: {app}\Examples;
Flags: ignoreversion
Source: {app}\Examples\MyProg.chm; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\Readme-Dutch.txt;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\Readme-German.txt; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\Readme.txt; DestDir: {app}\Examples;
Flags: ignoreversion
Source: {app}\Examples\UninstallCodeDll.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\UninstallCodeExample1.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\MyDll\C\MyDll.c; DestDir:
{app}\Examples\MyDll\C; Flags: ignoreversion
Source:
{app}\Examples\MyDll\C\MyDll.def; DestDir: {app}\Examples\MyDll\C; Flags:
ignoreversion
Source: {app}\Examples\MyDll\C\MyDll.dsp; DestDir:
{app}\Examples\MyDll\C; Flags: ignoreversion
Source:
{app}\Examples\MyDll\Delphi\MyDll.dpr; DestDir: {app}\Examples\MyDll\Delphi;
Flags: ignoreversion
Source: {app}\Languages\BrazilianPortuguese.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Catalan.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\Czech.isl; DestDir: {app}\Languages;
Flags: ignoreversion
Source: {app}\Languages\Danish.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\Dutch.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\English.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\Finnish.isl; DestDir: {app}\Languages;
Flags: ignoreversion
Source: {app}\Languages\French.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\German.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Hungarian.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\Italian.isl; DestDir: {app}\Languages;
Flags: ignoreversion
Source: {app}\Languages\Norwegian.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\Polish.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Portuguese.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\Russian.isl; DestDir: {app}\Languages;
Flags: ignoreversion
Source: {app}\Languages\Slovak.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\Slovenian.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Basque.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\ChineseTrad.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\Spanish.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Hebrew.isl; DestDir: {app}\Languages; Flags:
ignoreversion
;Source: {app}\disasm.exe; DestDir: {app}; Flags:
ignoreversion
;Source: {app}\unCompiledCode.cmd; DestDir: {app}; Flags:
ignoreversion
;增加Inno Setup 解包套装
Source: {app}\IsUnp\ISUnp.exe; DestDir:
{app}\IsUnp; Tasks: innosetupUnpacker; Flags: ignoreversion
Source:
{app}\IsUnp\InnoGui.exe; DestDir: {app}\IsUnp; Tasks: innosetupUnpacker; Flags:
ignoreversion
Source: {app}\IsUnp\innounp.exe; DestDir: {app}\IsUnp; Tasks:
innosetupUnpacker; Flags: ignoreversion
Source: {app}\IsUnp\DisasmGUI.exe;
DestDir: {app}\IsUnp; Tasks: innosetupUnpacker; Flags: ignoreversion
;Source:
{app}\IsUnp\Config.ini; DestDir: {app}\IsUnp; Tasks: innosetupUnpacker; Flags:
ignoreversion
;修改备注
Source: {app}\Dreams8.e32; DestDir: {app}; DestName:
SetupLdr.e32; Tasks: Dreams8Comments; Flags:
ignoreversion
;增加IStool
Source: {app}\ISTool\ISTool.exe; DestDir:
{app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion
Source:
{app}\ISTool\calltips.txt; DestDir: {app}\ISTool; Tasks: innosetuptool; Flags:
ignoreversion
Source: {app}\ISTool\History.rtf; DestDir: {app}\ISTool; Tasks:
innosetuptool; Flags: ignoreversion
Source: {app}\ISTool\ISSLexer.dll;
DestDir: {app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion
Source:
{app}\ISTool\ISTool.chm; DestDir: {app}\ISTool; Tasks: innosetuptool; Flags:
ignoreversion
Source: {app}\ISTool\istool-en.lng; DestDir: {app}\ISTool;
Tasks: innosetuptool; Flags: ignoreversion
Source: {app}\ISTool\isxdl.htm;
DestDir: {app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion
Source:
{app}\ISTool\isxdl.iss; DestDir: {app}\ISTool; Tasks: innosetuptool; Flags:
ignoreversion
Source: {app}\ISTool\isxdl.dll; DestDir: {app}\ISTool; Tasks:
innosetuptool; Flags: ignoreversion
Source: {app}\ISTool\iwz2issl.dll;
DestDir: {app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion
Source:
{app}\ISTool\License.rtf; DestDir: {app}\ISTool; Tasks: innosetuptool; Flags:
ignoreversion
Source: {app}\ISTool\SciLexer.dll; DestDir: {app}\ISTool;
Tasks: innosetuptool; Flags: ignoreversion
Source: {app}\ISTool\简体中文.lng;
DestDir: {app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion ;AfterInstall:
MyAfterInstall
[Messages]
;下画线文字说明
BeveledLabel=梦想吧 似水年华 <A
href="http://www.dreams8.com/">WWW.DREAMS8.COM
;卸载对话框说明
ConfirmUninstall=您真的想要从电脑中卸载INNO
SETUP吗?%n%n按 [是] 则完全删除 %1 以及它的所有组件; %n按 [否]
则让软件继续留在您的电脑上.
;定义解压说明
StatusExtractFiles=解压并复制主程序文件及相关库文件...
[Registry]
Root: HKCR; Subkey: .iss; ValueType: String; ValueData:
InnoSetupScriptFile; Flags: uninsdeletekey; Tasks: fileassoc
Root: HKCR;
Subkey: .iss; ValueName: Content Type; ValueType: String; ValueData: text/plain;
Tasks: fileassoc
Root: HKCR; Subkey: InnoSetupScriptFile; ValueType: String;
ValueData: Inno Setup 脚本; Flags: uninsdeletekey; Tasks: fileassoc
Root: HKCR;
Subkey: InnoSetupScriptFile\DefaultIcon; ValueType: String; ValueData:
{app}\Compil32.exe,1; Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\open\command; ValueType: String; ValueData:
"""{app}\Compil32.exe"" ""%1"""; Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\Compile; ValueType: String; ValueData: 编译(&L);
Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\Compile\command; ValueType: String; ValueData:
"""{app}\Compil32.exe"" /cc ""%1"""; Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\OpenWithInnoSetup; ValueType: String; ValueData: 使用
&Inno Setup 打开; Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\OpenWithInnoSetup\command; ValueType: String;
ValueData: """{app}\Compil32.exe"" ""%1"""; Tasks: fileassoc
Root: HKCR;
Subkey: .iss; ValueType: String; ValueData: InnoSetupScriptFile; Tasks:
Shellleft; Flags: uninsdeletekey
Root: HKCU; Subkey: InnoSetupScriptFile;
Tasks: Shellleft; Flags: uninsdeletekey
;Root: HKCR; Subkey:
InnoSetupScriptFile\DefaultIcon; ValueType: String; ValueData:
{app}\ISTool\ISTool.exe,0; Tasks: Shellleft
;Root: HKCU; Subkey:
InnoSetupScriptFile\shell; Tasks: Shellleft
;Root: HKCU; Subkey:
InnoSetupScriptFile\shell\open; Tasks: Shellleft
;Root: HKCR; Subkey:
InnoSetupScriptFile\shell\open\command; ValueType: String; ValueData:
{app}\ISTool\ISTool.exe %1; Tasks: Shellleft
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\OpenWithISTool; ValueType: String; ValueData: 使用
&ISTool 打开; Tasks: Shellleft
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\OpenWithISTool\command; ValueType: String; ValueData:
{app}\ISTool\ISTool.exe %1; Tasks: Shellleft
[Run]
Filename: {app}\ISTool\ISTool.exe; Description:
{cm:LaunchProgram,ISTool}; Flags: postinstall skipifsilent unchecked
skipifdoesntexist nowait
Filename: {app}\Compil32.exe; Parameters: /ASSOC;
StatusMsg: {cm:AssocingFileExtension,Inno Setup,.iss}; Tasks:
fileassoc
Filename: {app}\Compil32.exe; WorkingDir: {app}; Description:
{cm:LaunchProgram,Inno Setup}; Flags: postinstall skipifsilent nowait
[UninstallRun]
Filename: {app}\Compil32.exe; Parameters: /UNASSOC;
RunOnceId: RemoveISSAssoc
[UninstallDelete]
Type: files; Name: {app}\Config.ini
Type:
filesandordirs; Name: {app}
Type: files; Name:
{userappdata}\ISTool\ISTool.ini
Type: filesandordirs; Name:
{userappdata}\ISTool
[Icons]
Name: {group}\ISTool; Filename: {app}\ISTool\ISTool.exe; Flags:
createonlyiffileexists
Name: {group}\Download DLL 文档; Filename:
{app}\ISTool\isxdl.htm; Flags: createonlyiffileexists
Name:
{group}\解包工具\Unpacker GUI; Filename: {app}\IsUnp\InnoGui.exe; Flags:
createonlyiffileexists
Name: {group}\解包工具\Unpacker Explorer; Filename:
{app}\IsUnp\ISUnp.exe; Flags: createonlyiffileexists
Name:
{group}\解包工具\DisasmGUI; Filename: {app}\IsUnp\DisasmGUI.exe; Flags:
createonlyiffileexists
Name: {group}\Inno Setup 编译器; Filename:
{app}\Compil32.exe; WorkingDir: {app}
Name: {group}\Inno 5.1.5 帮助文档;
Filename: {app}\ISetup.hlp
Name: {group}\Inno Setup 帮助文档; Filename:
{app}\ISetup.chm
Name: {group}\卸载INNO SETUP; Filename:
{app}\unins000.exe
Name: {userdesktop}\Inno Setup 编译器; Filename:
{app}\Compil32.exe; WorkingDir: {app}; Tasks: desktopicon
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; Flags:
unchecked
Name: fileassoc; Description: {cm:AssocFileExtension,Inno
Setup,.iss}
Name: innosetuptool; Description: 安装 ISTOOL汉化版(&T);
GroupDescription: ISTOOL汉化版:; Flags: checkablealone
Name: Shellleft;
Description: 关联 *.ISS 文件到右键用ISTOOL打开(&I); GroupDescription: ISTOOL汉化版:;
Flags: dontinheritcheck
Name: innosetupUnpacker; Description: 安装 Inno Setup
解包套装(&U); GroupDescription: 附加安装:
Name: Dreams8Comments; Description: 修改
备注为DREAMS8.COM(&W); GroupDescription: 附加安装:; Flags: unchecked
[Code]
//增加判断是否存在程序--------------------------------------------------------
function
IsModuleLoaded(modulename: String ): Boolean;
external <A
href="mailto:'IsModuleLoaded@files:psvince.dll">'IsModuleLoaded@files:psvince.dll
stdcall';
function InitializeSetup(): boolean;
var
IsAppRunning:
boolean;
begin
Result:= true;
IsAppRunning:=
IsModuleLoaded('Compil32.exe'); //程序文件名
while IsAppRunning do
begin
if
MsgBox('INNO SETUP正在运行,继续安装前请先关闭它!'#13'[建议先卸载]要继续安装吗?' #13#13
' <A
href="http://www.dreams8.com'/">WWW.DREAMS8.COM', mbConfirmation,
MB_OKCANCEL) = IDOK then
IsAppRunning:= IsModuleLoaded('Compil32.exe')
//程序文件名
else
begin
IsAppRunning:= false;
Result:=
false;
end;
end;
end;
//增加关于按钮及网站链接-------------------------------------------------------
procedure
AboutButtonOnClick(Sender: TObject);//当关于键被按下时产生的行为
begin
MsgBox('梦想吧|DREAMS8 人人为我|我为人人'#13#13 'Copyright (C) 2007 <A
href="http://www.dreams8.com'/">www.dreams8.com', mbInformation,
mb_Ok);
end;
//完成页面
procedure CloseQuery(Sender: TObject; var CanClose:
Boolean);
begin
CanClose := true;
PostMessage(WizardForm.Handle, 18, 0, 0);
end;
procedure URLLabelOnClick(Sender: TObject); //当URL键被按下时产生的行为
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://dreams8.com',
'', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
var
InfoLabel: TNewStaticText;
procedure InitializeWizard();
var
AboutButton, CancelButton:
TButton;
URLLabel: TNewStaticText;
//建立一个url的按钮
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText:
TNewStaticText;
begin
//页面字体颜色
WizardForm.PAGENAMELABEL.Font.Color:=
clred;
WizardForm.PAGEDESCRIPTIONLABEL.Font.Color:=
clBlue;
//安装提示字体颜色
WizardForm.WELCOMELABEL1.Font.Color:=
clGreen;
WizardForm.WELCOMELABEL2.Font.Color:= clOlive;
{ 其它自定义控制 }
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
AboutButton.Left :=
WizardForm.ClientWidth - CancelButton.Left -
CancelButton.Width;
AboutButton.Top := CancelButton.Top;
//按扭在窗体上的位置
//按扭宽&高
AboutButton.Width :=
CancelButton.Width;
AboutButton.Height :=
CancelButton.Height;
AboutButton.Caption :=
'关于(&A)';//按扭标题
AboutButton.OnClick := @AboutButtonOnClick;
//事件激活
AboutButton.Parent := WizardForm;
//添加一个Labe标签------------------------------------------------------------
URLLabel
:= TNewStaticText.Create(WizardForm);
URLLabel.Top := AboutButton.Top +
AboutButton.Height - URLLabel.Height - 2;
URLLabel.Left := AboutButton.Left +
AboutButton.Width + 8;
URLLabel.Caption := '访问
梦想吧Dreams8';
URLLabel.Font.Style := URLLabel.Font.Style +
[fsUnderLine];
URLLabel.Font.Color := clBlue;
URLLabel.Font.size :=
9;
URLLabel.Cursor := crHand;
URLLabel.OnClick :=
@URLLabelOnClick;
URLLabel.Parent := WizardForm;
//完成页面的链接地地址
InfoLabel :=
TNewStaticText.Create(WizardForm);
InfoLabel.Caption :=
'HTTP://DREAMS8.COM';
InfoLabel.Cursor := crHand;
InfoLabel.OnClick :=
@URLLabelOnClick;
InfoLabel.Parent := WizardForm;
InfoLabel.Font.Color :=
clBlue;
InfoLabel.Color:= WizardForm.MainPanel.Color;
InfoLabel.Top :=
WizardForm.BEVEL.Top - ScaleY(20);
InfoLabel.Left :=
WizardForm.WELCOMELABEL1.Left;
WizardForm.OnCloseQuery:= @CloseQuery;
BackgroundBitmapImage :=
TBitmapImage.Create(MainForm);
BackgroundBitmapImage.AutoSize :=
True;
BackgroundBitmapImage.Bitmap :=
WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Left :=
50;
BackgroundBitmapImage.Top := 100;
BackgroundBitmapImage.Parent :=
MainForm;
BackgroundBitmapText :=
TNewStaticText.Create(MainForm);
BackgroundBitmapText.Caption :=
'TBitmapImage';
BackgroundBitmapText.Left :=
BackGroundBitmapImage.Left;
BackgroundBitmapText.Top :=
BackGroundBitmapImage.Top + BackGroundBitmapImage.Height +
8;
BackgroundBitmapText.Parent := MainForm;
//去掉关于菜单
WizardForm.BORDERICONS := [biHelp, biSystemMenu,
biMinimize];
// 自动输入密码
WizardForm.PasswordEdit.Text :=
'http://www.dreams8.com';
end;
procedure
MyAfterInstall();
begin
DeleteFile(ExpandConstant('{userappdata}\ISTool\ISTool.ini'));
CreateDir(ExpandConstant('{userappdata}\ISTool'));
SaveStringToFile(ExpandConstant('{userappdata}\ISTool\ISTool.ini'),
#13#10 + '[Prefs]',
True);
SaveStringToFile(ExpandConstant('{userappdata}\ISTool\ISTool.ini'),
#13#10 + ExpandConstant('InnoFolder={app}'),
True);
SaveStringToFile(ExpandConstant('{userappdata}\ISTool\ISTool.ini'),
#13#10 + ExpandConstant('LanguageFile={app}\ISTool\简体中文.lng'),
True);
RegWriteStringValue(HKEY_LOCAL_MACHINE,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1','Inno
Setup: Setup Version', '5.2.2');
end;
//procedure CurUninstallStepChanged(CurUninstallStep:
TUninstallStep);
procedure CurStepChanged(CurStep:
TSetupStep);
begin
if CurStep=ssPostInstall
then
begin
if not IsTaskSelected('innosetuptool')
then
RegDeleteKeyIncludingSubkeys(HKCR,
'InnoSetupScriptFile\shell\OpenWithISTool');
end;
end;
procedure
DeinitializeUninstall();
begin
RegDeleteKeyIncludingSubkeys(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno
Setup 5_is1');
end;
//安装程序按取消时`直接退出~而无选项
procedure CurPageChanged(CurPageID:
Integer);
begin
if CurPageID = wppassword
then
begin
WizardForm.NextButton.OnClick(WizardForm);
end;
if
CurPageID=wpFinished then
begin
InfoLabel.Visible:=
true
end
else
begin
InfoLabel.Visible:= false;
end;
end;
function IsISPP(Filename: String): Boolean;
var
Version:
String;
begin
if GetVersionNumbersString(ExpandConstant('{app}\' +
Filename), Version) then
Result := (Version <>
'0.0.0.0')
else
Result := False;
end;
转自:http://www.360doc.com/content/13/0425/22/4221543_280946616.shtml