在 github 仓库里的 通过 InnoSetup 美化安装界面 提供持续更新

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.dllInnoCallback.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 startinnosetupCompiler(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 讨论下这个项目该咋整吧。

四、参考资料

  • 互联网软件的安装包界面设计-Inno setup

  • INNOSETUP 仿有道云安装包界面

  • Pascal 入门

  • InnoSetup docs: Event Functions

通过 InnoSetup 美化安装界面相关推荐

  1. Innosetup安装界面美化卸载界面美化

    1.安装界面效果图: 2.卸载界面效果图: 3.资源详情 下载资源包 innosetup安装界面美化.zip ┌─ app 包含exe的程序及依赖文件(本例子使用nwjs 27.5) │ ├─ dst ...

  2. arch linux界面优化,ArchLinux美化之界面美化

    ArchLinux美化之界面美化: Conky.BURG 主题图标: Numix--扁平化绚丽黑色调 底部Docky: plank 安装: 查询相关的包:(先添加archlinuxcn源到/etc/p ...

  3. 安装matlab时 安装界面乱码

    最近重装了一次matlab,结果发现安装界面乱码!!! 安装之后整个界面都乱码! 而且matlab2018a之后改bin目录下的localc.xml也没用 网上也有一些办法是改自己的区域,改系统区域设 ...

  4. SQL Server 2000安装时不出现安装界面,进程中存在解决

    在XP和Server 2003系统中安装SQL Server 2000过程中,点击安装后,一直不出现安装界面,查看进程中也有,一直无反应. 解决办法: 首先重新启动机器,或者任务管理器里面结束2个sq ...

  5. 因xhost命令和DISPLAY环境变量操作不当导致无法启动Oracle图形化安装界面

    在redhat操作系统上安装Oracle 11.1时,遇到在执行runInstaller后无法启动安装图像化界面,甚是郁闷. 问题现象: 使用Xmanager2.0软件登陆AIX桌面,root用户可以 ...

  6. InstallShield自定义安装界面

    版权声明: 可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息. 前言: 对于一些InstallShield用户或企业,对于安装包界面除了采用默认的安装对话框外,有时可能会需要利用安装界 ...

  7. 通过加载 QSS 文件的方式美化 QT 界面

    通过加载 QSS 文件的方式美化 QT 界面 1 配置工程 在进行配置之前,建议先在工程的根目录下新建一个 .qss 文件,方便后面的添加 1.打开目标工程,选中此工程,鼠标右键单击 Add New ...

  8. 《修改winXP pro安装界面》 、《修改winXP pro开机画面》、《修改winXP pro登录画面》...

    一.<修改winXP pro安装界面>  ----------------------------  安装界面----也就是安装复制完系统文件,重启进入的安装界面,这个界面停留的时间较长, ...

  9. python安装界面翻译_python环境搭建

    如果想要运行python需要有解释器和编辑器. 什么是解释器 解释器我们可以把它理解成翻译官,它是将我们写的python代码翻译成计算机能够懂得机器语言. 然后计算机收到解释器的命令来干活,最终再将结 ...

最新文章

  1. 实现费用管理 mysql_电信资费管理系统的设计与实现(NetBeans,MySQL)
  2. java中类与对象回顾总结
  3. php环境搭建5.6_WIN8.1下搭建PHP5.6环境
  4. leetcode516 最长回文子序列
  5. linux环境 前端开发环境搭建,Linux运维知识之linux 前端环境搭建
  6. 使用LDAP查询快速提升域权限
  7. react-router使用总结
  8. [我的常识]动物庄园里说鼻环,到底为啥要穿鼻环呢
  9. [译] iOS 11:机器学习人人有份
  10. 【51单片机】SG90舵机控制
  11. 还在用 ZXing ? 试试华为统一扫码服务吧!
  12. m4125idn如何扫描_京瓷ECOSYS M4125idn驱动
  13. 将pdf文件转换成word,csv文件
  14. 高考加油别学计算机图片,高考加油励志说说带图片,2020高考加油说说配图
  15. 算术运算符——加号的多种和自增自减
  16. 2020 工业互联领域最具商业合作价值企业盘点
  17. 云原生周报 | K8s 官方推出纪录片;BFE 2021开源总结;服务网格在联通的落地实践
  18. 小白程序员的学习路线
  19. HTML5期末大作业:中国传统节日网页设计——端午节(9个页面) HTML+CSS+JavaScript 节日网页HTML代码 学生网页课程设计期末作业下载...
  20. 北京市门头沟区谷歌卫星地图下载

热门文章

  1. 【数仓】数据仓库高频面试题题英文版(1)
  2. java 字母个数字_Java 中字母对应的数字是多少
  3. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):的三种解决方式
  4. 突然集体涨价的背后 共享充电宝未来会走向何方?
  5. 【GANs】Generative Adversarial Nets
  6. 数学建模拿到赛题后怎么办及一些(“歪门邪道”)小技巧——赛前必看
  7. 正负号 substr java_实战LeetCode 系列(一) (题目+解析)
  8. [BZOJ2298]problem a
  9. oracle mysql sqlserver对比_Mysql、Oracle、SqlServer的JDBC连接实现和对比(提供驱动包)...
  10. 七、系统架构 - 伸缩性架构设计