(转)SmartClient(智能客户端)学习笔记之——Microsoft Updater Application Block ApplicationUpdater assembly设计

注:我用的是UAB1.0的版本,太旧了,不过原理应该一样的吧,下面是我从Tony Qu 转载过来的, 向大家推荐推荐,对想去看源代码的学习者有个整体的把握.

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实例的线程会停止。
posted @ 2007-08-22 16:43  寒蝉  阅读(664)  评论(0编辑  收藏  举报