InnoSetup 的美化相应的帖子也比较多,但是代码不是很全。。。所以我专门出了这篇文章来记录下这个美化过程。
废话不多说,先上个成果:

前端er们可以直接下载 vue-nw-seed 这个分支,一键 build就出效果了。

一、InnoSetup 增强版

这个部分很重要,是实现自定义界面的绝对前置步骤。
完成这个任务也很简单,可以自己下载安装就搞定。
当然,找资源的过程比较麻烦,所以直接提供了一个,并用 node-innosetup-compiler 包裹了一下,使之可以直接在 Node.js 下应用,最终的增强版在 deps/innosetup 这里可以看到。
注意
InnoSetup 本身是开源免费的,希望大家在用的过程中注意一下作者的 LICENSE 。

二、iss 配置文件

这个部分无需赘述,对于新手来说比较复杂的一个事儿,给个文档 What is Inno Setup? 先。

1、Setup Script Sections

可以直接双击 deps/innosetup/bin/Compil32.exe 打开一个可视化的配置窗口,按照引导可以直接生成一个通用流程中简单的安装配置,会生成一个类似 setup-simple.iss 这种的 iss 配置文件。
当然,一个扁平漂亮的界面,肯定不是这种简单的配置能满足的。。。
所以,看我提供的一个 setup.iss ,其包含完整的流程控制和界面的控制。
这里的代码太长了,加上注释 455 行,就不贴过来了,戳链接进去看吧。

2、Pascal Script

在那 455 行代码中主要就是 [code] 块下面的 Pascal Script ,通过它来控制安装流程和界面的美化。

  • 控制安装流程的原理是 InnoSetup 通过 Pascal Scripting: Event Functions 这种事件机制,把流程节点的控制交给 Pascal Script ,使其可以控制上一步下一步等等的操作。
  • 界面的美化,主要是调用两个美化插件动态库:botva2.dll 和 InnoCallback.dll。用其来控制贴图的位置和样式,和给按钮绑定相应的事件等等的。

详细的控制方式参见 setup.iss 文件中的注释,此处不再详细解释啦。。。解释起来太多了。

3、setup resources

这个部分就是用来存放贴图资源和美化插件动态库的地方。
我默认放在示例项目的 /build/setup_resources 这个位置。
如果你去看过上文 setup.iss 这个文件的话,就会发现里面的资源文件路径的配置被搞成类似这个样子

#define LicenseFilePath "_resourcesPath_\license.txt"
#define SetupIconFilePath "_resourcesPath_\logo.ico"
#define ResourcesPath "_resourcesPath_\*"

这是因为各个项目要求的打包配置和路径可能不一致,特意做了一个处理,详见build-win-setup.js

// rewrite name, version to iss
fs.readFile(issPath, null, function(err, text) {
if (err) return reject(err) let str = iconv.decode(text, 'gbk')
.replace(/_name_/g, name)
.replace(/_appName_/g, appName)
.replace(/_version_/g, version)
.replace(/_outputPath_/g, outputPath)
.replace(/_outputFileName_/g, getOutputName(outputFileName, { name, version, platform }))
.replace(/_filesPath_/g, files)
.replace(/_resourcesPath_/g, resourcesPath)
.replace(/_appPublisher_/g, appPublisher)
.replace(/_appURL_/g, appURL)
.replace(/_appId_/g, appId) fs.writeFile(tmpIssPath, iconv.encode(str, 'gbk'), null, function(err) {
if (err) return reject(err) // inno setup start
innosetupCompiler(tmpIssPath, { gui: false, verbose: true }, function(err) {
fs.unlinkSync(tmpIssPath)
if (err) return reject(err)
resolve(opt)
})
})
})

如果仅仅想单纯的用 InnoSetup 打包安装美观的界面,可以自直接换一下相应的配路径置。

三、Q & A

需要单独说一下几个踩到的坑。。。
1、iss 文件需要什么特定的编码格式吗?
中文的话,需要 ansi 编码,不然用其他编码,打包出来在界面上的中文会乱码!
这也是我直接用文字贴图来代替 label 以确保界面中的文字显示万无一失的原因。

2、这个 InnoSetup 增强版 和和普通的有啥区别?
说实在的,我也没太搞明白,InnoSetup 本身就是开源和免费的,可以自己修改并编译。现在我用的这个版本应该是国内某前辈搜集的一些脚本等东西集合出来单独打包出来的一个增强版。

3、为啥不单独搞个 InnoSetup 美化的项目?
一方面不确定 InnoSetup 增强版 这个版权协议,另一方面不确定大家的需求咋样,暂时这样,让大家可以通过 源码 + 详细的注释 习得这部分的技能。如果确实这部分需求很强大,请私信我,或者发 issue 讨论下这个项目该咋整吧。

四、参考资料

