大家好,我是本期的实验室研究员——朱震。今天我将通过实验和完整的操作过程,向大家介绍如何基于开源项目GeneralUpdate打造一个能自动升级的客户端应用。接下来就让我们一起到实验室中一探究竟吧!
文章图片
项目介绍
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该事件可提供信息,单个或多个更新包的:
- 当前下载包大小
- 下载进度
- 进度百分比
- 下载的版本信息
- 当前正在执行的操作(检查版本信息中、正在下载当前版本、更新完成、更新失败)
- 已下载大小
- 剩余下载时间
- 下载速度
- 当前下载的更新包是否下载完成
- 这一次如果有多个版本需要更新则会在所有版本更新文件下载完成之后通知
- 下载版本文件过程出现的异常信息
- 整个下载、安装、启动程序的过程任何异常都会通过该事件返回
- 进程之间需要传递的内容
- 是开放给开发者扩展的入口,如果更新流程有新的变更则可以继承组件默认自带的DefaultStrategy类进行自定义扩展
- 启动更新引导类
这里几乎和上一个组件的功能一样这里简单的看看代码如何应用。
文章图片
Service
【GeneralUpdate实现应用程序更新】这里我们只需要在IServiceCollection中注入我们实现好的更新逻辑即可。
文章图片
接下来再看看controller中如何实现。
文章图片
运行效果
文章图片
下载安装 项目地址:
- https://github.com/WELL-E/Aut...
- https://gitee.com/Juster-zhu/...
- https://www.nuget.org/package...
- https://www.nuget.org/package...
- https://www.nuget.org/package...
- https://www.nuget.org/package...
- https://www.nuget.org/package...
- https://www.nuget.org/package...
文章图片
微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项。28年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。
MVP是经过严格挑选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的热情并乐于助人的专家。MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人,并最大程度地帮助微软技术社区用户使用Microsoft技术。
更多详情请登录官方网站:
https://mvp.microsoft.com/zh-cn
欢迎关注微软中国MSDN订阅号,获取更多最新发布!
文章图片
推荐阅读
- C#|c# HashtableTo Json 字符串 HashtableToWxJson
- main|Okhttp网络请求
- adapter|okHttp网络请求2——MVP
- Dot|Asp.net使用Aspose.Words 组件生成Word