Microsoft Updater Application Block 1.2.2 ApplicationUpdater assembly设计 [翻译]

本文详细介绍了Microsoft的应用更新器组件,包括其核心功能、下载器、验证器等关键部分的设计与实现。此外,还深入探讨了配置管理及异常处理机制。
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实例的线程会停止。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值