微软中国MSDN  点击上方蓝字关注我们

大家好,我是本期的实验室研究员——朱震。今天我将通过实验和完整的操作过程,向大家介绍如何基于开源项目GeneralUpdate打造一个能自动升级的客户端应用。接下来就让我们一起到实验室中一探究竟吧!

微软MVP实验室研究员

朱震 Juster zhu

GeneralUpdate开源项目作者

Dotnet源计划b站、公众号作者

主要从事客户端领域开发

项目介绍

GeneralUpdate是基于.net standard开发的一款(c/s应用)自动升级程序。该组件将更新的核心部分抽离出来方便应用于多种项目当中目前适用于wpf,控制台应用,winfrom。目前封装了六个组件功能分别如下:

  • GeneralUpdate.Core:断点续传、逐版本更新、下载超时时间

  • GeneralUpdate.ClientCore:断点续传、逐版本更新、更新组件自更新、便捷启动更新组件

  • GeneralUpdate.AspNetCore:服务端支持更新包下载地址、版本信息等内容

  • GeneralUpdate.Zip:解压更新包、解压进度通知

  • GeneralUpdate.Single:应用程序单例运行

  • GeneralUpdate.Common:组件公共类、方法

以及生成版本信息的数据库结构脚本。

编码实现

在讲编码实现之前,可能大家对自动更新流程不太熟悉,这里我整理了一张更新的流程图来为大家讲解:

请先记住几个名词,MainApp是公司的产品项目,UpdateApp是独立进程的升级程序,Service是服务器。

(1)Mainapp会向服务器请求UpdateApp更新程序的包(这一步是为了自更新UpdateApp)

(2)如果UpdateApp需要更新则下载更新包(进行MD5加密验证)

(3)不需要更新或更新完成之后都会通过进程通讯打开UpdateApp

(4)UpdateApp启动之后则开始向服务器请求Mainapp的更新包(进行MD5加密验证)

(5)如果有则把更新包下载下来,并把Mainapp更新包里的文件解压并覆盖到本地实现更新

(6)UpdateApp更新完成后则启动Mainapp并关闭自身

大致知道更新流程之后我们来分别看看MainApp、UpdateApp、Service的应用吧。

MainApp

大家可以看到在引用GeneralUpdate.ClientCore 的nuget包之后,可以直接按照以上语法直接使用非常方便,基本上你所关注的一些信息都封装在了这些事件里,我们一起来看看封装了那些内容。

MutiDownloadProgressChanged该事件可提供信息,单个或多个更新包的:

  • 当前下载包大小

  • 下载进度

  • 进度百分比

  • 下载的版本信息

  • 当前正在执行的操作(检查版本信息中、正在下载当前版本、更新完成、更新失败)

  • 已下载大小

MutiDownloadStatistics该事件可提供信息:

  • 剩余下载时间

  • 下载速度

OnMutiDownloadCompleted该事件可提供信息:

  • 当前下载的更新包是否下载完成

OnMutiAllDownloadCompleted该事件可提供信息:

  • 这一次如果有多个版本需要更新则会在所有版本更新文件下载完成之后通知

OnMutiDownloadError该事件可提供信息:

  • 下载版本文件过程出现的异常信息

Exception:

  • 整个下载、安装、启动程序的过程任何异常都会通过该事件返回

Config:

  • 进程之间需要传递的内容

Strategy<>:

  • 是开放给开发者扩展的入口,如果更新流程有新的变更则可以继承组件默认自带的DefaultStrategy类进行自定义扩展

LaunchTaskAsync:

  • 启动更新引导类

UpdateApp

这里几乎和上一个组件的功能一样这里简单的看看代码如何应用。

Service

这里我们只需要在IServiceCollection中注入我们实现好的更新逻辑即可。

接下来再看看controller中如何实现。

运行效果

下载安装

项目地址:

  • https://github.com/WELL-E/AutoUpdater

  • https://gitee.com/Juster-zhu/GeneralUpdate

Nuget地址:

  • https://www.nuget.org/packages/GeneralUpdate.Common/

  • https://www.nuget.org/packages/GeneralUpdate.ClientCore/

  • https://www.nuget.org/packages/GeneralUpdate.AspNetCore/

  • https://www.nuget.org/packages/GeneralUpdate.Zip/

  • https://www.nuget.org/packages/GeneralUpdate.Single/

  • https://www.nuget.org/packages/GeneralUpdate.Core/

微软最有价值专家(MVP)

