Microsoft Updater Application Block ApplicationUpdater assembly设计
译者:
Tony Qu
ApplicationUpdater集合提供了Updater Application Block的核心功能。
ApplicationUpdater集合类
ApplicationUpdater集合包含许多类,可以分为以下几类:
核心类
ApplicationUpdater中的核心类控制选择、下载、验证和后处理功能。这些核心类有以下两个:
ApplicationManager——这是应用程序升级器的根对象。这个类负责启动和管理每一个在配置文件中列出应用程序的线程,DownloadManager将运行于该类之上。该类还为应用程序升级器提供公共的API,允许控制器应用程序控制升级器。
DownloadManager——这个类管理选择、下载、验证和后处理功能
下载器类
下载器类实现了IDownloader接口,并提供把文件从一个位置拷贝到另一个的功能。ApplicationUpdater包含以下几个下载器相关类:
BITSDownloader——一个使用后台智能传输服务的下载器,基于http连接来拷贝文件。
BITS Interop wrappers——ApplicationUpdater集合也包含BITS API的COM交互封装。这些API是用来在BITSDownloader中初始化和管理BITS拷贝任务的。
验证器类
验证器类实现了IValidator接口,被用来签名和验证manifest文件和应用程序文件。ApplicationUpdater包含以下几个验证器:
KeyValidator —— 基于对称密钥的验证器。更多关于KeyValidator类的设计信息可以参考 KeyValidator类设计
RSAValidator —— 基于公私钥的验证器。更多关于RSAValidator类的设计信息可以参考 RSAValidator类设计
配置类
在ApplicationUpdater中有三个配置来源,它们是应用程序升级器自己的配置文件、应用程序执行器的配置文件、manifest文件。所有这些来源都是用xml文件实现的,并且通过反序列化赋值给面向对象的类。更多关于配置的信息可以参考 配置设计。
ApplicationUpdater包含以下配置相关类
UpdaterSectionHandler —— 这给类用于读取应用程序配置文件
UpdaterConfiguration —— 这个类负责提供应用程序配置。下面是该类包含的类实体
Logging Listener —— 应用程序配置文件中的<LogListener>节点
PollingConfiguration —— 应用程序配置文件中的<polling>节点
DownloaderConfiguration —— 应用程序配置文件中的<downloader>节点
ValidatorConfiguration —— 应用程序配置文件中的<validator>节点
ApplicationConfiguration —— 应用程序配置文件中的<application>节点
ClientConfiguration —— 应用程序配置文件中的<client>节点
ServerConfiguration —— 应用程序配置文件中的<server>节点
ExtendedFormat —— 这个类提供一个定制格式,用于指定选择间隔[polling intervals],该值无法用常规的时间度量法进行度量
ClientApplicationInfo —— 这个类代表应用程序执行器[application launcher]的配置文件。
ServerApplicationInfo —— 这个类代表一个已升级应用程序的manifest文件,它包含下列类实体:
PostProcessorConfiguration —— manifest文件中的<postprocessor>节点
FileConfig —— manifest文件中的<file>节点
对象创建管理类
在应用程序升级器中,对象创建是用工厂模式实现的。下面的一些类提供了对象创建功能:
GenericFactory —— 一个基础工厂类负责任何一个对象的创建
DownloaderFactory —— GenericFactory的一个包装类[wrapper],负责下载器对象的创建
ValidatorFactory —— GenericFactory的一个包装类,负责验证器对象的创建
异常类
ApplicationUpdaterException —— 一个通用的异常,用于处理所有在初始化过程中和Updater Application Block的操作中的错误发生。异常的Message属性反映了异常的性质。ApplicationUpdaterException类扩展了在Exception Management Application Block中定义的BaseApplicationException类。
工具类
Resource —— 该类提供一个单一指针,用于访问资源字符串
FileUtility —— 该类用于维护文件和文件夹
ExtendedFormatHelper —— 该类用于管理ExtendedFormat的选择间隔[polling intervals]
ApplicationUpdater功能
应用程序升级过程按一下方式执行:
1. 当ApplicationUpdaterManager类被初始化后,执行如下任务
a. UpdaterConfiguration类被用来获得配置信息。
b. 为每一个在配置文件中被指定的应用程序创建一个DownloaderManager对象,并且初始化一个downloader和validator类实例,它们在配置文件中被指定。每一个DownloaderManager有一个线程。
c. 创建一个DnldMgrHolder结构数组,为每一个DownloaderManager包含一个DnldMgrHolder结构。
2. 当调用StartUpdater方法后,每一个为DownloaderManager创建的保存在DnldMgrHolder结构中的线程被启动。
3. DownloaderManager如下管理升级过程:
a. DownloaderManager为应用程序下载manifest文件,并且验证下载下来的文件。
b. 如果manifest文件有效,DownloaderManager检查应用程序是否有可用的新版本。如果可以升级,DownloaderManager暂停并且检查是否被标志为停止[stop],如果不是,它会启动一个异步下载来下载应用程序升级文件到临时目录,临时目录在配置文件中设定,并且它会把下载任务状态设置为“Downloading”。
c. 在下载过程中,DownloaderManager不间断地检查是否被设置了停止[stop]标志,是否下载已经完成,是否选择间隔完成。
d. 如果任务状态为"Ready",DownloaderManager使用验证器验证下载文件。如果有任何一个文件无效,DownloaderManager从临时目录删除下载文件。否则,拷贝文件到目标目录。
e. 在验证完成后,DownloaderManager为后处理器[post processor]检查manifest文件。如果指定了后处理器,DownloaderManager在一个新的线程上初始化它,并且调用它的Run方法。
f. 整个过程再次启动
4. 当StopUpdater方法被一个特定的应用程序调用,ApplicationUpdaterManager停止一个DownloaderManager的线程
5. 如果调用不带参数的StopUpdater,所有的DownloaderManager实例的线程会停止。