棒!有了它,我不再为升级部署发愁了!
哈喽,大家好!我是指北君
。
指北君在一些小型项目实施过程中,常采用快速迭代开发流程,即收集需求->敏捷开发->极速测试->快速部署->收集反馈,这样的过程循环往复,直到该软件项目的使用生命周期结束为止。
这时候,一个良好的升级部署组件包显得很重要,它让你的项目很方便地集成如下功能:组件自更新检查、从服务器取得准确版本组件压缩包、支持断点传续、解压更新包等等。
如果靠自己开发,那就费老牛鼻子劲了,占用项目资源不说,还很有可能拖延项目交付时间!所以,还是要依靠开源!
指北君用过一个开源的升级部署组件包,非常好用!有了它,不用大费心力去自己开发,重复别人走过的坑;有了它,你就可以很轻松的完成迭代快速升级,只管把更新包上传到服务器就行,用户只要启动软件,就会自动发现新版更新包并自动下载、更新(当然,也可以设置允许用户拒绝更新,哈哈)。你现在很好奇这是什么了吧?当当,指北君来告诉你,可爱的GeneralUpdate组件闪亮登场啦!
一、组件介绍
GeneralUpdate是立志于成为全平台更新客户端的框架,提供高性能低损耗,断点续传、逐版本更新、二进制差分更新、增量更新功能、配置文件保留更新等特性。
二、功能介绍
组件包由以下几大模块组成,每个模块的主要功能和适用范围从名字上就能看出来:
- GeneralUpdate.Core:断点续传、逐版本更新。
- GeneralUpdate.ClientCore:断点续传、逐版本更新、更新组件自更新、便捷启动更新组件
- GeneralUpdate.AspNetCore:服务端支持更新包下载地址、版本信息等内容。
- GeneralUpdate.Zip:解压更新包、解压进度通知。
- GeneralUpdate.Single:应用程序单例运行。
- GeneralUpdate.Common:组件公共类、方法。
- 源码"sql"目录下包含mysql数据库表内容的生成脚本。
三、支持框架
四、运行逻辑
GeneralUpdate是基于.net standard开发的一款(c/s应用)自动升级程序。该组件将更新的核心部分抽离出来方便应用于多种项目当中。目前适用于WPF、控制台应用、WinForm。其核心运行逻辑可以参见下图。
五、运行效果
六、使用示例
- GeneralUpdate.ClientCore使用示例
private ClientParameter clientParameter;
private GeneralClientBootstrap generalClientBootstrap;
private void Button_Click(object sender, RoutedEventArgs e)
{
Task.Run(async()=>
{
//主程序信息
var mainVersion = "1.1.1";
var mianType = 1;
//该对象用于主程序客户端与更新组件进程之间交互用的对象
clientParameter = new ClientParameter();
//更新组件的版本号
clientParameter.ClientVersion = "1.1.1";
//客户端类型:1.主程序客户端 2.更新组件
clientParameter.ClientType = 2;
//更新程序exe名称
clientParameter.AppName = "AutoUpdate.ConsoleApp";
//主程序客户端exe名称clientParameter.MainAppName = "AutoUpdate.Test";
//本机的客户端程序应用地址
clientParameter.InstallPath = @"D:\update_test";
//更新公告网页
clientParameter.UpdateLogUrl = "https://www.baidu.com/";
//更新组件请求验证更新的服务端地址
clientParameter.ValidateUrl = $"https://127.0.0.1:5001/api/update/getUpdateValidate/{clientParameter.ClientType }/{clientParameter.ClientVersion }";
//更新组件更新包下载地址
clientParameter.UpdateUrl = $"https://127.0.0.1:5001/api/update/getUpdateVersions/{clientParameter.ClientType }/{ clientParameter.ClientVersion }";
//主程序客户端请求验证更新的服务端地址
clientParameter.MainValidateUrl = $"https://127.0.0.1:5001/api/update/getUpdateValidate/{ mianType }/{ mainVersion }";
//主程序客户端更新包下载地址
clientParameter.MainUpdateUrl =
$"https://127.0.0.1:5001/api/update/getUpdateVersions/{ mianType }/{ mainVersion }";
generalClientBootstrap = new GeneralClientBootstrap();
//单个或多个更新包下载通知事件
generalClientBootstrap.MutiDownloadProgressChanged +=
OnMutiDownloadProgressChanged;
//单个或多个更新包下载速度、剩余下载事件、当前下载版本信息通知事件
generalClientBootstrap.MutiDownloadStatistics +=
OnMutiDownloadStatistics;
//单个或多个更新包下载完成
generalClientBootstrap.MutiDownloadCompleted +=
OnMutiDownloadCompleted;
//完成所有的下载任务通知
generalClientBootstrap.MutiAllDownloadCompleted +=
OnMutiAllDownloadCompleted;
//下载过程出现的异常通知
generalClientBootstrap.MutiDownloadError += OnMutiDownloadError;
//整个更新过程出现的任何问题都会通过这个事件通知
generalClientBootstrap.Exception += OnException;
//ClientStrategy该更新策略将完成1.自动升级组件自更新 2.启动更新组件 3.配置好
ClientParameter无需再像之前的版本写args数组进程通讯了。
generalClientBootstrap.Config(clientParameter).
Strategy<ClientStrategy>();
await generalClientBootstrap.LaunchTaskAsync();
});
}
private void OnMutiDownloadStatistics(object sender,
MutiDownloadStatisticsEventArgs e)
{
//e.Remaining 剩余下载时间
//e.Speed 下载速度
//e.Version 当前下载的版本信息
}
private void OnMutiDownloadProgressChanged(object sender,
MutiDownloadProgressChangedEventArgs e)
{
//e.TotalBytesToReceive 当前更新包需要下载的总大小
//e.ProgressValue 当前进度值
//e.ProgressPercentage 当前进度的百分比
//e.Version 当前下载的版本信息
//e.Type 当前正在执行的操作 1.ProgressType.Check 检查版本信息中
2.ProgressType.Donwload 正在下载当前版本 3. ProgressType.Updatefile 更新当前版本 4.
ProgressType.Done更新完成 5.ProgressType.Fail 更新失败
//e.BytesReceived 已下载大小
}
- GeneralUpdate.Core使用示例
static void Main(string[] args)
{
var resultBase64 = args[0];
var bootstrap = new GeneralUpdateBootstrap();
bootstrap.Exception += OnException;
bootstrap.MutiDownloadError += OnMutiDownloadError;
bootstrap.MutiDownloadCompleted += OnMutiDownloadCompleted;
bootstrap.MutiDownloadStatistics += OnMutiDownloadStatistics;
bootstrap.MutiDownloadProgressChanged += OnMutiDownloadProgressChanged;
bootstrap.MutiAllDownloadCompleted += OnMutiAllDownloadCompleted;
bootstrap.Strategy<DefaultStrategy>().
Option(UpdateOption.DownloadTimeOut, 60).
RemoteAddressBase64(resultBase64).
LaunchAsync();
}
以上示例就介绍到这里啦,有需求的伙伴可以通过后台自行获取项目地址继续深入。
七、指北君有话说
这个开源项目提供全部源代码,方便大家下载,还提供了很详细的文档说明。
以指北君使用经验来看,这个组件包已经基本满足了在迭代小型项目中实现自动升级组件功能。大家可以多多尝试。该项目的团队依然在继续维护,反馈很热烈,前途远大啊。
这么好的开发工具包,在项目开发过程中会让你省心很多。所以指北君很有诚意的推荐这款GeneralUpdate组件包啦。还有,通过对源代码的学习,可以提高自己的水平。
开源指北,立志做最好的开源分享平台,分享有趣实用的开源项目。
欢迎加入交流群,你可以摸鱼、划水、吐槽、咨询。
还有简历模板、各种技术面试资料等100G的资源等着你领取哦。
公众号回复888马上加入,快来一起来聊一聊吧!
开源指北公众号回复 GeneralUpdate 获取资源。
以上就是本次推荐的全部内容,我是指北君
,感谢各位的观看。