前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Updater application block 2.1使用和扩展

Updater application block 2.1使用和扩展

作者头像
阿新
发布2018-04-12 17:44:53
7730
发布2018-04-12 17:44:53
举报
文章被收录于专栏:c#开发者

Updater application block 2.1使用和扩展

概述

Updater application block简称UAB,是Microsoft patterns & practices(模式&实践组)早期开发的一个自动更新的组件,在Click-Once(.net 2.0)之前发布的,所以最新的版本也到2.0号就就停止更新了。

UAB使用了"推模式"的自动更新,在无需用户的干预下发布新版本的更新;

应用场景

保持应用程序总是最新版本

用户可以使用多个插件

保持数据文件总是最新版本

为应用程序添加自我更新功能

使应用平滑升级到ClickOnce(.NET 2.0)使应用平滑升级到ClickOnce(.NET 2.0)

有效利用带宽

进行复杂升级

主要功能

更简单的公共API

客户端更新方法4行代码搞定客户端更新

// Get the updater manager

ApplicationUpdaterManager updater = ApplicationUpdaterManager.GetUpdater();

// Check Version

manifests = updater.CheckForUpdates();

// update the application as per manifest details.

updater.Download(manifests, TimeSpan.MaxValue );

// Activate process.

updater.Activate( manifests );

新加入的事件机制是应用程序可以为更新的各个阶段加入自定义动作

updater.DownloadStarted +=new DownloadStartedEventHandler(updater_DownloadStarted);

updater.DownloadProgress += new DownloadProgressEventHandler(updater_DownloadProgress);

updater.DownloadCompleted += new DownloadCompletedEventHandler(updater_DownloadCompleted);

updater.DownloadError += new DownloadErrorEventHandler(updater_DownloadError);

updater.ActivationInitializing += new ActivationInitializingEventHandler(updater_ActivationInitializing);

updater.ActivationStarted += new ActivationStartedEventHandler(updater_ActivationStarted);

updater.ActivationInitializationAborted += new ActivationInitializationAbortedEventHandler(updater_ActivationInitializationAborted);

updater.ActivationError += new ActivationErrorEventHandler(updater_ActivationError);

updater.ActivationCompleted +=new ActivationCompletedEventHandler(updater_ActivationCompleted);

支持部分更新

    选择你要更新的文件

使用事件监控下载过程

支持Windows Installer

清单、下载器和激活模块

图形化管理工具

功能模块

Updater Management子系统

– ApplicationUpdaterManger

– RegistryManager

– UpdaterTask

Manifest Management子系统

Downloader子系统

Activation子系统

整个更新过程非常简单:

1. 应用程序通过ApplicationUpdaterManager检测是否有更新

2. ApplicationUpdaterManager使用ManifestManager下载XML清单

3. DownloadManager使用BITSDownloader传输文件

4. ActivationManger使用ActivationProcessor激活文件版本

功能扩展

由于自带更新不支持更新文件目录树,原因我也猜到因为在服务端是通过IIS发布的以http的方式下载,故不支持文件目录;平时更新windows form应用程序,目录结构相对比较简单,但是如果更新Web应用程序,目录结构就相对复杂,基本会包含几层目录,因此使用它原本自带的更新功能几乎不能实现。

    解决这个问题我想到的思路有:

    1 重写IDownloader方法,新建一个FTPDownloader,采用FTP的GET命令可以获取目录的下载,重写类可以参考BITSDownloader.cs,或是参考网上有人开发一个httpDownloader;

    2使用MSI下载后安装更新,但是需要人参与更新点Next

    3 采用winzip打包压缩后,下载到本地,然后解压到目标路径下,这样做既可以很好的利用网络贷款,又解决了多文件目录覆盖更新。

    实现decompressing files Activation Process

要采用第三种方案,就必须自定义开发一个Decompress Files ActivationProcessor,用于解压下载的文件到指定的目录;

.net下操作winzip,Gzip文件的使用开源的ICSharpCode.SharpZipLib.dll 版本为8.5可以很方便的解压/压缩文件,文件目录

源代码分析

UAB自身已经提供了很多ActivationProcessor

通过类名就可以知道这些类的功能,我就不在说明了

随便打开一个类库可以发现都是通过实现IActivationProcessor

新建一个UnZipProcessor

解压代码

扩展UnZipProcessor编辑UI

解压的zip文件,解压的路径两个参数

创建扩展参数类UnZipProcessItem

代码如下

扩展UI编辑页面UnZipProcessorEditor.cs

代码如下

注册新开发的组件

测试

OK

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-11-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Updater application block 2.1使用和扩展
    • 概述
      • 应用场景
        • 主要功能
          • 功能模块
            • 功能扩展
              •     实现decompressing files Activation Process
              • 源代码分析
              • 测试
          相关产品与服务
          腾讯云代码分析
          腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档