Microsoft Updater Application Block 设计篇

Updater Application Block为企业环境中解决桌面应用程序的更新问题提供了一个“无接触”解决方案。它包含一系列组件,每一个组件被设计用来实现更新过程中的一个特定的角色。

高级设计
图1展示了Updater Application Block的高级设计


图1中,展示了关于Updater Application Block的下面一些方面:[以下数字与图中数字相对应]
1.  在服务器端,manifest utility为每一个应用程序更新生成一个manifest文件。manifest文件列出了在更新中需要拷贝的所有文件,每一个文件都有一个哈希(hashed)签名,以及可选的一个后处理器(post processor),在更新文件下载和验证后,在客户端上可以执行后处理器。
2. 控制器应用程序用于启动和停止应用程序升级程序。应用程序配置文件与控制其相关联的,用来设置升级过程中的三个基本配置。
    a. 要升级的应用程序,包括客户端配置文件的位置和服务器端用来判定客户端和服务器端最新版本的manifest文件的位置。
    b. 下载器(downloader)组件在拷贝文件时被使用。下载器必须实现IDownloader接口。Updater Application Block包含一个使用后台智能传输服务的下载器。另外你可以开发定制的下载器。
    c. 验证器(validator)组件应该用于验证被下载的文件。验证器组件必须实现IValidator接口,Updater Application Block包含两个验证器,一个是基于对称密钥的验证器,另一个是基于RSA公钥/私钥的验证器。另外,你可以开发自己定制的验证器。
3. 应用程序升级程序会隔一段时间启动一次升级进程。当升级进程启动后,升级程序适用特定的下载器拷贝每一个应用程序的manifest文件,这些应用程序可以在客户端配置文件中设置。如果更新可用,下载器会拷贝文件到客户端的一个临时目录。
4. 升级程序装载一个特定的验证器来验证下载下来的文件,如果文件有效,它们将被拷贝到适当的应用程序文件夹,同时配置文件也会被更新最新版本。
5. 如果后处理器(post processor)在manifest文件中被指定,升级程序将装载并运行指定的后处理器。

Microsoft Updater Application Block 核心设计(core design) 
    Updater Application Block由一个核心应用程序升级器(集合[assembly]名称为ApplicationUpdater)和许多额外的assembly接口和工具组成。

Updater Application Block集合
Updater Application Block由以下assemblies组成:
1. Microsoft.ApplicationBlocks.ApplicationUpdater
    这是提供应用程序升级的核心集合。更多信息可以见ApplicationUpdater Assembly Design
2. Microsoft.ApplicationBlocks.ApplicationUpdater.Interfaces
    这个集合包含一些开发人员必须实现的接口定义,用来实现Updater Application Block的定制的应用程序解决方案。更多关于接口设计的信息,可以参考IDownloader Interface Design, IValidator Interface Design和IPostProcessor Interface Design
3. AppStart
    这个集合包含一个应用程序启动器,可以用于启动被更新了的应用程序。可配置的程序启动器使得在应用程序运行时完成应用程序的更新成为可能。更多的信息可以参考Application Launcher Design
4. ManifestUtility
    这个集合包含一个基于Windows窗口应用程序的manifest工具,管理员可以使用它为一个应用程序的更新生成必需的manifest文件。更多的信息可以参考Manifest Utility Design
5. Microsoft.ApplicationBlocks.ExceptionManagement
   
ExceptionManagement集合是Exception Management Application Block的一部分,在Updater Application Block中用于处理异常发布。更多信息请参考msdn上的Exception Management Application Block for .NET
6. Microsoft.ApplicationBlocks.ExceptionManagement.Interfaces 
    这个集合也是Exception Management Application Block的一部分,包含开发人员必须实现的接口,这些接口可以用来扩展Exception Management。
  

Microsoft Updater Application Block  下载器设计

Updater Application Block使用一个可扩展的下载器架构从指定的服务器上拷贝manifest文件和应用程序升级文件到客户端。
图1 展示了下载器架构

