超好用的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服务。

posted @ 2022-12-15 14:31  大盟盟  阅读(1810)  评论(0编辑  收藏  举报