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脚本的执行。

步骤

  1. 部署服务器 新建一个虚拟目录比如为http://localhost/Updater,对应服务器路径为d:\UpdateServer\Release\,设定好访问权限;
  2. 从源代码服务器上获取最新版本的源代码,编译发布Web站点后,为了避免覆盖本地的配置文件(web.config)删掉,并且加入需要更新的Sql脚本.通过winzip/Winrar压缩打包
  3. 将打包好的更新文件拷贝到d:\UpdateServer\Release\目录下
  4. 开始配置,添加需要更新的文件

配置Activation Process,首先解压文件到目标路径下

    执行SQL脚本

完毕

  1. 客户端代码,最简洁的写法

// 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非常的方便。

施计划

Dwonload UAB

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MySQL

10款常见MySQL高可用方案选型解读

关于对高可用的分级我们暂不做详细的讨论,这里只讨论常用高可用方案的优缺点以及选型。

7619
来自专栏企鹅号快讯

g4e基础篇#3 Git安装与配置

现在你已经对Git有了最基本的了解,现在让我们开始动手开始安装和配置Git环境。 Git工具包括Git命令行工具,图形化工具和服务器环境;在我们这个教程中,我们...

23310
来自专栏杨建荣的学习笔记

关于几个MySQL环境问题的对比 (r7笔记第66天)

有时候出现了环境问题,对比是一种很好的方式,如果对比得当,可以避免反复的出现问题,可以根据对比的情况推理出一些可能出现的情况或者问题。 如果对比不当,很可能得出...

3616
来自专栏蓝天

自己动手提高ubuntu系统的性能(EXT3)

  在内核设置层面之上,还有很多个人用户配置的参数,ulimit命令就是bash下提供的,查看对指定应用的限制值的工具。你可以通过ulimit –a命令显示当前...

812
来自专栏FreeBuf

30秒攻破任意密码保护的PC:深入了解5美元黑客神器PoisonTap

近日,著名硬件黑客Samy Kamkar利用5美元设备打造的黑客工具PoisonTap,只需30秒,就可以攻破设置有任意密码的电脑系统,并实现长期后门安装。Po...

22510
来自专栏Crossin的编程教室

【Git 第3课】 安装Git

要用Git,首先肯定要安装它。简要说一下Win,Mac和Linux三种平台的安装方法。 Windows Git的官网(http://git-scm.com)提供...

3597
来自专栏杨建荣的学习笔记

使用Linux命令发送邮件(r2笔记94天)

在平时的工作中,可能很多环境都有自己的内网环境,如果发生一些问题的时候,可以通过内网环境发送邮件到指定的邮箱中。这种略显智能的方式可能在很多工作场景中使用,一般...

3735
来自专栏Laoqi's Linux运维专列

高性能可靠服务集群架构

2703
来自专栏BeJavaGod

nginx + fastDFS - 单机图片服务器解决方案

最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的 ? 今天再这里简单讲一下上传图片以及图片服务器的大致理念(正式...

5436
来自专栏月色的自留地

mac电脑进行可见光通信实验要点

2024

扫码关注云+社区