zoukankan      html  css  js  c++  java
  • (转)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实例的线程会停止。
  • 相关阅读:
    React Native 开发豆瓣评分(三)集成 Redux
    React Native 开发豆瓣评分(二)路由配置
    React Native 开发豆瓣评分(一)环境搭建&配置模拟器
    VSCode 搭建 React Native 环境
    webpack4 + ejs 构建多页应用
    react-native 沉浸式状态栏
    react-native——tab配置及跳转
    uni-app 入门之 nvue (weex) 爬坑记
    javascript中bind()、call()、apply()的使用
    mysql数据库中文乱码配置文件解决以及常见mysql命令
  • 原文地址:https://www.cnblogs.com/hanchan/p/865679.html
Copyright © 2011-2022 走看看