GeneralUpdate实现应用程序更新

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GeneralUpdate实现应用程序更新相关的知识,希望对你有一定的参考价值。

微软中国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实现应用程序更新的主要内容,如果未能解决你的问题,请参考以下文章

GeneralUpdate版本更新公告20221009

GeneralUpdate20220323里程碑版本发布

[有奖励]GeneralUpdate开源项目招募开发者

如何使用GeneralUpdte构建客户端自动升级功能

如何实现android应用的自动更新?

iOS实现应用更新及强制更新