打包工具InnoSetup使用
一、摘要
1.描述
- 本文主要描述的是InnoSetup打包工具的使用,通过本文可简单的使用InnoSetup工具,简单的使用模版来生成自己喜爱的界面。
- 本文主要讲述自己如何去使用InnoSetup,网上的参考资料本身也十分多,所以我尽可能简单的描述其使用方法来帮助新手入门。
- 本文章主要是描述工具的使用,InnoSetup打包工具本身为开源免费软件,可免费使用。
- 郑重申明,本文章有些内容为其他博客文章总结产生,如有雷同侵权等描述,请联系本人删除。
2.关键字
打包工具,InnoSetup,上位机打包,配置源码,安装包生成。
二、什么是InnoSetup
Inno Setup用Delphi写成,其官方网站同时也提供源程序免费下载。它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀。InnoSetup是一个免费的安装制作软件,小巧、简便、精美是其最大特点,支持pascal脚本,能快速制作出标准Windows2000风格的安装界面,足以完成一般安装任务。官网: https://jrsoftware.org/isinfo.php
三、什么时候需要使用InnoSetup
平时我们Windows软件开发人员开发完一款软件后,我们需要将软件交给使用人员进行使用,一般比较简单的方法就是把生成的文件直接交付给对方,点击exe执行即可,但是这样有一个不好的地方就是杀毒软件会经常误删,版本也没有控制,当用户需要卸载的时候,我们是不能通过控制面板的程序进行删除,只能将文件夹整个删除,还有就是有的对电脑不太懂的人员不知道你给的文件如何去解压使用,相对麻烦,还有就是我们开发人员想把软件打包成一个exe文件,不需要其他的dll等文件的时候怎么办,InnoSetup可以很好的帮助解决这些问题,我之所以喜欢InnoSetup是因为有四个简单的原因,①操作简单,配置好后,以后每次执行以下即可生成文件。②可以生成中文的安装界面,这个就太香了,支持中文。③可将框架打包在里面并进行安装判断。比如NetFramework。④开源免费,可自定义界面。
四、InnoSetup生成安装包效果图
下面软件截图为本人使用C#开发的一个会议预约系统的安装包,打包好的安装包内由于包含的离线的NetFramework4.7.2框架,所以比较大,你可以选择在线的NetFramework,这样安装包就会非常小,安装过程中会自动判断电脑是否已经安装了NetFramework对应的版本,如果版本过低会提示安装对应框架,如果已经安装,则进行软件安装。
- 安装包如下图
- 安装过程中如下图
- 卸载过程中如下图
五、InnoSetup使用准备工具
- Windows操作系统电脑一台。
- InnoSetup增强版下载链接,这个软件可以在我的资源进行下载,如果没有积分的朋友可以在下方留言私信我,免费邮箱发送,请勿使用官方最新版或者其他版本打开配置文件,InnoSetup版本不同有些语法不兼容,导致无法编译通过,之前遇到的坑,也请大家使用我推荐的版本进行编译。
InnoSetup增强版:https://download.csdn.net/download/weixin_44926112/18371628 - InnoSetup配置文件,这里我打包成一个压缩包,文件目录都在,点击链接进行下载。
- InnoSetup配置,PSD源文件:https://download.csdn.net/download/weixin_44926112/18372102
六、InnoSetup使用介绍
- 安装好InnoSetup后,下载InnoSetup配置文件,解压后如下图所示。
- 要编辑修改的图片都已经放在了psd文件夹中,安装PS即可进行修改,注意不要动尺寸大小,否者会导致界面按钮等失效。
- 点击编译源码build.iss进行查看,下面对代码做一些简单的查看,便于大家进行修改,这儿我只展示需要修改的地方,其他地方可不做修改的话自行研究即可。
宏定义代码段,也可以自己添加,在这儿通过变量名称即可取得大致意思,也是我们需要修改的地方,新手只需要修改MyAppName ,MyAppNameZh ,MyAppExeName ,OutputFileName ,SourceMain ,SetupIconFilePath,MyAppId 即可。
#define MyAppName "MeetingRoomApp"//APP名称
#define MyAppNameZh "会议预约系统"//APP中文名称
#define MyAppVersion "1.1.0"//APP版本号
#define MyAppPublisher "XXXX有限公司"//发布者
#define MyAppURL "https://www.xxxx.com.cn/"//地址
#define MyAppExeName "MeetingRoomApp.exe"//执行文件名称
#define OutputPath ".\out"//输出文件路径
#define OutputFileName "MeetingRoomApp_v1.1.0_setup"//输出文件名称
#define SourceMain ".\app\MeetingRoomApp.exe"//执行文件,这个很重要,如果是放到默认app目录,那输入名称即可,如果不是要注意路径
#define SourceFolder ".\app\*"//需要打包的文件路径
#define LicenseFilePath ".\resource\license.rtf"//
#define SetupIconFilePath ".\resource\logo.ico"//图标
#define MyAppId "{{378232C1-71BA-4396-9ABA-48ABB10F3760}}"//唯一GUID,唯一识别码,就是APP的身份证,生成方式,菜单栏工具-产生GUID
#define ResourcesPath ".\resource\*"//其他资源文件路径
- 配置段一般不修改,保持默认即可。
AppId={#MyAppId}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
LicenseFile={#LicenseFilePath}
OutputDir={#OutputPath}
OutputBaseFilename={#OutputFileName}
SetupIconFile={#SetupIconFilePath}
Compression=lzma/ultra64
SolidCompression=yes
PrivilegesRequired=admin
Uninstallable=yes
UninstallDisplayName={#MyAppNameZh}
DefaultGroupName={#MyAppNameZh}
UninstallIconFile={#SetupIconFilePath}
Versioninfodescription={#MyAppNameZh} 安装程序
versioninfocopyright=Copyright(c) 2020
VersionInfoProductName={#MyAppName}
DisableReadyPage=yes
DisableProgramGroupPage=yes
DirExistsWarning=no
DisableDirPage=yes
VersionInfoVersion="3.0"
UninstallDisplayIcon={app}\{#MyAppExeName}
LanguageDetectionMethod=uilanguage
ShowLanguageDialog=no
- 文件路径段,如果保持路径不修改,这儿也可以不做修改。
Source: {#ResourcesPath}; DestDir: {tmp}; Flags: dontcopy solidbreak ; Attribs: hidden system
Source: {#SourceMain}; DestDir: "{app}"; Flags: ignoreversion
Source: {#SourceFolder}; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: ".\unresource\skin\*.*"; DestDir: "{app}\skin"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: ".\unresource\plugin\botva2.dll"; DestDir: "{app}\plugin"; Flags: ignoreversion
Source: ".\unresource\plugin\InnoCallback.dll"; DestDir: "{app}\plugin"; Flags: ignoreversion
- 语言段代表安装过程中的语言支持,InnoSetup官方是不支持中文的,但是有中文语言包扩展,在这儿我已经把文件放在了resource目录下,默认只有中文,如果要加其他支持可自行添加。
Name: "chinese"; MessagesFile: ".\resource\ChineseSimp.isl"
- 代码段比较复杂,也比较多,其实我们比较关注的就是安装前的检查,比如我这儿是检查的系统环境是否支持NetFramework4.7.2及其更高版本,如果不是,则需要安装对应的版本,这儿要注意的就是我们如何来判断电脑已经安装了对应的版本,可通过官方查询,通过注册表读取来判断,其实看代码很简单,对于这种语法,和VB类似。
function CheckNetFramework472():boolean;
var version: Cardinal;
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full') then
begin
Result:=false;
Exit;
end;
if RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', version) then
begin
if version >= 461808 then
begin
Result:=true;
Exit;
end;
end;
Result:=false;
end;
function InitializeSetup(): Boolean;
var ErrorCode: Integer;
ResultCode: Integer;
begin
ShellExec('open','taskkill.exe','/f /im {#MyAppExeName}','',SW_HIDE,ewNoWait,ErrorCode);
ShellExec('open','tskill.exe',' {#MyAppName}','',SW_HIDE,ewNoWait,ErrorCode);
if not CheckNetFramework472() then
begin
if MsgBox('您没有安装程序执行环境NetFramework4.7.2,程序安装后将无法运行,是否现在立即安装?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDNO then
begin
Result:=false;
Exit;
end
ExtractTemporaryFile('NetFramework472.exe');
Exec(ExpandConstant('{tmp}\NetFramework472.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
end;
result := True;
end;
- 修改好对应的内容后,点击构建编译或者Ctr+F9即可编译,也可以通过运行F9查看仿真,编译后一个简单的安装包就制作好了。
- InnoSetup帮助文档是非常友好的,点击菜单栏帮助即可查看,我这边的版本都是翻译后的,InnoSetup网上资料不是很多,很多都需要自己去查看帮助即可完成,需要修改的也不多。
七、InnoSetup实现的安装模版
- 以下的资源都是网络上下载的,也感谢之前辛辛苦苦的工程师的无私奉献,这边我只把我收集的一些模版图片放在这儿,也让大家感受以下InnoSetup的强大之处。
- 案例一
- 案例二
- 案例三
- 案例四
八、其他
本文主要是讲解InnoSetup工具的使用,有些地方可能会有描述性的错误,希望看到的朋友及时指出,我会及时更正错误,其他地方有些借鉴的描述,写此文章的目的是为了交流,非商业用途,欢迎私信讨论,感谢大家阅读。
九、参考
【1】:InnoSetup进阶篇https://blog.csdn.net/qq_37518975
【2】:InnoSetup初级篇https://blog.csdn.net/hebbely/article/details/78168071