微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项。28年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。

MVP是经过严格挑选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的热情并乐于助人的专家。MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人,并最大程度地帮助微软技术社区用户使用Microsoft技术。
更多详情请登录官方网站:
https://mvp.microsoft.com/zh-cn

微软MVP,期待你加入

GeneralUpdate实现应用程序更新相关推荐

  1. GeneralUpdate 2021.08.14更新公告

    GeneralUpdate是基于.net standard2.0开发的一款(c/s应用)自动升级程序.该组件将更新的核心部分抽离出来方便应用于多种项目当中目前适用于wpf,控制台应用,winfrom. ...

  2. 小程序:浅谈小程序更新机制,发版后多久能全覆盖

    小程序会伴随业务的成长不断更新版本,那么发布了新版本后多长时间能被用户看到? 有人说,微信小程序的更新机制长久以来都是迷一样的存在,当你发布一个新版本的时候,不知道何时用户才能看到.明明已经发布了,却 ...

  3. uniapp微信小程序更新提醒

    onLaunch: function() {// #ifdef MP// 微信小程序更新提醒if (wx.canIUse('getUpdateManager')) {const updateManag ...

  4. STM32应用IAP进行程序更新详解及实例

      这是以前就想写的一个小专题关于IAP,以及IAP在STM32编程的应用,专题分三小节,主要介绍常见的单片机烧录方式,IAP的实际应用,以及Ymodem协议在IAP编程中应用,在笔记吃灰很久了,终于 ...

  5. 微信小程序更新二维数组中的对象或数组的属性值

    微信小程序更新二维数组中的对象或数组的属性值,这里可能有两种情况 1.微信小程序更新二维数组中的对象的属性值 更新二维数组中的某个对象的属性值,代码如下 js 代码 data: {familys:[{ ...

  6. 微信小程序更新版本,提醒用户重新进入程序

    微信小程序更新版本,提醒用户重新进入程序 uni-app写在App.vue onLaunch: function () {console.log("App Launch");// ...

  7. 答题活动小程序更新记录

    答题活动小程序更新记录 答题活动小程序更新记录 ~ 五一过去了,这个五一真的是忙碌,支持了几个五四青年节的答题活动,同时在这期间对小程序进行了几个优化,现在整理记录下 1.优化了小程序切后台7秒,切回 ...

  8. 微信小程序 更新版本操作

    1.小程序的启动方式: 冷启动----小程序首次打开或销毁后再次被打开 热启动----小程序打开后,在一段时间内(目前:5分钟)再次被打开,此时会将后台的小程序切换到前台. 2.根据以上两种启动方式, ...

  9. python程序更新实现_Python 软件热更新

    Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...

最新文章

  1. java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
  2. 【OCR技术系列之二】文字定位于切割
  3. leetcode算法题--Letter Case Permutation
  4. PHP 字符串与数组间的相互转化
  5. mysql 和 oracle 的一些区别
  6. .net 如何设置和检索特性信息(attribute)
  7. 知识图谱入门2-1:实践——基于医疗知识图谱的问答系统
  8. softmax分类器_[ML] 逻辑回归与 Softmax 回归
  9. 为什么工厂招人越来越不容易?是招工难还是待遇低?
  10. HENXU-SOA的业务规划和建模方法之七——SOA的方法融合
  11. java web课程设计工资管理系统_javaweb教师绩效工资管理系统
  12. MapReduce项目案例3——温度统计
  13. 2021-2027全球与中国环卫云平台市场现状及未来发展趋势
  14. 如何制定 - 测试计划和策略 (详细讲解)
  15. 华为G9怎么找到云相册_华为云相册,三大亮点功能助力P9摄影新体验
  16. TURN协议(RFC5766详解)
  17. OC小游戏之英雄打怪兽
  18. c#代码实现打印机打印文件
  19. 怎么看电脑支持多少兆网速_Win7系统下查看电脑宽带是多少兆的2个方法
  20. Fast-DDS库的安装教程

热门文章

  1. Android下载文件
  2. java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....
  3. 记录一次webpack3升级到webpack4过程
  4. man:命令帮助使用手册
  5. Java发送邮件(带附件)
  6. SpringBoot入门 (一) HelloWorld
  7. floyd判环算法(龟兔赛跑算法)
  8. JQUERY插件学习之jQuery UI
  9. 乌班图系统的MySQL_乌班图系统mysql主从备份
  10. apple tv设置_如何设置Apple HomePod