通过 InnoSetup 美化安装界面的更多相关文章

  1. Innosetup中在安装界面左下角添加超链接

    在程序的安装界面左下角加上超链接,如下图: 1. 新建一个标签,这里使用的控件是TNewStaticText ,完整的方法是 //该方法传入两个参数: //1. ParentForm:将这个URLLa ...

  2. 译:用InnoSetup模块化安装依赖项

    译文出处:http://www.codeproject.com/Articles/20868/NET-Framework-Installer-for-InnoSetup 源文件下载:http://fi ...

  3. NSIS安装界面无虚线框移动

    最近很多应用程序都在安装界面的美化上面下足了功夫,一个漂亮流畅的安装界面无疑会给其带来用户体验上的加分,其中一个无虚线框跟随鼠标移动比较有趣,狂翻msdn后终于找到了控制函数SystemParamet ...

  4. U盘安装centos7 无法进入安装界面,进入dracut命令的解决办法。

    最近想要装一个centos7 玩一玩,就从网上下了个镜像,用UltraISO制作了安装U盘,准备在旧电脑上装一个. 结果始终无法进入安装界面,而是进入了dracut命令行. 从网上找了解决方法:

  5. Wix 安装部署教程(十) --来,用WPF做个漂亮的安装界面

    在上一篇中曾留下两个问题,.Net捆绑安装不触发以及路径选择的问题现在都已经解决,这段时间花的最多的地方还是WPF调样式上面,奈何WPF功力不够,暂时还是没有达到自己想要的效果.另外ViewModel ...

  6. Wix 安装部署教程(九) --用WPF做安装界面

    经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎 ...

  7. Tortoise SVN 安装界面

    Tortoise SVN 安装界面 TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,不需要为使用它而付费 第一步: 点击TortoiseSVN-1.6.6.17493-w ...

  8. Solidworks安装界面是英文的解决办法

    [问题描述] 一样的安装文件,同事之前安装界面就是中文的,安装好以后软件也是中文的. 这几天系统挂了,重装系统后就发现安装界面是英文的,安装好以后也是英文. win7系统,位数不详,solidwork ...

  9. 以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转)

    以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转) ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCU ...

  10. Wix 安装部署教程(三)自定义安装界面和行为

    接上一篇自定义安装界面,这篇继续探索,首先介绍下,Wix为我们定义了五种风格,每种风格的UI都是有一定顺序的.我们可以改变安装顺序,也可以完全自定义一个Dialog插入其中.比如Wix_Mondo 风 ...

随机推荐

  1. 课程预告丨12月15日官方直播带你领略ArkUI的声明式开发范式之美

    方舟开发框架(ArkUI)的声明式开发范式有什么优势?Java/JS/eTS(extended TypeScript)三种语言,用哪种语言更好? 12月15日 19:00-20:30,Hello Ha ...

  2. HDC2021技术分论坛:跨端分布式计算技术初探

    作者:zhengkai,分布式通信首席技术专家 当今的移动应用都向着智能化和多样化方向发展,例如AI辅助,VR/AR应用,沉浸式游戏等.然而现实中的移动设备,因为便携性要求受限于尺寸.电池容量以及温控 ...

  3. 一文带你详细了解HarmonyOS折叠屏设计规范!

    原文:https://mp.weixin.qq.com/s/G25IbfcX2Bq9s1IDPCELGw,点击链接查看更多技术内容. 随着新一代折叠屏手机HUAWEI Mate Xs 2发布,Harm ...

  4. android 当在github下载一个android项目后

    前言 github是一个很好的社区,有时候呢,我们从android下载项目下来无法build,有很多原因,比如说库不见了,或者说自己没有安装过支持的api版本等,会遇到各种问题. 在此总结一下. 问题 ...

  5. 重新整理.net core 计1400篇[二] (.net core 改造控制台项目)

    前言 为.net core 命令行的基础上写的,如果有兴趣的话,可以去看我的.net core 前文. 下面介绍如何将.net core控制台转换为.net core web应用. 正文 如果我们要实 ...

  6. websocket fleck demo

    前言 fleck 比较简洁,想看下他的源码的,先感受一下demo吧. 正文 先上代码. static IDictionary<string, IWebSocketConnection> d ...

  7. https http2 http3

    HTTP 1.1 对比 1.0,HTTP 1.1 主要区别主要体现在: 缓存处理:在 HTTP 1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判 ...

  8. Spring JDBCTemplet通用RowMapper帮助类

    1 import java.lang.reflect.Method; 2 import java.math.BigDecimal; 3 import java.math.BigInteger; 4 i ...

  9. 力扣569(MySQL)-员工薪水中位数(困难)

    题目: 写一个SQL查询,找出每个公司的工资中位数,以任意顺序返回结果表.查询结果个数如下所示. 输出结果如下:  解题思路: 中位数:位于集合正中间的元素.当数据总书为奇数时,最中间的数就是中位数, ...

  10. 合阔智云核心生产系统切换到服务网格 ASM 的落地实践

    简介: 合阔智云提供了从全渠道交易管理到订单履约再到门店供应链完整的餐饮零售连锁解决方案,整个方案采取微服务设计,并深度使用了 Kubernetes 作为生产调度平台. 作者:刘如鸿   背景 合阔智 ...