Updater Application Block自动更新实施方案[源代码]
概述
本方案采用Updater application block简称UAB,是Microsoft patterns & practices(模式&实践组)早期开发的一个自动更新的组件为基础,并且更具实际情况扩展了多项功能,来实现对客户端应用程序或Web应用程序实现自动在线更新的功能。
背景
随着业务的不断扩展,产品已经开始在全国各省开始部署,同时也给实施和客服部门带来了非常大的压力,随之而来的实施成本也在不断的增加。除了提高产品质量,我们需要解决一个紧迫的问题就是统一版本,降低实施难度,提高实施效率,提高客户满意度,提升产品的竞争力和公司的运营的竞争力,实现可持续性发展。
方案介绍
为了进一步支持ECI的业务扩展,应对目前实施所面临的问题,满足对全国各地各系统的版本及时更新的需求,通过建立一套在线自动更新系统,将部署在各个区域的系统能够实现在无人干预的前提下保持最新版本,自动升级,实现版本统一。
项目目标
通过在线自动更新系统,希望达到以下目标:
-
各系统实现版本统一(最新版本)
-
无需人工参与更新
-
可以更新数据库
-
实施人员减少一半
面临的难题
实现在线自动更新在技术上需要解决以下几个难点:
-
网络环境:如何穿透防火墙。
-
如何确认版本的一致性
功能介绍
支持Windows(c/s)应用程序的更新或是部分组件的更新
支持Windows服务的更新
支持Web应用程序的更新
支持通过Sql脚本对MS Sql,Oracle数据库更新
支持执行自定义命令脚本
实施框架
源代码服务器Release的版本打包后拷贝到在线更新服务器上,修改部分配置后,客户端将自动监测到有新版本发布,开始下载并且更新部署应用。
技术框架
整个更新过程如下:
1. 应用程序通过ApplicationUpdaterManager检测是否有更新
2. ApplicationUpdaterManager使用ManifestManager下载XML清单
3. DownloadManager使用BITSDownloader传输文件
4. ActivationManger使用ActivationProcessor激活文件版本
ManifestManager
ManifestManager用于读取服务器端的Xml更新配置清单
清单的配置通过ManifestEditor.exe编辑
支持多个配置清单的关联更新。
每次更新需要重新生成ManifestID,客户端通过匹配ManifestID判断是否需要更新
BITSDownloader
后台智能传输服务(BITS),BITS传输文件使用剩余带宽。例如,如果你目前使用60%的带宽,BITS将仅使用剩余的40%。当网络断开或计算机需要被重启时,BITS还可以维持文件传输:当网络重新连接成功后,BITS会从断开的地方继续开始传输。
注意:BITS 1.0被包含在Windows XP中,且仅支持下载。BITS 1.5被包含在Windows Server 2003中,且支持下载和上传。1.5版本在Windows Server 2003发行时可获得。上传要求安装了Internet信息服务(IIS)服务器及BITS服务器扩展
很好的解决网络贷款的问题,并且是通过IIS发布所以很好的解决了网络防火墙的问题
ActivationProcessor
在更新包更新文件下载到本地客户端后执行的操作。
功能列表
名称 |
功能 |
扩展 |
CmdScriptProcessor |
执行命令脚本或批处理 |
自定义 |
SqlScriptProcessor |
执行Sql脚本 |
自定义 |
UnZipProcessor |
解压Zip文件 |
自定义 |
FileCopyProcessor |
文件拷贝 |
|
FileDeleteProcessor |
文件删除 |
|
FolderCopyProcessor |
目录拷贝 |
|
FolderDeleteProcessor |
目录删除 |
|
GacUtilProcessor |
部署或是卸载GAC中的dll |
|
InstallUtilProcessor |
部署或是卸载windows服务 |
|
MsiProcessor |
部署或是卸载安装包 |
|
UncompressProcessor |
解压cab文件 |
|
ValidateHashProcessor |
验证hash值 |
|
WaitForApplicationExitProcessor |
启动等待退出后更新程序 |
案例1
发布Web更新包,并且包含简单的Sql脚本的执行。
步骤
-
部署服务器
新建一个虚拟目录比如为http://localhost/Updater,对应服务器路径为d:\UpdateServer\Release\,设定好访问权限;
-
从源代码服务器上获取最新版本的源代码,编译发布Web站点后,为了避免覆盖本地的配置文件(web.config)删掉,并且加入需要更新的Sql脚本.通过winzip/Winrar压缩打包
-
将打包好的更新文件拷贝到d:\UpdateServer\Release\目录下
-
开始配置,添加需要更新的文件
配置Activation Process,首先解压文件到目标路径下
执行SQL脚本
完毕
-
客户端代码,最简洁的写法
// Get the updater manager
ApplicationUpdaterManager updater = ApplicationUpdaterManager.GetUpdater();
// Check Version
manifests = updater.CheckForUpdates();
// update the application as per manifest details.
updater.Download(manifests, TimeSpan.MaxValue );
// Activate process.
updater.Activate( manifests );
总结
对于客户端开发是相对固定的几步骤,而如何控制客户端的处理则完全依赖于服务器端manifest的配置信息,而下载更新文件也是相对固定,无非是用BITS或是http,也可以是ftp几种方式,但对于后续下载到本地的更新包,要做的处理却很多,比如常用的,通过目录拷贝来备份源文件,对于复杂的更新可能还需要执行脚本,或是安装服务等操作,幸好UAB提供的很多,非常方便的扩展方法,对于自定义开发一些Activation Processor非常的方便。
实施计划