超好用的inno打包工具(免费)学习总结
Inno setup简介
Inno Setup 是一个免费的Windows安装程序制作软件。
优点:免费、功能全面、性能稳定。
主要功能:
1.支持现在所有正在使用的 32 位 Windows 版本: Windows 95,98,2000,Server 2003,XP,Me,NT 4.0 (不需要服务包)。
2.支持创建单个 EXE 格式的安装程序,使你的程序可以很方便地在网络上发表。同时也支持磁盘延伸。
3.标准的 Windows 2000/XP 样式向导界面。
4.定制安装类型,例如:完整安装,最小安装,自定义安装。
5.完整的卸载功能。
6.文件安装:
包括完全的“压缩”支持,bzip2 和 7-Zip LZMA 文件压缩。安装程序可以比较文件版本信息,替换正在使用的文件,使用共享文件计数,注册 DLL/OCX 和类型库,以及安装字体。
6.可以在任意地方创快捷方式建,包括开始菜单和桌面。
7.创建注册表和 .INI 项目。
8.完整的 Pascal 脚本引擎。
9.支持多种语言选择安装。
10.支持密码和加密安装。
11.后台安装和后台卸载。
12.全部源代码公开。
使用方法
详见Inno Setup 中文使用文档。
以打包户自己软件(***)为例:
准备阶段:
软件程序
dotNetFx40_Full_x86_x64.exe
MySQL5.6.24解压到Mysql文件夹中
iisexpress_8_0_RTM_x64_zh-CN.msi
vcredist_x86.exe
配置文档
Inno Setup软件
打包过程:
第一步:创建安装程序。
点击文件,新建一个安装变异脚本,脚本用一个“.iss” (表示 Inno Setup Script) 的扩展名。
点击下一步,并输入应用程序信息。
点击下一步,将允许用户更改应用程序文件夹取消掉。
点击下一步,在应用程序文件页面上,选择用用程序没有主执行文件,选择添加文件,添加dotNetFx40_Full_x86_x64.exe
、iisexpress_8_0_RTM_x64_zh-CN.msi、vcredist_x86.exe,选择添加文件夹,添加InStall文件夹,该文件夹下存放Mysql、Web、WebServer、config、tools。
点击下一步,勾选在开始菜单文件夹中创建Internet快捷方式和再开始菜单文件夹中创建卸载图标。
点击下一步,进入应用程序文档,添加许可文件(用户安装协议)。
点击下一步,进入安装语言选择页面,Inno Setup 支持多国语言。
点击下一步,编译设置,设置输出文件夹、文件名、安装图标文件、安装密码。
点击下一步。
点击下一步。
点击完成,安装编译脚本创建完成。
修改编译脚本
; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "appName" #define MyAppVersion "1.0" #define MyAppPublisher "品牌" #define MyAppURL "http://localhost:8888/" #define IncludeFramework true #define IsExternal "" #define IncludeIIS true #define IsExternal "" #define IsWindows10 true [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{2259C9AE-1CEB-4AC6-B609-FC7C8553165E} AppName={#MyAppName} AppVersion={#MyAppVersion} AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName=C:\Program Files\{#MyAppName} DefaultGroupName={#MyAppName} DisableDirPage=yes DisableProgramGroupPage=yes LicenseFile=Z:\InStall\config\license_ch.rtf OutputDir=C:\Users\Desktop OutputBaseFilename=VRF Billing Eduemon Compression=lzma SolidCompression=yes ;ArchitecturesAllowed=x64 ;ArchitecturesInstallIn64BitMode=x64 AlwaysRestart=yes PrivilegesRequired=admin AppCopyright=授权公司 LZMAUseSeparateProcess=yes SetupIconFile=Z:\InStall\config\pic.ico AllowCancelDuringInstall=yes DirExistsWarning=yes AlwaysShowDirOnReadyPage = yes [Languages] Name: "chinesesimp"; MessagesFile: "compiler:Default.isl" [Files] Source: "Z:\InStall\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "Z:\software\dotNetFx40_Full_x86_x64.exe"; DestDir: "{tmp}"; Flags: ignoreversion ;Check: NeedsFramework() Source: "Z:\software\iisexpress_8_0_RTM_x64_zh-CN.msi"; DestDir: "{tmp}"; Flags: ignoreversion ;Check: CheckIIS() Source: "Z:\software\vcredist_x86.exe";DestDir:"{tmp}";Flags:ignoreversion ; check : NeedsVC9SP1() Source: "Z:\InStall\config\install.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "Z:\InStall\config\service.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "Z:\InStall\config\services.bat"; DestDir: "{tmp}"; Flags: ignoreversion ;Check:CheckIsWindows10() Source: "Z:\InStall\config\uninstall.bat"; DestDir: "{app}"; Flags: ignoreversion Source: "Z:\InStall\config\IIS.bat"; DestDir: "{app}"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Ini] Filename:"{app}\mysql\my-default.ini";Section:"mysqld";Key:"basedir"; String:"{app}\mysql" Filename:"{app}\mysql\my-default.ini";Section:"mysqld";Key:"datadir"; String:"{app}\mysql\data" Filename:"{app}\mysql\my-default.ini";Section:"mysqld";Key:"port"; String:"3306" Filename:"{app}\mysql\my-default.ini";Section:"client";Key:"port"; String:"3306" [Icons] Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; Name: "{userdesktop}\{#MyAppName}.html"; Filename: "{#MyAppURL}"; IconFilename:"Z:\InStall\config\pic.ico"; [Registry] Root: HKCU; Subkey: "Software\myapp"; Flags: uninsdeletekeyifempty Root: HKCU; Subkey: "Software\myapp\myapp"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\myapp"; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: "Software\myapp\myapp"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\myapp\myapp\myapp"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}";Flags: uninsdeletekey [Run] #if IncludeFramework Filename: {tmp}\dotNetFx40_Full_x86_x64.exe; Parameters: "/q:a /c:""install /l /qn"""; WorkingDir: {tmp}; Flags: skipifdoesntexist; StatusMsg: "Installing .NET Framework ......" #endif Filename: {win}\Microsoft.NET\Framework\v4.0.30319\CasPol.exe; Parameters: "-q -machine -remgroup ""{#MyAppName}"""; WorkingDir: {tmp}; Flags: skipifdoesntexist runhidden; StatusMsg: "Setting Program Access Permissions..." Filename: {win}\Microsoft.NET\Framework\v4.0.30319\CasPol.exe; Parameters: "-q -machine -addgroup 1.2 -url ""file://{tmp}/*"" FullTrust -name ""{#MyAppName}"""; WorkingDir: {app}; Flags: skipifdoesntexist runhidden; StatusMsg: "Setting Program Access Permissions..." #if IncludeIIS Filename: msiexec.exe; Parameters: "-i ""{tmp}\iisexpress_8_0_RTM_x64_zh-CN.msi"" -qn"; WorkingDir: {tmp};Flags: skipifdoesntexist runhidden; StatusMsg: "Installing IIS......" #endif Filename: {tmp}\vcredist_x86.exe ;Parameters: /q ;WorkingDir:{tmp};Flags:skipifdoesntexist runhidden; StatusMsg: "Installing vcredist_x86......" Filename: {app}\service.bat;Description:"BAT"; Flags: skipifsilent shellexec runhidden nowait #if IsWindows10 Filename: {tmp}\services.bat;Description:"BAT"; Flags: skipifdoesntexist shellexec runhidden nowait #endif Filename: {app}\install.bat;Description:"BAT"; Flags: skipifsilent shellexec runhidden nowait Filename: {app}\IIS.bat;Description:"BAT"; Flags: skipifsilent shellexec runhidden nowait [UninstallRun] Filename: {win}\Microsoft.NET\Framework\v4.0.30319\CasPol.exe; Parameters: "-q -machine -remgroup ""{#MyAppName}"""; Flags: skipifdoesntexist runhidden; Filename: {app}\uninstall.bat ;Flags: runhidden [UninstallDelete] Type :filesandordirs ;Name:"C:\Program Files\{#MyAppName}\mysql"; Type :filesandordirs ;Name:"C:\Program Files\{#MyAppName}"; [code] function CheckIsWindows10(): boolean; var Version :TWindowsVersion; begin GetWindowsVersionEx(Version); if(Version.Major = 6 ) and (Version.Minor = 1 ) and (Version.ProductType = VER_NT_WORKSTATION) then Result := false else Result := true; end ; procedure InitializeWizard(); var ResultStr:String; ResultCode:Integer; begin if RegQueryStringValue(HKLM,'SOFTWARE\myapp','UninstallString',ResultStr) then begin ResultStr :=RemoveQuotes(ResultStr); Exec(ResultStr,'','',SW_SHOWNORMAL, ewWaitUntilTerminated,ResultCode); end; end; function IsDotNET40Detected(): boolean; var success: boolean; install: cardinal; begin success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full', 'Install', install); Result := success and (install = 1); end ; function NeedsFramework(): Boolean; begin Result := (IsDotNET40Detected = false); end; var vc9SP1Missing :boolean; function NeedsVC9SP1(): Boolean; begin Result := vc9SP1Missing; end; function InitializeSetup(): boolean; var Rcode : Integer; version: cardinal; begin if RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{94D70749-4281-39AC-AD90-B56A0E0A402E}', 'version', version)=false then begin vc9SP1Missing := true; end; Result :=true; end ; function CheckIIS():boolean; begin Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\IISExpress\8.0'); end; function GetCustomSetupExitCode(): Integer; begin if (IsDotNET40Detected = false) then begin MsgBox('.NET Framework 未能正确安装!',mbError, MB_OK); result := -1 end; end;
各函数作用说明:
CheckIsWindows10():检测系统是Windows7还是Windows10版本,由于自动勾选服务时,不同Windows版本勾选的服务不同所设计的函数。
InitializeWizard():通过检测注册表信息来查看此电脑是否安装过myapp软件,如果安装过,先卸载myapp在安装软件。
IsDotNET40Detected()和NeedsFramework():这两个函数检测电脑是否安装.NetFrameWork4.0版本。如果安装过.NetFrameWork4.0,将跳过.NetFrameWork4.0的安装,直接进入下一步;未安装.NetFrameWork4.0,则静默安装.NetFrameWork4.0。
NeedsVC9SP1()和InitializeSetup():在安装初始过程中,检测电脑是否安装Microsoft Visual C++ 2010 插件,如果安装过插件,跳过安装过程;如未安装插件,则静默安装插件。
CheckIIS():检测电脑是否安装IIS8.0,如果安装过IIS,则跳过IIS的安装过程;如果未安装IIS,则静默安装IIS。
GetCustomSetupExitCode():此函数是判断.NetFrameWork4.0是否安装成功的,如果未安装成功,则弹出“.NET Framework 未能正确安装!”;如安装成功,不显示任何内容。
Bat文件的作用:
为确保软件安装后能够正常运行,应该勾选Windows功能、配置MySQL数据库、创建IIS虚拟Web站点、安装CalculatorService服务。