安装包UI美化之路-升级安装与静默安装一键打包

news2024/12/28 20:02:43

在实际应用中,除了产品安装外,还需要能够持续升级到新的版本,这时候升级方案就显得比较重要;而还有一些使用场景,需要咱们的安装包在安装时,不要显示安装界面,直接在后台进行安装!

这些业务功能,都是非常实用且必要的,我们当然不会漏掉!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\  
	#test
	
	StrCpy $sCmdAutoInstall "0"
	${Getparameters} $R0
	#解析参数数据	
	${GetOptions} $R0 "-AutoInstall=" $sCmdAutoInstall
	${GetOptions} $R0 "-AutoOpen=" $sCmdOpenWhenFinished
	
FunctionEnd

接下来我们实际看看如何应用:

软件升级

软件产品一般的升级逻辑如下:

  1. 在软件主程序启动或运行过程中,能够检查是否有新版本 一般是拿软件本地版本,调用服务器端的版本检查接口,以确定是否有新版本要升级,以及新版本安装包(即升级包)的下载地址

  2. 在软件主程序中,下载新版本的安装包到本地

  3. 在软件主程序中,调用刚下载下来的新版本安装包,传递指定的命令行参数(传递当前主程序所在目录,以便覆盖原来的程序文件),进行升级

  4. 新版本安装包安装完成后,自动拉起新的软件主程序,升级完成

    比如在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往往能让客户对所安装产品的印象更加深刻,更能体现出软件服务商在用户体验上的专注与用心! 希望我们的努力,能够让安装包制作再容易一点,再快乐一点!

愿天下没有难做的安装包!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试开发之前端篇-Web前端简介

自从九十年代初,人类创造出网页和浏览器后,Web取得了长足的发展,如今越来越多的企业级应用也选择使用Web技术来构建。 前面给大家介绍网络协议时讲到,您在阅读这篇文章时,浏览器是通过HTTP/HTTPS协议向服务器发送请求…

Python+Django的高考志愿填报辅助系统 计算机毕业设计

在各学校的教学过程中,学生的高考志愿填报辅助是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的教室学习模式,“基于网络的教学平台”的研究和设计也成为教育技术领域的热点课…

音频转文字怎么转?三个方法教你音频转文字

昨天,朋友给我发了一条信息,大概的内容是“今天上班的时候,领导突然发了一段音频,说是会议的录音,让我朋友在下班之前整理成会议纪要发给他。无奈,我的朋友只能打开录音开始整理”。听到他还在听录音手动整…

Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW

今天的主题是Stata中的治疗效果。最近我们被客户要求撰写关于治疗效果的研究报告,包括一些图形和统计输出。 治疗效果估算器根据观察数据估算治疗对结果的因果关系。 我们将讨论四种治疗效果估计量: RA:回归调整IPW:逆概率加权I…

【卡尔曼滤波器】递归算法

大家好,我是小政。最近在学习卡尔曼滤波,本篇文章记录一下我学习的卡尔曼滤波器中的递归算法,通过举例子让大家更加清晰理解递归到底是什么?希望与同是卡尔曼滤波研究方向的同学进行一些交流。 递归算法1.为什么要用卡尔曼滤波器&…

zookeeper3.6.3升级jetty9.4.47解决安全漏洞CVE-2022-2048和CVE-2021-28169

客户扫描到zookeeper有CVE-2022-2048和CVE-2021-28169安全漏洞要求修复。 漏洞和官方解决办法如下: 一、# CVE-2022-2048 Jetty升级到这几个修复版本9.4.47. 10.0.10, 11.0.10 Eclipse Jetty 存在安全漏洞,该漏洞源于无效的 HTTP/2 请求可能占用连接导致…

视频配音怎么制作?手把手教你配音视频制作

相信很多短视频的创作者都知道,每个视频的好坏大多数取决于配音的效果,好的配音才能给观众留下一个深刻的印象,如果你想要制作一个好的视频,那肯定是离不开配音制作的。那你们知道视频配音怎么制作吗?不知道也没关系&a…

java计算机毕业设计ssm在线实验室器材设备借用管理系统42c93(附源码、数据库)

