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 —— 应用程序配置文件中的 节点
PollingConfiguration —— 应用程序配置文件中的 节点
DownloaderConfiguration —— 应用程序配置文件中的 节点
ValidatorConfiguration —— 应用程序配置文件中的 节点
ApplicationConfiguration —— 应用程序配置文件中的 节点
ClientConfiguration —— 应用程序配置文件中的 节点
ServerConfiguration —— 应用程序配置文件中的 节点
ExtendedFormat —— 这个类提供一个定制格式,用于指定选择间隔[polling intervals],该值无法用常规的时间度量法进行度量
ClientApplicationInfo —— 这个类代表应用程序执行器[application launcher]的配置文件。
ServerApplicationInfo —— 这个类代表一个已升级应用程序的manifest文件,它包含下列类实体:
PostProcessorConfiguration —— manifest文件中的 节点
FileConfig —— manifest文件中的 节点
对象创建管理类
在应用程序升级器中,对象创建是用工厂模式实现的。下面的一些类提供了对象创建功能:
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实例的线程会停止。
译者: 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 —— 应用程序配置文件中的 节点
PollingConfiguration —— 应用程序配置文件中的 节点
DownloaderConfiguration —— 应用程序配置文件中的 节点
ValidatorConfiguration —— 应用程序配置文件中的 节点
ApplicationConfiguration —— 应用程序配置文件中的 节点
ClientConfiguration —— 应用程序配置文件中的 节点
ServerConfiguration —— 应用程序配置文件中的 节点
ExtendedFormat —— 这个类提供一个定制格式,用于指定选择间隔[polling intervals],该值无法用常规的时间度量法进行度量
ClientApplicationInfo —— 这个类代表应用程序执行器[application launcher]的配置文件。
ServerApplicationInfo —— 这个类代表一个已升级应用程序的manifest文件,它包含下列类实体:
PostProcessorConfiguration —— manifest文件中的 节点
FileConfig —— manifest文件中的 节点
对象创建管理类
在应用程序升级器中,对象创建是用工厂模式实现的。下面的一些类提供了对象创建功能:
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实例的线程会停止。
本文详细介绍了Microsoft的应用更新器组件,包括其核心功能、下载器、验证器等关键部分的设计与实现。此外,还深入探讨了配置管理及异常处理机制。
2637

被折叠的 条评论
为什么被折叠?



