C#实现本身主动升级(附源代码)

时间:2021-12-12 06:08:17

? ? ? ?对于PC桌面应用程序而言,自己主动升级功能往往是不可缺少的。

而自己主动升级能够作为一个独立的C/S系统来开发,这样,就能够在不同的桌面应用中进行复用。本文将着重介绍OAUS的相关背景、用法,至于具体的实现细节,大家能够直接下载源代码研究。

假设了解了OAUS的使用。源代码的理解就非常easy了。

假设须要直接部署使用自己主动升级系统,那么,可下载文末的可执行程序压缩包。

一.OAUS的主要功能

  眼下主流的程序自己主动升级策略是,又一次下载最新的安装包,然后又一次安装整个client。

这种方式尽管简单直观,可是缺陷也非常明显。比方,即使整个client有100M。而本次更新仅仅仅仅是改动了一个1k大小的dll,那也意味着要又一次下载100M的所有内容。

这对带宽是极大的浪费,并且延长了升级了时间,相应地也添加了客户茫然等待的时间。

? ??? 在上述的场景中,自己主动升级时,我们是否能仅仅更新那个被改动了的1k的dll了?当然,使用OAUS自己主动升级系统能够轻松地做到这一点。OAUS自己主动升级系统能够对被分发的client程序中的每一个文件进行版本号管理,每次升级的基础单元不再是整个client程序,而是当中的单个文件。

针对单个文件的更新,包含三种形式:

(1)文件被改动。

(2)文件被删除。

(3)新添加某个文件。

????? OAUS对这三种形式的文件更新都是支持的。每次自己主动升级,都能够更改N个文件、删除M个文件、新添加L个文件。

二.OAUS的使用1.OAUS的结构

????? OAUS提供了可直接执行的服务端程序和client程序:AutoUpdaterSystem.Server.exe 和 AutoUpdater.exe。?OAUS服务端的目录结构例如以下所看到的:

?????

C#实现本身主动升级(附源代码)

??????

????? OAUS的client与server之间通过TCP通信,能够在AutoUpdaterSystem.Server.exe.config配置文件里配置server通过哪个TCPport提供自己主动升级服务。

????? FileFolder目录初始是空的。其用于部署被分发的程序的各个文件的最新版本号。

注意。其下的文件结构一定要与被分发的程序正常部署后的结构全然一致 -- 即相当于在FileFolder目录下部署一个被分发的程序。

??????OAUSclient的目录结构例如以下:??????

??????

C#实现本身主动升级(附源代码)

?????? 能够在AutoUpdater.exe.config配置文件里配置OAUSserver的IP、port等信息。其内容例如以下所看到的:

<configuration> <appSettings> <!--serverIP --> <add key="ServerIP" value="127.0.0.1"/> <!--serverport--> <add key="ServerPort" value="4530"/> <!--升级完毕后。将被回调的可执行程序的名称--> <add key="CallbackExeName" value="Demo.exe"/> <!--主窗口的Title--> <add key="Title" value="文件更新"/> </appSettings> </configuration>

? ??? 请注意配置的CallbackExeName,其表示当升级完毕之后。将被启动的分发程序的exe的名称。

这个CallbackExeName配置的为什么是名称而不是路径了?这是由于使用和部署OAUSclient时是有要求的:

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

(2)OAUS的client(即整个AutoUpdater目录)也必须位于这个根目录。

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

2. OAUS自己主动升级流程?

???????? 以下我们就具体讲讲怎样使用OAUS来构建自己主动升级系统,大概的过程例如以下。

(1)执行OAUS服务端。?????

? ? ??

C#实现本身主动升级(附源代码)

?????

(2)将被分发的client程序的所有内容放到OAUS服务端的FileFolder目录下。其结构与client程序正常部署后的结构要全然一致。我们以部署VideoChatSystem为例。?

??????

C#实现本身主动升级(附源代码)

?