安装包UI美化之路-在线安装包

news/2024/10/25 12:27:37/

在一些安装场景中,由于完整的安装包很大,下载时间长,且下载后需要人工干预来进行安装,这样会一定程度的降低用户使用体验;nsNiuniuSkin安装包制作解决方案提供了一种在线版本的安装包,支持将实际要安装的内容放到服务器上,由安装包程序下载至本地并自动进行安装;制作出来的在线安装包,体积可以控制在1M以内,能够非常方便的进行分发推广。

实现原理

在nsNiuniuSkin安装包制作解决方案中,在线安装的脚本与完整安装的脚本是同一套,区别在于打包编译时指定了宏:INSTALL_DOWNLOAD_7Z(通过bat脚本动态的传入,无需修改脚本);当这个宏被定义时,安装过程中将会插入下载的过程,下载过程中,我们将显示安装文件总大小,文件下载速度,下载完成百分比等信息,通过进度条来体现下载进度;同时在下载安装后,对下载的文件进行解压,并提供安装进度,无缝的衔接好下载与安装的两个流程。

值得一提的是,我们所下载的程序是一个7z文件(它是由所有待安装文件列表(即:FilesToInstall目录下所有文件)经过7z压缩而得到),在安装程序下载至本地后,通过nsis7zU插件解压来进行安装。

!ifdef INSTALL_DOWNLOAD_7Z#在线安装包nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "0"nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_pos" "text" ""	nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_tip" "text" "[msg.downloading]"#开始下载在线数据包GetFunctionAddress $0 DownloadFileBgWorker::CallAndWaitPop $R4	#取回下载的结果,判断是否下载成功且校验通过  ${If} "$R4" != "0"		Pop $R5StrCpy $R5 "[msg.downloadfailed]: $R5"nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_tip" "text" "$R5"nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_tip" "textcolor" "#fff43a3a"nsNiuniuSkin::SetControlAttribute $hInstallDlg "btnClose" "enabled" "true"StrCpy $InstallState "2"goto InstallAbort${EndIf}
!endif#重置进度条,开始进行安装nsNiuniuSkin::SetControlAttribute $hInstallDlg "slrProgress" "value" "0"nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_pos" "text" ""	nsNiuniuSkin::SetControlAttribute $hInstallDlg "progress_tip" "text" "[msg.installing]"#启动一个低优先级的后台线程GetFunctionAddress $0 ExtractFuncBgWorker::CallAndWait

前提条件

所谓在线安装,就是要从服务器上下载实际的数据包来进行安装,那么这里必需要有一个服务器,支持http或https下载即可。

由于在线安装文件的下载可能因为种种原因出现错误,所以我们会在下载完成后,对文件的md5以及大小进行校验,以避免文件下载缺失或错误,所以在真正下载7z文件前,我们需要先下载一个配置文件,用于标识软件包的名称、大小以及md5值(后续具体配置体现,也可以不校验)。

在下载过程中,我们分成了如下几步:

  • 下载config.ini
  • 根据config.ini中指定的文件名称进行文件下载,并实时的显示进度
  • 下载到文件后,取文件大小以及md5值,与配置文件中的值进行校验,如果不正确,则报错;如果正确,再进一步对文件进行解压安装

假设此处的服务器上用于存放config.ini和app.7z的url路径为:http://www.ggniu.cn/test_online_install/ 那么我们接下来要将生成的文件上传到 http://www.ggniu.cn/test_online_install/ 对应的服务器目录下。

实际应用

为了使在线安装包的体积尽可能小,我们并没有将卸载程序直接打包到安装包中,而是将其打包进数据文件app.7z中;有了服务器环境,接下来我们开始实际打包,在线安装包的打包过程中,我们会做以下几件事:

  • 自动生成uninst.exe文件,复制到FilesToInstall目录下
  • 将FilesToInstall下的文件(包含uninst.exe)打包成app.7z,存放至Output目录下
  • 根据app.7z,生成config.ini,其中包含app.7z的大小以及md5值
  • 生成不包含uninst.exe以及其他任何待安装文件的在线安装包并签名

打包前的配置准备

在实际打包前,我们需要将前面描述过的服务器url路径配置好,在nsi文件中,有相应的宏来控制在线安装包数据文件的下载路径:

# ====================== 自定义宏 在线安装包控制项=======================
!define INSTALL_DOWNLOAD_BASEURL	"http://www.ggniu.cn/test_online_install/"
!define INSTALL_DOWNLOAD_CONFIG		"config.ini"

免校验配置 如果在下载过程中,不需要校验安装包的大小和md5值,那么配置如下:

