基于HTTP协议的软件在线更新程序设计与实现
项目背景
交付的程序是C/S架构,运行在客户企业的局域网内。做需求分析的时候,客户确定在操业中心与控制中心的两个电脑上安装部署本软件,此时采用U盘拷贝的方式交付软件足以胜任。后期宣传工作做得好,系统被央视、地方媒体所报道,客户高层也重视,渐渐领导们电脑也需要安装此软件。
客户企业有较高地保密措施,例如领导的办公电脑无USB端口,显然U盘拷贝安装方式是不能交差的。解决思路:制作一个下载网页,并将软件压缩成压缩文件,用iis或nginx发布网页,下载网页中的< a >标签链接到压缩文件。引入下载网页后,客户只要连入局域网,就能够通过此方式获取到软件包。
由于用户生产工艺发生了调整,需要对代码进行频繁的变更,以适应业务需求,造成版本更新迭代快。每一次软件版本更新后,旧软件会告知客户软件已更新,请在10.107../download.html下载最新版,带来的问题是:客户需要隔三差五地手动下载并解压软件,然后才能使用,这些严重地影响到用户体验。所以甲方希望它支持在线更新,一旦版本更新了,由程序自动更新。
程序设计思路
尽量采用简单的方式满足用户需求,并要求对原有代码更改尽可能的少,所以设计了如下架构:
第一版:通过U盘拷贝更新软件。
第二版:客户端与服务器通信,当版本不是最新时,弹出下载链接。
第三版:客户端与服务器通信,当版本不是最新时,启动更新程序,并关闭本程序;更新程序按照配置文件,下载并替换或新建程序文件;下载完毕后,启动目标软件并关闭本进程。
本架构优点:更新程序与目标程序独立,开发人员只需在第二版的基础上,将弹出链接的方法替换为启动更新程序的方法,就可以实现软件在线更新功能。
生成配置文件
更新程序需要从服务器中读取配置文件config.txt、needFiles.txt。config.txt描述了软件的版本号、更新大小;needFiles.txt文件包含了包括.dll文件在内的所有待更新文件路径。更新程序根据总更新大小、当前网速及已下载文件大小,估算剩余更新时间,根据待更新文件路径更新相关文件。
程序实现
代码实现直接上百度网盘,这里不赘述。
链接:https://pan.baidu.com/s/1xKPHQ7gtgSUqIVnGCvH-fQ
提取码:ywu1
使用方法
不会用的,可以评论区留言。或者将来更新博客,讲述具体用法。