GeneralUpdate实现应用程序更新

接单狂魔
• 阅读 2030

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

GeneralUpdate实现应用程序更新

项目介绍

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

  • GeneralUpdate.Core:断点续传、逐版本更新、下载超时时间
  • GeneralUpdate.ClientCore:断点续传、逐版本更新、更新组件自更新、便捷启动更新组件
  • GeneralUpdate.AspNetCore:服务端支持更新包下载地址、版本信息等内容
  • GeneralUpdate.Zip:解压更新包、解压进度通知
  • GeneralUpdate.Single:应用程序单例运行
  • GeneralUpdate.Common:组件公共类、方法
  • 以及生成版本信息的数据库结构脚本。

编码实现

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

GeneralUpdate实现应用程序更新

请先记住几个名词,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实现应用程序更新

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

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

  • 当前下载包大小
  • 下载进度
  • 进度百分比
  • 下载的版本信息
  • 当前正在执行的操作(检查版本信息中、正在下载当前版本、更新完成、更新失败)
  • 已下载大小

MutiDownloadStatistics该事件可提供信息:

  • 剩余下载时间
  • 下载速度

OnMutiDownloadCompleted该事件可提供信息:

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

OnMutiAllDownloadCompleted该事件可提供信息:

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

OnMutiDownloadError该事件可提供信息:

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

Exception:

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

Config:

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

Strategy<>:

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

LaunchTaskAsync:

  • 启动更新引导类

UpdateApp

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

GeneralUpdate实现应用程序更新

Service

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

GeneralUpdate实现应用程序更新

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

GeneralUpdate实现应用程序更新

运行效果

GeneralUpdate实现应用程序更新

下载安装

项目地址:

Nuget地址:

微软最有价值专家(MVP)

GeneralUpdate实现应用程序更新

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

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


欢迎关注微软中国MSDN订阅号,获取更多最新发布!
GeneralUpdate实现应用程序更新

点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
3年前
手机自动化测试IDE-----Airtest基本操作方法
大家好,我是IT共享者,人称皮皮。这篇我们来讲讲手机自动化测试IDEAirtest。前言前面我们讲到了Airtest的界面和安装技巧,今天我们就来说说Airtest的具体操作方法吧,让我们轻松实现软件自动化,真正解放我们的双手吧。一、基本API介绍我们在做自动化脚本的时候,每个生成的脚本文件会给我们自动生成一些代码,如图:这里所导入的模块其实就是跨平台的
Irene181 Irene181
3年前
手机自动化测试IDE-----Airtest基本操作方法
大家好,我是IT共享者,人称皮皮。这篇我们来讲讲手机自动化测试IDEAirtest。前言前面我们讲到了Airtest的界面和安装技巧,今天我们就来说说Airtest的具体操作方法吧,让我们轻松实现软件自动化,真正解放我们的双手吧。一、基本API介绍我们在做自动化脚本的时候,每个生成的脚本文件会给我们自动生成一些代码,如图:这里所导入的模块其实就是跨平台的
Spring Boot集成 Sentinel 实现接口流量控制
Hello,大家好,我是麦洛,今天带大家来了解一下SpringBoot如何继承Sentinel来实现接口流量控制Sentinel控制台搭建在我的上一篇文章阿里出品的Sentinel到底是个什么玩意?中,已经介绍过如何准备Sentinel控制台,大家可以直接参考;Sentinel客户端项目搭建首先我们来创建一个测试项目,这里初始化
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Stella981 Stella981
3年前
SpreadJS 纯前端表格控件应用案例:PtLims云平台
PtLims云平台是一款针对实验室的整套环节而设计的计算机应用系统,用于实现实验室人、机、料、法、环的全面资源管理,并构建一套完整的检验综合管理和产品质量监控体系,可满足实验室日常管理要求,保证化验分析数据的严格管理和控制。下面,让我们一起来看看青岛帕特是如何在“PtLims云平台”中应用表格技术,实现“数据填报(https://www.oschin
Stella981 Stella981
3年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
Java21上手体验-分代ZGC和虚拟线程 | 京东云技术团队
一、导语几天前Oracle刚刚发布了Java21,由于这是最新的LTS版本,引起了大家的关注。我也第一时间在个人项目中进行了升级体验。一探究竟,和大家分享。二、Java21更新内容介绍官方release公告:开源中国介绍:新特性一览:JEP431:序列集合
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
尤老娘 尤老娘
3星期前
从校园实验室到京东零售:一位算法工程师的风控实战录
作者:京东零售王晓婷大家好,我是王晓婷,在京东零售研究广告反作弊算法设计、实现与优化,结合LLM、深度学习、强化学习赋能反作弊系统,用算法识别和打击数字广告领域的欺诈行为。本文与大家分享我从高校实验室到广告风控战场的蜕变,一场关于认知觉醒、技术探索与思维重
京东云开发者 京东云开发者
3星期前
从校园实验室到京东零售:一位算法工程师的风控实战录
作者:京东零售王晓婷大家好,我是王晓婷,在京东零售研究广告反作弊算法设计、实现与优化,结合LLM、深度学习、强化学习赋能反作弊系统,用算法识别和打击数字广告领域的欺诈行为。本文与大家分享我从高校实验室到广告风控战场的蜕变,一场关于认知觉醒、技术探索与思维重