安装包UI美化之路-升级安装与静默安装一键打包
在实际应用中,除了产品安装外,还需要能够持续升级到新的版本,这时候升级方案就显得比较重要;而还有一些使用场景,需要咱们的安装包在安装时,不要显示安装界面,直接在后台进行安装!
这些业务功能,都是非常实用且必要的,我们当然不会漏掉!nsNiuniuSkin安装包打包解决方案,发展到今天,已经不再是一个安装包UI美化的插件了;而是一整套完整的安装包制作与升级解决方案,UI界面变成了其中的一个点;我们一如既往的关注每一个细节,做精而美的产品!
总体思路与方案
在我们的解决方案中,产品安装包与产品升级包就是同一个安装包,普通安装包与静默安装包,也是同一个包;即同一个安装包具备了首次安装、升级安装、静默安装等等能力,只需要通过运行安装包时,按要求传递不同的命令行参数即可。
在安装包启动的时候,往往有两种方式:
- 一种是在桌面双击直接运行安装,同时进行安装目录与安装行为的选择控制,点击下一步进行安装;
- 一种是通过其他程序调用起来,通过命令行参数指定相应的安装路径,指定安装行为 比如是否自动开始安装,是否显示界面,安装完成是否自动运行目标程序等
在制作安装包时,我们给安装包内置了几个命令行参数,以便在后续的升级与静默安装的场景中能够快速应用。
参数名称 | 参数解释 | 示例 |
---|---|---|
-AutoInstall | 是否自动开始安装 | -AutoInstall=1 |
-AutoOpen | 安装完成后,是否自动打开主程序 | -AutoOpen=1 |
-fakecmd | 占位命令,无实际意义 | -fakecmd=1 |
/S | 用于指定是否是静默安装 | /S |
/D | 用于指定安装路径 | /D=E:\Software\Test\ |
其中/S与/D是NSIS内置命令,其他的参数的解析代码如下,解析出来后,我们在安装脚本中将根据相关的标志位来控制后续的安装行为:
Function InstallParamCheck #获取安装包的命令行参数,确认是升级安装还是静默安装#-fakecmd=1作为占位符,在调用时,请保持,并且保证各个参数的顺序,否则会有解析问题#Setup.exe -AutoInstall=1 -AutoOpen=1 -fakecmd=1 /S /D=E:\Software\Test\ #testStrCpy $sCmdAutoInstall "0"${Getparameters} $R0#解析参数数据 ${GetOptions} $R0 "-AutoInstall=" $sCmdAutoInstall${GetOptions} $R0 "-AutoOpen=" $sCmdOpenWhenFinishedFunctionEnd
接下来我们实际看看如何应用:
软件升级
软件产品一般的升级逻辑如下:
在软件主程序启动或运行过程中,能够检查是否有新版本 一般是拿软件本地版本,调用服务器端的版本检查接口,以确定是否有新版本要升级,以及新版本安装包(即升级包)的下载地址
在软件主程序中,下载新版本的安装包到本地
在软件主程序中,调用刚下载下来的新版本安装包,传递指定的命令行参数(传递当前主程序所在目录,以便覆盖原来的程序文件),进行升级
新版本安装包安装完成后,自动拉起新的软件主程序,升级完成
比如在nsNiuniuSkin界面在线设计引擎安装包所在目录下,通过命令行输入以下命令,则可以指定安装目录,自动开始安装:
NSNiuniuSKin_DuiDesigner_Setup.exe -AutoInstall=1 -AutoOpen=1 -fakecmd=1 /D=E:\Software\Test\
注:
- 在不同的软件语言中,调用第三方程序,传递命令行的方式各不相同,但最终的行为都将是一致的
- 如果此处不指定安装目录,其实也是可以的,我们会自动从注册表中查找上次安装的路径进行安装,同样也会是当前主程序所在目录
- 需要注意的是 -fakecmd,这个参数并无实际意义,主要用于占位,否则在安装包中解析前面的一个参数会失败
以上流程中,第1点与第2点、第3点是软件产品自己需要处理的事情,这对于各个软件厂商而言,也是非常容易的事;nsNiuniuSkin在这中间所要做的事情是:
- 检查命令行参数,确定安装行为
- 检查命令行参数,确定安装路径
- 杀掉旧的主程序,开始新的版本的安装
- 安装完成后,自动拉起新的主程序
这样来看,是不是软件升级的流程就比较清晰了呢?值得一提的是,我们不做增量升级,我们做的是安装包的自动覆盖安装,来实现版本的升级。
静默安装
静默安装在常规的安装行为中,不是很常见,但也确实有其应用场景,比如在安装自己的产品时,需要依赖一个第三方的产品功能;或者需要把自己的产品在安装其他产品时,同步进行安装,这时候静默安装的作用就体现出来了。
nsNiuniuSkin安装包打包解决方案通过解析命令行参数,设置静默安装标志,同时将整个安装行为路由到普通的安装行为中,在不呈现界面的前提下,确保与普通安装包的安装行为一致,避免需要维护普通安装与静默安装的两个不同的安装逻辑分支。
与此同时,静默安装同样可以指定软件要安装到的路径,如果不指定,则会以安装包的默认安装路径进行安装。
比如在nsNiuniuSkin界面在线设计引擎安装包所在目录下,通过命令行输入以下命令,则可以指定安装目录,自动开始静默安装:
NSNiuniuSKin_DuiDesigner_Setup.exe -AutoOpen=1 -fakecmd=1 /S /D=E:\Software\Test\
与软件升级的流程相比,静默安装主要是多出了一个 /S 参数来确定是否静默安装,这样运行起来的安装包,没有任何的界面显示;同时不用再指定是否自动开始安装,静默安装都是自动开始安装的。
假如你是想在一个NSIS安装包中,静默的安装我们的上述安装包的话,脚本可以这样写:
ExecWait '"$INSTDIR\NSNiuniuSKin_DuiDesigner_Setup.exe" -AutoOpen=0 -fakecmd=1 /S /D=E:\Software\Test\'
后记
你的产品是否也需要这样的功能呢,你打算如何实现呢,咱们一起聊聊吧!
您也可以下载我们的nsNiuniuSkin界面在线设计引擎安装包,实际测试一下: http://www.leeqia.com/download/NSNiuniuSKin_DuiDesigner_Setup.exe
结语
在安装包安装过程中,精美的UI往往能让客户对所安装产品的印象更加深刻,更能体现出软件服务商在用户体验上的专注与用心! 希望我们的努力,能够让安装包制作再容易一点,再快乐一点!
愿天下没有难做的安装包!
安装包UI美化之路-升级安装与静默安装一键打包相关推荐
- 安装包UI美化之路-Electron打包出界面美观,功能完善的安装包,这三步就够了
这篇文章应该说是<安装包UI美化之路-nsNiuniuSkin安装包制作可视化配置向导>的延伸与进一步应用,在可视配置的基础之上,生成供electron-builder打包的脚本! 一直有 ...
- 安装包UI美化之路-nsNiuniuSkin安装包制作配置说明
为方便客户对安装包制作过程中的配置进行更好地理解与应用,我们对nsNiuniuSkin的配置进行如下整理,从手工配置,到全自动集成,做全覆盖的说明与解释! 我们以leeqia_mountain模板为例 ...
- 安装包UI美化之路-nsNiuniuSkin安装包制作可视化配置向导
这篇文章应该说是上一篇<安装包UI美化之路-nsNiuniuSkin安装包制作配置说明>的延伸,在python命令行接口的基础上,支持可视化的配置界面与说明! 一直以来,nsNiuniuS ...
- 安装包UI美化之路-nsNiuniuSkin多语言配置
今天给大家带来的多语言配置功能,算是nsNiuniuSkin的一次质的提升,希望对大家有所帮助. nsNiuniuSkin通过自研多语言配置引擎,让安装包的多语言配置不再复杂,直接设置语言翻译配置文件 ...
- 安装包UI美化之路-nsNiuniuSkin安装包模板介绍-新模板上线啦
利洽安装包UI新模板上线啦! 今天,nsNiuniuSkin安装包解决方案迎来了6套全新的模板,简洁.清爽的设计,同时保持了良好的元素可替换.可扩展等特性! 接下来我们逐一介绍一下,由于gif录制的图 ...
- 安装包UI美化之路-nsNiuniuSkin界面在线设计引擎
一年多前,我们自己开发了一个用于编辑.预览.调试nsNiuniuSkin的UI界面工具,越来越觉得好用,忍不住想要分享出来! 今天我把这个工具重新整理了一下,功能又完善了一些:下面就介绍一下这个工具的 ...
- 安装包UI美化之路-nsNiuniuSkin安装包模板介绍
今天这篇文章,咱们不做功能讲解了,来介绍一下nsNiuniuSkin的几套安装包模板的UI效果和设计理念! 前言 经常有朋友会问,nsNiuniuSkin的几套模板都有些什么区别呀,我拿到模板后,如果 ...
- 安装包UI美化之路-在线安装包
在一些安装场景中,由于完整的安装包很大,下载时间长,且下载后需要人工干预来进行安装,这样会一定程度的降低用户使用体验:nsNiuniuSkin安装包制作解决方案提供了一种在线版本的安装包,支持将实际要 ...
- 安装包UI美化之路-打包过程中自动给安装包签名(防误报)
总是有朋友反馈说,打包出来的程序会被360报毒! 嗯... 这是一个问题,360误报不是一天两天了. 原因及理论 被误报,一般是两个原因: 没添加代码签名 没有提交360认证(就是这么...) 问题即 ...
最新文章
- 基于opencv的双线性插值的实现(一)
- “.中国”域名注册总量超26.6万:11月份净减193个
- Linux之sed命令
- linux centos 启动失败 开机卡在进度条的解决方法
- java arraylist 对象 删除_ArrayList实现删除重复元素(元素不是对象类型的情况)...
- Oracle 权限介绍及管理
- Linux学习之系统编程篇:利用 setitimer 实现 alarm练习
- python顺序控制语句_Python学习之 流程控制语句
- GIT项目管理工具(part8)--版本控制
- 日常问题 - 远程服务器运行Tomcat出现卡顿阻塞
- 悬赏百万美金,检测Deepfake假视频,数据集有470G:很久不见这么壕的比赛
- Js获取当前系统时间,24小时制
- js判断时间跨度,以月数为单位
- C++queue队列与stack栈
- 智能优化算法:原子轨道搜索算法-附代码
- 面试再问 HashMap,求你把这篇文章发给他!
- 从小工到专家【借鉴】
- 02组团队项目-Alpha冲刺-4/6
- 软件项目的项目经理不懂技术,能做好项目经理么?
- 根据身份证号匹配对应的城市编码
热门文章
- Linux vi文本编辑器大总结
- 学习Android从0开始之开发工具篇-Android studio详解
- 【Python养成】:案例(设计三维向量类、实现向量的加法、减法以及向量与标量的乘法和除法运算、编写自定义类,模拟内置集、编写自定义类,模拟双端队列。)
- 触摸IC的工作原理与生产过程
- 4.3 C语言的高级用法以及易错点
- What is COM, COM+? (什么是COM, COM+?)
- 网络服务与配置管理——————6、Windows下V*N设置
- matlab 稀疏随机矩阵,MATLAB中的稀疏数组
- 打破冯·诺依曼结构,中国的类脑计算芯片已实现量产
- C语言编程练习 3.写一个函数,如果它首次被调用,则返回字母A,第二次被调用,则返回字母B,第三次调用,则返回字母C,以此类推。(提示:使用一个static数据类型)