InnoSetup详解中文资料.docx
《InnoSetup详解中文资料.docx》由会员分享,可在线阅读,更多相关《InnoSetup详解中文资料.docx(127页珍藏版)》请在冰点文库上搜索。
![InnoSetup详解中文资料.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/50bfd78e-3d0d-4d74-8f30-bf51dcedc0dd/50bfd78e-3d0d-4d74-8f30-bf51dcedc0dd1.gif)
InnoSetup详解中文资料
InnoSetup详解中文资料
其一:
使用教程
一、InnoSetup是什么?
InnoSetup是一个免费的Windows安装程序制作软件。
第一次发表是在1997年,InnoSetup今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件。
二、InnoSetup能干什么?
1.支持现在所有正在使用的Windows版本:
7,2008R2,Vista,XP,2008,2003,2000,Me,98,95,和NT4.0(不需要服务包)。
2.广泛支持在64位的WindowsXPandWindowsServer2003版本的操作系统中的64位应用程序安装。
支持x64和Itanium两个结构。
(在Itanium结构中,必须在64位模式安装ServicePack1。
)
3.支持创建单个EXE格式的安装程序,使你的程序可以很方便地在网络上发表。
同时也支持磁盘延伸。
4.标准的Windows2000/XP样式向导界面。
5.定制安装类型,例如:
完整安装,最小安装,自定义安装。
6.完整的卸载功能。
7.文件安装:
包括完全的“压缩”支持,bzip2和7-ZipLZMA文件压缩。
安装程序可以比较文件版本信息,替换正在使用的文件,使用共享文件计数,注册DLL/OCX和类型库,以及安装字体。
8.可以在任意地方创建快捷方式,包括开始菜单和桌面。
9.创建注册表和.INI条目。
10.在安装之前、之中或之后可运行其他程序。
11.支持多语言安装。
12.支持密码和加密安装。
13.支持数字签名、安装和卸载。
14.后台安装和后台卸载。
15.Unicode安装。
(Windows2000/XP或更高)
16.完整的Pascal脚本引擎选项于运行期高级自定义安装和卸载。
17.全部源代码公开(BorlandDelphi2.0-5.0和2009)。
二、创建安装程序的方式:
脚本
安装程序用编译脚本的方式创建,脚本其实就是一个类似.INI文件格式的ASCII码文本文件。
(它不象你想象的那么复杂!
)。
UnicodeInnoSetup支持UTF-8编码文本文件。
脚本用一个“.iss”(表示InnoSetupScript脚本)的扩展名。
脚本控制着安装程序的所有方面。
由它指定哪些文件将被安装到什么地方,在哪里创建快捷方式,且被命名为什么。
脚本文件一般可以用安装程序编译器程序内置的编辑器进行编辑。
在你编写完脚本后,下一个最终步骤就是选择安装程序编译器中的“编译”。
创建完成后,就可以运行根据你脚本编译的安装程序了。
按默认,这个安装程序创建在包含脚本文件目录下的名为“输出”目录中。
如果你想看看它是怎样工作的,启动安装程序编译器,单击“文件|打开”,并选择位于InnoSetup安装目录下的Examples子目录中的一个脚本文件。
(你也可以将这些示例脚本作为你自己编写脚本的模板。
)
Innosetup脚本示范(注释)
[Setup]
;程序名
AppName=ISsample
;版本号
AppVerName=ISsample1.0.0.0
;发布者名
AppPublisher=Hkiss
;相关连接
AppPublisherURL=
AppSupportURL=
AppUpdatesURL=
;默认安装目录
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-2008Hkiss
;制作选择语言
[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:
a1a2a3;
;用户注册自定义Dll文件regserver注册noregerror不显示错误信息
Source:
"C:
\Example\原始文件\jmail.dll";DestDir:
"{app}";Flags:
ignoreversionregserver
;添加自述文件
Source:
"C:
\Example\原始文件\ISsample.txt";DestDir:
"{app}";Flags:
ignoreversion
;添加一个文件到缓存文件夹{Tmp}deleteafterinstall安装后删除
Source:
"C:
\Example\原始文件\test.exe";DestDir:
"{tmp}";Flags:
ignoreversiondeleteafterinstall
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:
ignoreversionrecursesubdirscreateallsubdirs
;注意:
不要在任何共享系统文件上使用“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:
FullCompactCustom;
Name:
a2;Description:
"安装Components_2";Types:
FullCompact
Name:
a3;Description:
"安装Components_3";Types:
Full
;开始菜单,桌面快捷方式
[Icons]
Name:
"{group}\ISsample";Filename:
"{app}\ISsample.exe"
Name:
"{group}\{cm:
ProgramOnTheWeb,ISsample}";Filename:
"
Name:
"{group}\{cm:
UninstallProgram,ISsample}";Filename:
"{uninstallexe}"
Name:
"{commondesktop}\ISsample";Filename:
"{app}\ISsample.exe";Tasks:
desktopicon
Name:
"{userappdata}\Microsoft\InternetExplorer\QuickLaunch\ISsample";Filename:
"{app}\ISsample.exe";Tasks:
quicklaunchicon
;添加一个帮助文挡
Name:
{group}\ISsample1.0.0.0帮助文档;Filename:
{app}\ISsample.chm
;用来在程序安装完成后在安装程序显示最终对话框之前执行程序常用与运行主程序显示自述文件删除临时文件
[Run]
Filename:
"{app}\ISsample.exe";Description:
"{cm:
LaunchProgram,ISsample}";Flags:
nowaitpostinstallskipifsilent
Filename:
"{app}\ISsample.txt";Description:
"查看显示自述文件";Flags:
postinstallskipifsilentshellexec
;更改显示在程序中显示的消息文本
[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]
//全局变量
varMyProgChecked:
Boolean;
//判断程序是否存在
//初始华程序事件
functionInitializeSetup():
boolean;
varIsbl:
boolean;//声明变量
varIsstr:
string;
begin//开始
Isbl:
=true;//变量赋值
Isstr:
='欢迎';
ifRegValueExists(HKEY_LOCAL_MACHINE,'SOFTWARE\ISsample','config')then
begin
MsgBox('已安装过,请先卸载在安装',mbConfirmation,MB_OK);
isbl:
=false;
endelse
begin
//MsgBox('无值',mbConfirmation,MB_OK);
isbl:
=true;
end;
//下面是个麻烦的条件语句endelse注意
//ifMsgBox(Isstr,mbConfirmation,MB_OKCANCEL)=IDOKthen
//begin
//isbl:
=true;
//MsgBox('执行了',mbConfirmation,MB_OK);
//endelse
//begin
//isbl:
=false;
//MsgBox('执行了',mbConfirmation,MB_OK);
//end;
Result:
=Isbl;
end;//结束
procedureCurStepChanged(CurStep:
TSetupStep);
varIsstr:
string;
begin
ifCurStep=ssInstallthen//实际安装前调用
begin
//MsgBox('CurStepChanged:
实际安装前调用',mbConfirmation,MB_OKCANCEL);//安装完成后调用
end;
ifCurStep=ssPostInstallthen
begin
Isstr:
=ExpandConstant('{tmp}\tmp.rar');
//ifFileExists(Isstr)then
//begin
//MsgBox('文件存在',mbConfirmation,MB_OK);
//endelse
//begin
//MsgBox('文件不存在',mbConfirmation,MB_OK);
//end;
//MsgBox('CurStepChanged:
实际安装后调用',mbConfirmation,MB_OKCANCEL);
end;
end;
//下一步按钮按钮事件
functionNextButtonClick(CurPageID:
Integer):
Boolean;
varResultCode:
Integer;
varIsSetup:
Boolean;
begin
IsSetup:
=true;
caseCurPageIDof
wpSelectDir:
MsgBox('NextButtonClick:
'#13#13'Youselected:
'''+WizardDirValue+'''.',mbInformation,MB_OK);//WizardDirValue路径
wpSelectProgramGroup:
MsgBox('NextButtonClick:
'#13#13'Youselected:
'''+WizardGroupValue+'''.',mbInformation,MB_OK);//开始菜单名
wpReady:
begin
ifnotRegValueExists(HKEY_LOCAL_MACHINE,'SOFTWARE\Test','config')thenbegin
ifMsgBox('程序执行需要Test.ext,是否安装!
',mbConfirmation,MB_YESNO)=idYesthenbegin
ExtractTemporaryFile('test.exe');
ifnotExec(ExpandConstant('{tmp}\test.exe'),'','',SW_SHOWNORMAL,ewWaitUntilTerminated,ResultCode)then
MsgBox('Test.exe出错:
'#13#13''+SysErrorMessage(ResultCode)+'.',mbError,MB_OK);
endelsebegin
IsSetup:
=false;
end;
BringToFrontAndRestore();
end;
end;
end;
Result:
=IsSetup;
end;
三.脚本格式概述
InnoSetup脚本大致上分成若干的段,各段掌管不同的功能。
每个段控制安装程序部分的某个不同方面。
每个段用包含在中括号“[]”中的段名开始,每个段里面是一些相关的条目。
其中有两种不同主要类型的段:
有些就象[Setup]段,条目包含指令名和值(格式为Directive=Value),还有一些就象[Files]段,条目被参数分隔。
这里是一个例子:
[Setup]
AppName=MyProgram
[Files]
Source:
"MYPROG.EXE";DestDir:
"{app}"
注意,在脚本中指定多个相同名字的段是合法的。
你可以通过在行起始位置加个分号“;”在脚本中写入“注释”(编译时被编译时忽略)。
例如:
;这是一条注释,放在这里只是要提醒我自己...
支持AC-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"
安