傲瑞组件开发手册(03) -- OAUS自动升级系统

2021.06.24  最新版本的OAUS 已经支持Windows、Linux、国产化操作系统以及国产CPU。

 

只要是以下载客户端的形式分发的程序,绝大多数都需要自动升级的功能。 

目前主流的程序自动升级策略是,下载最新的安装包,然后重新安装整个客户端。这种方式虽然简单直观,但是缺陷也很明显。 

 比如,即使整个客户端有100M,而本次更新仅仅只是修改了一个1k大小的dll,那也意味着要重新下载100M的全部内容。这对带宽 是极大的浪费,而且增加了用户茫然等待的时间。傲瑞自动升级系统OAUS可以完美地解决这个问题,在类似的场景中,使用OAUS 就可以只更新那个1k大小被修改了的dll。 

一.OAUS的主要功能

OAUS 是一套能够按需更新的智能升级系统,以单个文件而不是整个客户端为升级的基础单元。OAUS提供了高性能的可直接执行的 客户端程序和服务器程序,能以最简洁的方式与您的应用进行集成。

OAUS主要有如下特点:

(1)内核基于ESFramework构建,性能卓越。

(2)版本管理的基础单元为被分发的客户端程序中的每个文件。

(3)程序升级时,支持两种形式:文件添加、文件删除。

(4)升级启动时,只更新那些发生变化的文件。

(5)升级完成后,自动启动新版本的客户端应用程序。

(6)部署简单,方便集成。  

本文将着重介绍OAUS的相关背景、使用方法,至于详细的实现细节,大家可以直接下载源码研究。如果了解了OAUS的使用,源码的理解就非常容易了。如果需要直接部署使用自动升级系统,那么,可下载文末的可执行程序压缩包。  

二.OAUS的使用(Windows版本)

1.OAUS服务端结构

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

           

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

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

2.OAUS客户端结构

     OAUS客户端文件位于AutoUpdater文件夹中,OAUS规定AutoUpdater文件夹必须位于分发程序的根目录。

     比如,以部署好的VideoChatSystem系统客户端为例,如下所示的VideoChatSystem文件夹就是其客户端分发程序的根目录,所以,AutoUpdater文件夹就放在这个目录下。

     

     说明一下,VideoChatSystem文件夹下被分发的每个客户端文件(包括子目录下的文件)都可以实现自动更新,但是,AutoUpdater文件夹是不能更新它自己的。

      AutoUpdater文件夹下的文件如下所示:      

      

       可以在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便可以确定该文件在客户端机器上的绝对路径了。

3. OAUS自动升级流程 

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

(1)运行OAUS服务端。     

           

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

       

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

         点击服务端界面上的“文件版本管理”按钮,将弹出用于管理各个文件版本的【文件版本信息】窗体。       

   

   当用新版本的文件覆盖老的文件后,点击“自动扫描”按钮,服务端就会检索FileFolder文件夹下文件的名称、大小、最后更新时间,然后得出本次更新结果:变化了几个文件(变化文件的版本号都会自动增加1)、新增了几个文件、删除了几个文件。 

       当关闭【文件版本信息】窗体时,只要有某个文件版本变化,则“最后综合版本”的值(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服务端打开【文件版本信息】窗体,点击“自动扫描”按钮,扫描完成后,关闭该窗体即可。

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

      

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

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

(10)如果升级的过程中,与服务端连接中断,则会自动重连,在重连成功后,将启动断点续传。

    

       

4.OAUS实现更新的原理

(1)客户端启动时,从服务器获取“最后综合版本”的值,然后与本地的“最后综合版本”的值相比较,如果本地的值较小,则启动OAUS客户端。

(2)在实际执行更新时,是依据每个分发文件的版本号来决定该文件是否需要被更新的。比如对于A.dll这个分发文件,如果在OAUS服务端的版本号更高,则OAUS就会更新这个文件。同样,如果有新增文件或删除文件,OAUS客户端也会同步这些操作。

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

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

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

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

(2)系统客户端可以通过调用OAUS.Core.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);     
       ......//退出当前进程  
  } 

三.OAUS的使用(Linux版本)

1.OAUS Linux服务端结构

      与Windows版本不同,OAUS Linux版是通过命令来运行服务端程序和客户端程序:OAUS.Server.NerCore.dll 和 AutoUpdater.NetCore.dll。 

2.OAUS Linux客户端结构

     同Windows版本一样,OAUS客户端文件位于OrayTalk文件夹中,OAUS规定AutoUpdater.NetCore文件夹必须位于分发程序的根目录。    

     

 3.OAUS Linux升级流程   

      流程几乎同Windows版本完全一样。        

(1)运行OAUS服务端。     

           

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

(3) 当用新版本的文件覆盖老的文件后,在控制台输入Scan,服务端就会检索FileFolder文件夹下文件的名称、大小、最后更新时间,然后得出本次更新结果:变化了几个文件(变化文件的版本号都会自动增加1)、新增了几个文件、删除了几个文件。       

         

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

      

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

       同Windows版本一样,可做如下判断启动OAUS Linux客户端:

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

注意:只有运行的机器上装有NetCore环境,才能运行OAUS客户端,若要在其他架构如ARM64、Mips64el的机器上运行的话,需将对应架构的libSkiaSharp.so文件拷贝到AutoUpdater.NetCore文件夹中再运行客户端

四.相关下载

1.自动升级系统OAUS - 源码(Windows、Linux)

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

注:若需要在非x64 CPU架构的Linux或国产化操作系统上运行OAUS客户端,请联系我们获取对应架构的运行时 - runtimes。

 

-----------------------------------------------------------------------------------------------------------------------------------------------   

下载 更多傲瑞组件以及Demo源码 

阅读 更多傲瑞组件开发手册系列文章 

Q Q:168757008 

官网:http://www.oraycn.com/ 

导航

首页

官方网站

联系我们

立即咨询 

站内搜索

ESFramework 通信框架

价目表

详细说明

SDK与Demo下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

价目表

详细说明

SDK与Demo下载

OMCS FAQ

版本变更记录

OrayTalk 企业即时通讯系统

价目表

详细说明

客户端下载

OVCS 视频会议系统

详细说明

源码下载

傲瑞实用组件

价目表

SDK下载

NPusher 推流组件

NPuller   拉流组件

MCapture 语音视频采集组件

MFile 语音视频录制组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

StriveEngine 轻量级的通信引擎

傲瑞组件 FAQ

授权

授权流程

产品选购指南

授权方案说明

授权SDK使用说明

其它

支持国产OS、国产CPU、国产DB

SDK使用技巧

联系我们