# ====================== 自定义宏 在线安装包控制项=======================
!define INSTALL_DOWNLOAD_BASEURL	"http://www.ggniu.cn/test_online_install/"
!define INSTALL_DOWNLOAD_CONFIG		"config.ini"
!define INSTALL_DOWNLOAD_IGNOREMD5	0				    #如果此开头打开,则不读取配置,不校验MD5,直接下载
!define INSTALL_DOWNLOAD_SERVERFILENAME	"app1.7z"	#此数据为服务器上的文件名,将追加到BASEURL后下载 
!define INSTALL_DOWNLOAD_INITSIZE	80102400			   #不校验的情况下的服务器文件大概大小,用于显示进度

配置好后,就可以直接相应的bat脚本(文件名中带online字样的bat脚本),编译生成在线安装包以及在线安装的数据文件包了,只要将数据文件包和配置文件(app.7zconfig.ini)上传到服务器指定目录下,整个流程就完成了,接下来可以使用在线安装包来安装了。

注:

在线安装包与数据包并不要求一对一匹配,即两次打包的在线安装包和数据包,均可相互应用;后续要升级在线安装包时,如果界面与下载逻辑不变,那么只需要更新数据包即可!

安装效果

可以看到,打好的在线安装包的体积大概是860KB:

以下是在线安装的完整效果:

更多灵活扩展

目前我们的下载与安装是共用的同一个进度条,即下载进度从1-100%;下载完成后,进度条清零,然后安装进度又从1-100%进行呈现。

如果您希望下载只占用前50%,安装占用后50%的话,只需要在进度回调显示那里进行少量改动即可。

结语

在安装包安装过程中,精美的UI往往能让客户对所安装产品的印象更加深刻,更能体现出软件服务商在用户体验上的专注与用心! 希望我们的努力,能够让安装包制作再容易一点,再快乐一点!

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


http://www.ppmy.cn/news/319189.html

相关文章

zip文件解压并增加到桌面

zip文件解压 /*** 解压zip** param zipFile* param descDir* throws Exception*/RequestMapping("/ff")ResponseBodypublic AjaxResult unZipFiles(MultipartFile fil, String descDir) throws Exception {System.out.println("******************解压开始***…

UnityWWW下载压缩包并解压到桌面文件夹中

https://download.csdn.net/download/qq_30928175/10877644工程下载 using ICSharpCode.SharpZipLib.Zip; using Microsoft.Win32; using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.UI;pu…

【解压zip.00**压缩包】

【解压zip.00**压缩包】 1 解压 .zip.001 .zip.002 .zip.0031.1 方法一【网上的方法,亲测未成功】1.2 方法二【win11系统下,亲测成功】 2 解压 ***.part1.rar3 解压****.tar.gz.0 ****.tar.gz.1 ****.tar.gz.3 … 1 解压 .zip.001 .zip.002 …

7z制作自解压安装包(转载)

像7z和winRAR这样的压缩工具都支持制作自解压的文件。所谓自解压的文件就是不需要目标机器上安装解压工具,通过运行压缩包自己即可解压出压缩包中的文件。下面我们就介绍一下如何利用7z的自解压功能制作应用程序安装包。 熟悉应用程序安装的朋友应该清楚&#xff0…

第一章 OAuth2.0规范(史上最详细解释)——介绍

目录 一、简介 二、角色 二、协议流程 三、授权许可 1、授权码 2、隐式许可 3、资源所有者密码凭据 4、客户端凭据 四、访问令牌 五、刷新令牌 六、TLS版本 七、HTTP重定向 八、互操作性 九、符号约定 一、简介 在传统的客户端-服务器身份验证模式中,客…

什么是响应式设计

也叫响应式布局,响应式开发 实现不同屏幕分辨率的终端上浏览网页的不同展示方式。 响应式布局是根据设备屏幕宽度不同适当调整标签显示的布局,从而在每种设备屏幕宽度下呈现的界面是不同的 响应式布局 原理: 一个网站适配所有终端&#x…

【Redis总结-基础入门】

第一章 Redis基础 Redis总结-基础入门 第一章 Redis基础学习目标:1. Redis 简介1.1 NoSQL概念1.1.1 问题现象1.1.2 NoSQL的概念 1.2 Redis概念1.2.1 redis概念1.2.2 redis的应用场景 1.3 Redis 的下载与安装1.3.1 Redis 的下载与安装 1.4 Redis服务器启动1.4.1 Redi…

电脑常用快捷键大全(含Visual Studio快捷键操作)

目录 一、系统快捷键 二、常用系统命令 三、QQ快捷键 四、IE浏览器快捷键使用大全 五、Word 中的快捷键 六、Excel 中的快捷键 七、PowerPoint 中的快捷键 八、Visual Studio 九、Eclipse 十、Photoshop 十一、批处理指令 十二、安装操作系统 (此快捷操作对我们程…