图1 包括下列过程
1. ApplicationUpdateManager类使用UpdaterConfiguration类的实例属性读取应用程序下载器配置文件中的<downloader>节。这个配置节包含要使用的下载器的完整集合[assembly]名称和类型[type]名称。更多关于应用程序设计的信息可以参考Application Updater配置设计。
2. DownloaderFactory类用来实例化一个特定的下载器,下载器必须实现IDownloader接口。DownloaderFactory也负责把<downloader>配置节中的设置传递给下载器的Init方法,Init允许使用额外的参数。
3. 最后,ApplicationUpdateManager类为每一个要升级的应用程序实例化一个DownloaderManager类,并且将它传给下载器。DownloaderManager类阶段性的使用下载器为每一个可升级的应用程序拷贝manifest文件并且检查升级。如果有一个可用的升级,DownloaderManager类使用下载器拷贝升级文件到客户端上的一个临时目录。

Updater Application Block包含一个叫做BITSDownloader下载器类,该下载器使用后台智能传输服务拷贝文件。你可以选择使用这个下载器,或者通过实现IDownloader接口创建一个定制的下载器类。

Microsoft Updater Application Block 验证器设计
Updater Application Block提供了一个可扩展的验证器架构,这使通过签名或哈希号验证下载文件成为可能。验证器架构支持在服务器上生成签名和在客户端上确认这些签名。
图1 展示了服务器端的验证架构

通过图1我们可以了解到验证器架构的以下几个方面
1.  manifest工具会初始化一个用户指定类型的验证器。所有的验证器必须实现IValidator接口。用户还必须为验证器指定一个密钥,传递给验证器。
2. 验证器为位于服务器端的应用程序升级目录中的每一个文件生成一个签名,生成的值会被写入manifest文件中。
3. 最后,验证器会为每一个manifest文件计算出一个签名,该签名会被写入manifest文件中的根节点的signature属性中。

注意:更多有关manifest文件设计的信息,可以参考 服务器端manifest文件设计

当manifest文件和升级文件被下载到客户端之后,必须通过验证签名来确认下载的文件未损坏。
图2 展示了客户端的验证架构。

通过图2,我们可以了解验证架构的以下几个方面:
1. ApplicationUpdaterManager类使用UpdaterConfiguration类的Instance属性读取配置文件的<validator>节。这个部分包含将要被使用的验证器的完整集合和类型名。更多有关应用程序配置文件设计的信息可以参考 应用程序升级器配置文件设计。
2. ValidatorFactory类用于初始化指定的验证器,该验证器实现了IValidator接口。ValidatorFactory类还会传递<validator>节点的配置信息到验证器的Init方法中。这个配置节通常包含一个密钥,该密钥可用来验证签名。
3. 最后,ApplicationUpdaterManager类为每一个待升级的应用程序初始化一个DownloaderManager类,并把它传给验证器。Downloader会不时地检查下载任务的状态是否为JobStatus.Ready,并且使用验证器验证下载文件的签名。当文件通过验证后,DownloaderManager把文件从临时目录中拷贝到适当的应用程序目录,并且执行一个在manifest文件中指定的后处理器[post processor]。你可以通过修改<application>元素的useValidation属性为false禁止一个应用程序的验证工作,在这种情况下,DownloaderManager将只是把所有的下载文件拷贝到它们的应用程序目录中,并允许特定的后处理器。

注意:使用useValidation属性时要小心,如果把值设置为false将降低安全性,并有可能造成未验证的代码程序在客户端上安装。

Updater Application Block包含两个验证器。一个是KeyValidator,使用对称加密密钥生成和验证签名。一个是RSAValidator,使用公钥/私钥对实现验证。你可以使用其中的任何一个验证器,或者你可以通过实现IValidator接口开发你自己定制的验证器。

应用程序加载器设计 
配置设计
后处理器设计     (Post Processor Design)
异常管理设计     (Exception Management Design)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值