自动升级系统的设计与实现(源码)

超越梦想 超越梦想     2022-09-12     676

关键词:

 (最新OAUS版本请参见:自动升级系统OAUS的设计与实现(续)

  对于PC桌面应用程序而言,自动升级功能往往是必不可少的。而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中进行复用。基于ESFramework的文件传送功能,我实现了一个可直接复用的自动升级系统OAUS,现在将其分享给大家。这篇文章将着重介绍OAUS的相关背景、使用方法,至于详细的实现细节,大家可以直接下载源码研究。如果了解了OAUS的使用,源码的理解就非常容易了。如果需要直接部署使用自动升级系统,那么,可下载文末的可执行程序压缩包。

一.OAUS的主要功能

  目前主流的程序自动升级策略是,重新下载最新的安装包,然后重新安装整个客户端。这种方式虽然简单直观,但是缺陷也很明显。比如,即使整个客户端有100M,而本次更新仅仅只是修改了一个1k大小的dll,那也意味着要重新下载100M的全部内容。这对带宽是极大的浪费,而且延长了升级了时间,相应地也增加了客户茫然等待的时间。

      在上述的场景中,自动升级时,我们能否只更新那个被修改了的1k的dll了?当然,使用OAUS自动升级系统可以轻松地做到这一点。OAUS自动升级系统可以对被分发的客户端程序中的每个文件进行版本管理,每次升级的基础单元不再是整个客户端程序,而是其中的单个文件。针对单个文件的更新,包括三种形式:

(1)文件被修改。

(2)文件被删除。

(3)新增加某个文件。

      OAUS对这三种形式的文件更新都是支持的。每次自动升级,都可以更改N个文件、删除M个文件、新增加L个文件。

二.OAUS的使用

1.OAUS的结构

      OAUS提供了可直接执行的服务端程序和客户端程序:AutoUpdaterSystem.Server.exe 和 AutoUpdater.exe。 OAUS服务端的目录结构如下所示:

           

      OAUS的客户端与服务器之间通过TCP通信,可以在AutoUpdaterSystem.Server.exe.config配置文件中配置服务器通过哪个TCP端口提供自动升级服务。

      FileFolder文件夹初始是空的,其用于部署被分发的程序的各个文件的最新版本。注意,其下的文件结构一定要与被分发的程序正常部署后的结构完全一致 -- 即相当于在FileFolder文件夹下部署一个被分发的程序。

      OAUS客户端的目录结构如下:      

      

       可以在AutoUpdater.exe.config配置文件中配置OAUS服务器的IP、端口等信息,其内容如下所示:

复制代码
<configuration>
  <appSettings>
    <!--服务器IP -->
    <add key="ServerIP" value="127.0.0.1"/>
    <!--服务器端口-->
    <add key="ServerPort" value="4530"/>
    <!--升级完成后,将被回调的可执行程序的名称-->
    <add key="CallbackExeName" value="Demo.exe"/>
    <!--主窗体的Title-->
    <add key="Title" value="文件更新"/>
  </appSettings>
</configuration>
复制代码

    请注意配置的CallbackExeName,其表示当升级完成之后,将被启动的分发程序的exe的名称。这个CallbackExeName配置的为什么是名称而不是路径了?这是因为使用和部署OAUS客户端时是有要求的:

(1)被分发的程序的可执行文件exe必须位于部署目录的根目录。

(2)OAUS的客户端(即整个AutoUpdater文件夹)也必须位于这个根目录。

      如此,AutoUpdater就知道分发程序的exe相对自己的路径,如此就可以确定分发程序的exe的绝对路径,所以就可以在升级完成后启动目标exe了。另外,根据上述的两个约定,再结合前面讲到的服务端的FileFolder文件夹的结构约定,当服务端更新一个文件时,AutoUpdater便可以确定该文件在客户端机器上的绝对路径了。

2.OAUS自动升级流程 

      下面我们就详细讲讲如何使用OAUS来构建自动升级系统,大概的步骤如下。

(1)运行OAUS服务端。     

      

      服务端主界面将显示所有正在自动升级的OAUS客户端信息。

(2)将被分发的客户端程序的所有内容放到OAUS服务端的FileFolder文件夹下,其结构与客户端程序正常部署后的结构要完全一致。我们以部署VideoChatSystem为例。 

       

(3)使用OAUS服务端为被分发的客户端程序的每个文件生成默认版本号,并创建版本信息配置文件UpdateConfiguration.xml。这个配置文件也将被客户端使用。

      点击服务端【工具】菜单栏下的【版本管理】子菜单,将弹出用于管理各个文件版本的【文件版本信息】窗体。         

      

      双击列表中的任意一行,可以修改其对应文件的版本的值(float类型的数值)。注意,此列表中的版本信息与文件的真实版本属性(比如dll的版本属性X.X.X.X)可以是没有任何联系的,列表中版本的值只是用于标记文件是否被修改,所以,文件每被修改一次,其列表中对应的版本的值就应该有所增大。

      当关闭【文件版本信息】窗体时,只要有某个文件版本变化,则“最后综合版本”的值(int类型)会递增1。通过比较OAUS的客户端保存的“最后综合版本”的值与OAUS的服务端最新的“最后综合版本”的值,就可以快速地识别客户端是否已经是最新版本了。

      另外,初次打开这个窗口时,将在OAUS服务端的目录下,自动生成一个版本信息配置文件UpdateConfiguration.xml。而且,每当通过该窗体来设置某个文件的新版本时,UpdateConfiguration.xml会自动同步更新。

(4)将UpdateConfiguration.xml添加到OAUS的客户端程序(即上述的AutoUpdater的文件夹)中。

(5)在创建被分发的客户端的安装程序时,将OAUS的客户端(即AutoUpdater的文件夹)也打包进去,并且像前面说的一样,要将其直接部署在运行目录(BaseDirectory)下(与分发的exe同一目录)。

      如此,准备工作就完成了,当客户端通过安装包安装好了VideoChatSystem之后,其目录结构像下面这样: 

       

(6)当我们有新的版本要发布时,比如要更新某个文件(因为文件被修改),那么可以这样做:

  a.将修改后的文件拷贝到OAUS服务端的FileFolder文件夹下的正确位置(或覆盖旧的文件)。

  b.在OAUS服务端打开【文件版本信息】窗体,双击被修改文件所对应的Row,在弹出的窗体上修改对应文件的版本号,将版本号的数值增加。(如果是删除旧文件或添加新文件,此处也可进行相应的操作)

(7)如此,当客户端再启动AutoUpdater.exe时,就会自动升级,更新那些发生变化的文件。 以下是AutoUpdater.exe运行起来后的截图。

      

(8)当升级完成后,将启动前述的OAUS客户端配置文件中配置的回调exe。(在本例中就是VideoChatSystem.exe)

(9)OAUS客户端会在日志文件UpdateLog.txt(位于AutoUpdater的文件夹下,在OAUS客户端首次运行时自动生成该文件)中,记录每次自动升级的情况。

3.何时启动自动升级客户端?

      假设某个系统是下载客户端形式的,那么客户端该如何知道是否有新版本了?然后又该何时启动AutoUpdater.exe了?

      我们的经验是这样的:客户端登录成功之后,从服务器获取“最后综合版本”的值,然后与本地的“最后综合版本”的值相比较,如果本地的值较小,则表示客户端需要更新。这个过程可以这样做到:

(1)当在OAUS服务端的FileFolder文件夹下放置了新的文件,并通过【文件版本信息】窗体正确的更新了版本号,在关闭【文件版本信息】窗体时,“最后综合版本”的值会自动加1。

(2)系统客户端可以通过调用AutoUpdater.VersionHelper类的静态方法HasNewVersion()来判断是否有新版本。

(3)如果HasNewVersion方法返回true,则通常有两种模式:由用户选择是否升级,或者是强制升级。

      一般而言,如果最新客户端程序与老版本兼容,不升级也影响不大,则可以交由用户决定是否升级;如果最新客户端程序不兼容老版本,或者是有重大更新,则将启动强制升级。如果流程要进入启动升级,那么只要启动AutoUpdater的文件夹下AutoUpdater.exe就可以了。要注意的是,启动AutoUpdater.exe进程后,要退出当前的客户端进程,否则,有些文件会因为无法被覆盖而导致更新失败。代码大致如下所示: 

if (VersionHelper.HasNewVersion(oausServerIP,oausServerPort)) 
  {      
       string updateExePath = AppDomain.CurrentDomain.BaseDirectory + "AutoUpdater\\AutoUpdater.exe";   
       System.Diagnostics.Process myProcess = System.Diagnostics.Process.Start(updateExePath);     
       ......//退出当前进程  
  } 

三.相关下载

1.自动升级系统OAUS - 源码

2.自动升级系统OAUS(可直接部署)

  如果有任何建议或问题,请留言给我。

基于javajspaspphpvb安卓系统毕业设计与实现论文源码下载?

...车管理系统(任务书,论文,源码)vb.net实验室计算机的ip地址自动设置程序——服务器端(任务书,论文,源码)rsa可视化算法程序的实现与研究(任务书,论文)j2ee数控加工技术教学素材资源库的构建(任务书,论文,源码)eims系统-oa子系统的... 查看详情

基于springboot的航空公司货运管理系统的设计与实现.rar(论文+源码)

...22可行性分析22.1技术可行性32.2操作可行性33需求分析33.1系统功能用例分析33.2系统活动分析53.3系统时序分析74总体设计84.1系统功能结构设计84.2系统流程设计94.3系统架构设计114.4数据库系统设计125详细设计与实现185.1登录界面的实... 查看详情

基于springboot的社区管理系统的设计与实现源码

SpringBoot+Vue+ElementUI+mybaitsPlus1.普通居民1.1权限管理2.社区管理人员2.1居民管理2.2问题管理2.3服务管理 查看详情

基于springboot的社区管理系统的设计与实现源码

SpringBoot+Vue+ElementUI+mybaitsPlus1.普通居民1.1权限管理2.社区管理人员2.1居民管理2.2问题管理2.3服务管理 查看详情

自己主动升级系统的设计与实现(续2)--添加断点续传功能(附最新源代码)

一.缘起      之前已经写了两篇关于自己主动升级系统OAUS的设计与实现的文章(第一篇、第二篇)。在为OAUS服务端添加自己主动检測文件变更的功能(这样每次部署版本号升级时,能够节省非常多时间。并且能够避免手... 查看详情

基于python+django学生信息管理系统设计与实现(含程序源码和毕业设计)(代码片段)

...网技术的加快发展,计算机电脑硬件也在不断的迭代升级,而每年大学生不断的扩招,学院的增加,对于信息平台的管理需求也越来越多。选用B/S架构模式,可以更好的服务于学生信息化的管理,这是因为... 查看详情

springboot停车场收费系统的设计与实现.rar(论文+项目源码)

...库43需求分析53.1需求描述53.2需求功能描述53.3用例模型53.4系统性能需求分析74系统设计74.1系统设计思想74.2系统设计主要功能74.3数据库设计85系统实现125.1系统登录125.2用户个 查看详情

基于.net平台的成绩管理系统设计与实现(源码+论文).rar

目录【摘要】1第一章绪论1.1问题的提出21.2现有系统存在问题的分析21.3系统开发目标与意义21.3.1系统开发目标21.3.2意义31.4可行性分析31.4.1经济上可行性31.4.2技术上可行性31.4.3运行上可行性3第二章需求分析2.1教育系统学生管理现... 查看详情

javaweb网上购物系统设计与实现(开题报告+任务书+外文翻译+论文+源码).rar

...…………………………………………………Ⅱ1网上购物系统绪论41.1系统开发背景41.1.1网上购物的发展41.1.2网上购物系统的现状41.2系统实现的目标51.3系统的开发意义52网上购物系统分析72.1网站的设计目标72.2网站的可行性分析72.3... 查看详情

基于ssm框架的疫情防控管理系统设计与实现.rar(论文+项目源码)

...言11.1研究背景11.2国内外的研究现状11.3课题的基本内容22系统分析与主要技术42.1JSP技术42.2MySQL数据库52.3需求分析52.4数据流程分析102.4.1登录处理流程102.4.2增添数据流程102.4.3修改数据流程112.4.4数据删除流程122.5可行性研究132.5.1经... 查看详情

java-技术-java类中热替换的概念设计与实现

类的热替换是Java在线升级系统设计中的基础技术,从文中给出的实例来看,构建在线升级系统不仅仅是一个技术问题,还牵扯到很多管理方面的因素,比如:如何管理、部署系统中的可在线升级部分和不可在... 查看详情

springboot项目在线图书销售系统的设计与实现.rar(项目源码)

http://127.0.0.1:8080/bookmallhttp://127.0.0.1:8080/bookmall/admin/login.jsp管理员账号:admin密码:admin销售管理员:test02密码:123456(可对商品进行上下架管理)springboot项目在线图书销售系统的设计与实现技术栈 查看详情

基于java的校园二手交易系统的设计与实现.rar(论文+项目源码)

第一章绪论11.1研究背景11.2系统的现状11.3系统实现的功能11.4校园二手交易平台的特点21.5本文的组织结构2第二章开发技术与环境配置32.1Java语言简介32.2MySQL环境配置32.3MyEclipse环境配置42.4mysql数据库介绍42.5B/S架构4第三章系统分析... 查看详情

ssm生鲜超市管理系统的设计与实现毕业设计源码261635

...的课题。针对生鲜超市管理等问题,对生鲜超市管理系统进行研究分析,然后开发设计出基于SSM的生鲜超市管理系统以解决问题。生鲜超市管理系统主要功能模块包括用 查看详情

基于springboot的在线外卖系统的设计与实现.rar(毕业论文+程序源码)

第一章系统背景与意义81.1国内外现状81.2课题研究意义81.3课题主要研究内容8第二章关键技术介绍及开发环境92.1相关技术介绍92.2系统环境开发条件10第三章系统的分析103.1可行性分析103.1.1经济可行性103.1.2社会可行性113.1.3技术性11... 查看详情

基于rifd的自习室座位管理系统设计与实现.rar(论文+项目源码)

...技术43可行性分析及需求分析53.1可行性分析53.2需求分析64系统总体设计74.1开发设计思想74.2设计方案74.3网站结构分析84.4系统硬件选择94.5系统软硬件交互设计和工作原理115系统详细设计125.1系统功能划分125.2数据库设计135.2. 查看详情

javaweb基于ssm的行政审批信息系统的设计与实现.rar(论文+程序源码)

...外研究现状与发展趋势51.3课题研究内容62相关技术介绍及系统环境开发条件62.1相关技术介绍62.2系统开发环境83系统的需求分析与设计93.1可行性分析93.1.1技术性93.1.2经济性103.1.3操作性103.2需求分析103.2.1系统总体概述113.2.2功能性... 查看详情

视觉在自动泊车系统中的设计与实现和挑战综述

文章:ComputerVisioninAutomatedParkingSystems:Design,ImplementationandChallenges作者:MarkusHeimberger,JonathanHorgan,CiaranHughes,JohnMcDonald,SenthilYogamani编辑:点云PCL来源:arXiv202 查看详情