Inno setup 是一个免费的windows安装程序制作软件.windows 98,2000,XP,NT4.0,Me以及更高的版本均可使用.
软件打包中常用到的功能有:
*定制安装方式,如:自定义安装,完全安装
*拥有自由可控的卸载功能
*创建快捷方式,包括开始菜单和桌面
*创建注册表和.ini项目
*支持密码加密
*后台安装和后台卸载
*安装前和安装后执行一系列活动,比如检测注册表是否存在或写入注册表,检测进程是否运行,检测文件版本
*文件压缩,支持bzip2、7-Zip 、lzma格式的压缩.安装程序可以比较文件版本信息,替换正在使用的文件
市面上的很多软件都在使用此款软件作为安装包工具, 例如: bandicam ,迅雷,notepad++,foxmail, FileZilla,PotPlayer,navicat等等……
因为打包快捷,而且可以自己开发插件(.dll)放进去使用.
基本的使用方式百度上搜的话能搜出一大堆比如搜”inno setup打包工具使用” “inno setup脚本编写”,但是简单使用的方式,有时候会满足不了客户的特殊需求,所以这次要讲的是百度上有点难搜到,而且是我从入职以来到至今的写安装包的经验总结出来的几点技巧.
上述内容都可以在附件的 Isetup.chm文档中找到….
开始界面上的提示内容修改,主界面上的内容可以分为两块,如图画蓝线的和画红线的
画蓝线的在脚本中应该修改的位置, 是[setup]下的AppName和AppVersion如下图:
画红线的在脚本中默认是不显示的,修改的话需要自己加上[Messages],下面的各种属性需要到百度找, 附件中是我从百度下载下来的[Messages]的属性列表
效果如下:
安装完成页面上的提示语修改
还有其他界面上的内容也可以修改如:
准备界面(wpReady)
licence界面(wpLicense)
选择菜单分组界面(wpSelectProgramGroup)
选择安装路径界面(wpSelectDir)
自定义界面的话可以在创建界面时在[code]里直接修改,如图
例子就讲到这里,还有很多属性能修改,需要的可以从附件中拿到[Message]中的属性,这些属性都可以在……/inno/Default_cn.isl 这个文件中找到,是语言库…
脚本中也可以自己选取使用某个语言库,如图:
[Code]中的自定义界面创建就请参考CodeClasses.iss,这是innosetup自带的example脚本,附件里找到
这个功能安装包脚本[setup]里已经有提供有这个属性。
UsePreviousAppDir = yes 时会自动跳过安装目录选择界面直接安装到上次安装的目录下
脚本是根据安装包的AppId这个属性来判断是不是跟上次安装的安装包相同.
这跟2有稍微的区别,就是能看到上次安装的目录在此基础上可以选择安装路径.
这里就能用到inno的[Code]段中的函数.如图:
DefaultDirName是指安装的默认路径
{code:GetPath|Client} 中code:GetPath 是[code]段中自己写的一个可以读注册表的函数,|Client是参数,如果没有参数就写成{code:GetPath}即可.
[Code]段中的函数可以出现在整个脚本的任何位置,不在[Code]段中时需要使用 {code:xxxx} 这种调用方式.需要注意的是[Code]段中的函数中的任何变量,必须是已经有值的变量才行,不然运行时会报错. 需要保证这些变量有值就需要在[Code]段中写下初始化的函数
function InitializeSetup(): Boolean;
在安装程序初始化时调用,返回 False 中断安装,否则返回 True。
procedure InitializeWizard();
在启动时使用该事件函数来改变向导或向导页面。你不能在它被触发时使用 InitializeSetup 事件函数,因为向导窗体尚不存在。
一般是用InitializeSetup函数就可以了.
Inno有内置的读取注册表的功能函数RegQueryStringValue,应用举例代码看
function GetPath(Param: String): String;
var
strPath: String;
sFloader:String;
sdefaultpath:String;
begin
strPath := '';
sdefaultpath :='C:\Program Files\xxxxx';
if Param = 'Client' then
begin
sFloader := 'Software\xxxxx';
sdefaultpath := 'C:\Program Files\xxxxx';
end
if Param = 'Server' then
begin
sFloader := 'Software\xxxxx';
sdefaultpath := 'C:\Program Files\xxxxx';
end
if (RegQueryStringValue(HKEY_LOCAL_MACHINE, sFloader, 'Path', strPath))then
begin
Result := strPath;
end
else
begin
Result :=sdefaultpath;
end
end;
[UninstallDelete]
Name: {app}; Type: filesandordirs; Languages:
加上这段代码,表示卸载后删除文件和目录.可以在附件1中的ISetup.chm文档中搜索UninstallDelete来执行更多的删除操作,删除时能删除好多好多东西……
安装时运行批处理文件,这样就能把windows中的批处理的强大功能导入到了安装卸载过程中,实现过安装时备份功能,安装时删除,安装时移动等等功能……
此功能是在[Code]段中实现的,因为[Code]段中的代码能在整个脚本中的任何位置执行.下面是批处理文件的参数,文件名,工作目录的写法:
ShellExec(’’,ExpandConstant(sBatName), sBatParams,sBatPath, SW_HIDE, ewWaitUntilTerminated, ResultCode);
第一个参数: 这个不太懂,就写成空字符串就行了. 注:inno中字符串是单引号(‘’)来扩住的
第二个参数: ExpandConstant(sBatName)中ExpandConstant()是更改所有在sBatName中的常量到它们的值。例如,ExpandConstant(’{pf}’)是改变到安装程序的文件名,简单来说就是更改inno中的常量(宏)的字符串让ShellExec这个函数认识这个参数. sBatName:=’xxxx.bat’这样就行了.
第三个参数: sBatParams:=’”’ + 参数 + ‘”’ . 其中”双引号是为了防止运行批处理时出现错误,单引号扩住双引号,我试过 sBatParams := ‘参数’ ,结果参数中包含空格,运行批处理时一直失败.
第四个参数: sBatPath 同理 跟第三个参数相同的思路.
第五个参数: SW_HIDE表示运行时隐藏cmd窗口, SW_SHOW表示运行时显示此窗口
第六个参数: ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle分别表示:不等待cmd执行完成,等待cmd执行完成,等待用户输入直到超时时间.
第七个参数: 这个参数是返回结果,结果为0除外的都是错误,具体错误原因可以查MSDN
例子.
文件备份举例.rar脚本可以完成的打出一个安装包,也包含很多其他的内容,所以打开安装包之后直接ctrl+f搜索 BackDir , BackFile即可快速找到函数.
Innosetup默认支持调试功能,跟vs2008编译器差不多,先打断点然后点击单步步入或单步步过,执行到断点之后点击F8就是继续,点击F7就是进入到函数里面继续,如图:
修改[Setup]段中
Uninstallable: yes表示有卸载程序,no表示没有
UninstallFilesDir: 表示卸载程序放置的路径
UninstallDisplayName: 表示卸载程序的显示名称
举例使用IsTask.dll这个插件
在[Setup]段中写入
Source: compiler:IsTask.dll; Flags: dontcopy noencryption
Source: inno\IsTask.dll; DestDir: {app}\
其中DestDir:{app}\ 表示此插件安装后的 dll放置路径.
在[Code]段中任意位置,先导入函数
function KillTask(ExeFileName: string): Integer;
**external ‘KillTask@files:ISTask.dll stdcall delayload’; **
在[Code]段中使用函数,导入过程必须放在使用前面,不然识别函数失败
KillTask(‘tomcat7.exe’);
Include可以说是直接把这段代码复制到这个位置一样,可以把通常不用修改的内容卸载里面
Include可以用在整个脚本的任何位置.
比如这些也可以另外创建一个文件写进去然后在用include导入.
生活愉快 ~\(^o^)/~
inno setup 5 下载链接.