java计算机毕业设计ssm在线实验室器材设备借用管理系统42c93(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都…

“为什么同样是跳槽,有些人薪资就能翻2倍?“是我在软件测试路上走错了方向?

“为什么同样是跳槽,有些人薪资能翻两三倍?” 最近遇到一个朋友跟我吐槽如上,其实类似这样的问题我也听到过很多次,身边也不乏有认识的同事、朋友们通过跳槽拿下高薪,这里我先说一个我身边真实的例子: 学…

Java基于springboot高考填报志愿综合参考系统 vue+elementUI

高考填报志愿综合参考系统是针对目前高考填报志愿管理的实际需求,从实际工作出发,对过去的高考填报志愿综合参考系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利&…

(十一)数据归一化方法BN/LN/GN/IN

文章目录0. Introduction1.Batch Normalization3.Layer Normalization4.Group Normalization6.Instance Normalization参考资料欢迎访问个人网络日志🌹🌹知行空间🌹🌹 0. Introduction 在神经网络的训练过程中,网络的…

机器学习分类算法之逻辑回归

1、基础知识: 逻辑回归:logistic regression二分类:binary classification 类别一类别二noysefalsetrue01negative classpositive class 线性回归模型用于分类,效果一般;逻辑回归是最广泛使用的分类算法;…

main入口函数分析

在开始讲解之前,分享一些阅读 项目代码的经验。无论学习哪方面的知识,都是需要正反馈才能继续学下去。在学习开源项目的时候,如果不掌握一些比较好的方法,会比较难拿到正反馈,或者要坚持学习很久才能拿到正反馈。 我个…

JAVA毕业设计——基于Springboot的动漫论坛系统(源代码+数据库+ppt文档)

github代码地址 https://github.com/ynwynw/cartoonForum-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject #动漫论坛系统 #java web #java #毕业设计 #课程设计 #JPa #Springboot #mysql #源代码 基于Springboot的动漫论坛系统(源代码数据库ppt文档)040 …

Python文件操作注意事项

今天继续给大家介绍Python相关知识,本文主要内容是Python文件操作注意事项。 一、文件操作流程注意事项 在文章Python文件操作详解(一)中,我们讲解过,文件操作的流程是打开文件——操作文件——关闭文件。如果我们在…

设计用于汽车和车身SPC58NH92C3RMI0X\SPC560B50L1B4E0X微控制器

SPC560B50x系列 32 位微控制器是集成汽车应用控制器的最新成就。它属于一个不断扩大的以汽车为中心的产品家族,旨在解决下一波汽车内部的车身电子应用。该汽车控制器系列的先进且经济高效的主机处理器核心符合 Power Architecture 嵌入式类别,仅实现 VLE…

Qt扫盲-QRadioButton理论总结

QRadioButton理论总结1. 简介2. 自动排外3. 信号槽4. 外观&快捷键1. 简介 QRadioButton是一个选项按钮,可以打开(选中)或关闭(未选中)。单选按钮通常为用户提供”众多”选项之一。在一组单选按钮中,一…

黑客隔空盗密码,你的账户安全吗?

一、NFC卡防互动,怎样才能更安全? 想知道黑客如何破解你的设备,盗取你的信息吗?这一黑科技设备将向你展示黑客是如何隔空盗取你银行卡的账号密码的。 模拟黑客使用一张RFID读卡器,近距离靠近你的银行卡时,…

java毕设_第172期ssm高校毕业生就业满意度调查统计系统_计算机毕业设计

java毕设_第172期ssm高校毕业生就业满意度调查统计系统_计算机毕业设计 【源码请到下载专栏下载】 今天分享的项目是《ssm高校毕业生就业满意度调查统计系统》 该项目分为2个角色,管理员和用户。 用户可以浏览前台,包含功能有:进行问卷提交、 就业咨询、试题列表进行…

Mentor-dft 学习笔记 day40-Saving Timing Patterns(1)

Timeplate Examples 例如,移位周期40ns,占空比为50%,timeplate所示: timeplate tp_shift force_pi 0; measure_po 5; pulse_clock 10 20; period 40; end;拉伸的timeplate可用于将时钟脉冲延迟40ns,同时保持相同的20…