十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从零集成GeneralUpdate:WPF应用自动更新分步教程(附完整代码)

从零集成GeneralUpdate:WPF应用自动更新分步教程(附完整代码) 从零集成GeneralUpdateWPF应用自动更新分步教程附完整代码【免费下载链接】GeneralUpdateUnlimited Updates, Boundless Upgrades.项目地址: https://gitcode.com/gh_mirrors/ge/GeneralUpdate给 WPF 应用加上自动更新能力是很多桌面开发者绕不开的功课。GeneralUpdate 是一个基于 .NET 的跨平台应用自动更新组件不依赖任何 UI 框架一句代码即可启动更新流程配合 Client 与 Upgrade 双进程架构能够稳定地完成版本校验、下载、差分补丁、备份回滚等完整链路。本教程将从零开始手把手带你把 WPF 应用自动更新集成到自己的项目里全程附可直接运行的完整代码。一、集成前必须知道的 3 个核心概念在写代码之前先用 1 分钟理解 GeneralUpdate 的运转方式后面会少踩很多坑。概念说明Client 角色你的 WPF 主程序。负责向服务端校验版本、下载更新包、拉起升级进程Upgrade 角色升级程序如Updater.exe。不做任何网络请求只负责解压、打补丁、替换文件、重新拉起主程序manifest 文件generalupdate.manifest.json记录主程序名、版本号、产品 ID 等身份信息Client 启动时自动读取双进程的好处很直观主程序文件被占用时无法覆盖而升级程序可以替代主程序完成换血这也是桌面应用自动更新最经典的实现方案。二、第一步获取并引入 GeneralUpdate在解决方案中通过 NuGet 引入GeneralUpdate.Core包即可。如果想查看源码或参考示例可以克隆仓库到本地git clone https://gitcode.com/gh_mirrors/ge/GeneralUpdate仓库内置了可直接运行的演示工程建议先跑通再迁移到自己的 WPF 项目客户端示例tests/ClientTest/Program.cs演示 Client 角色的完整更新流程升级端示例tests/UpgradeTest/Program.cs演示 Upgrade 角色如何应用补丁核心入口源码src/GeneralUpdate.Core/Bootstrap/GeneralUpdateBootstrap.cs三、第二步创建 manifest 配置文件在 WPF 主程序输出目录下新建generalupdate.manifest.json内容如下{ mainAppName: ClientTest.exe, clientVersion: 1.0.0, appType: Client, updateAppName: UpgradeTest.exe, upgradeClientVersion: 2.0.0.0, productId: 8d74e7eb-160c-4a4b-a5dd-c71a7bb08eeb, updatePath: update/ }几个关键字段的含义mainAppName主程序可执行文件名用于更新完成后拉起主程序clientVersion当前客户端版本号服务端据此判断是否需要更新updateAppName升级程序文件名productId产品的唯一标识服务端区分不同应用四、第三步在 WPF 主程序中接入 Client 角色在 WPF 应用启动时例如App.xaml.cs的启动事件或主窗体加载事件调用GeneralUpdateBootstrap链式配置几行代码即可完成集成using GeneralUpdate.Core; using GeneralUpdate.Core.Configuration; using GeneralUpdate.Core.Download; await new GeneralUpdateBootstrap() .SetConfig(new UpdateRequest { UpdateUrl http://localhost:7391/Upgrade/Verification, ReportUrl http://localhost:7391/Upgrade/Report, AppSecretKey your-app-secret-key }) .SetOption(Option.AppType, AppType.Client) .HooksMyUpdateHooks() .AddListenerMultiDownloadStatistics(OnDownloadStatistics) .AddListenerUpdateInfo(OnUpdateInfo) .LaunchAsync();配置说明UpdateUrl服务端版本校验接口地址AppSecretKey应用密钥用于接口鉴权SetOption(Option.AppType, AppType.Client)声明当前进程角色为主程序HooksT()注册更新生命周期钩子可在更新前、下载完成、更新后等节点插入自定义逻辑AddListenerXxx订阅下载进度、版本信息等事件用于在 UI 上展示进度条五、第四步创建升级程序Upgrade 角色新建一个控制台或 WinForms 工程作为升级程序代码量更少——所有配置都通过加密 IPC 文件从主程序传递过来await new GeneralUpdateBootstrap() .SetOption(Option.AppType, AppType.Upgrade) .HooksUpgradeTestHooks() .LaunchAsync();升级进程启动后会自动读取 IPC 文件中的版本信息和安装路径应用补丁后重新拉起主程序并自行退出。整个过程无需命令行参数、无需配置文件逻辑集中在src/GeneralUpdate.Core/Strategy/UpdateStrategy.cs中。六、第五步订阅事件在 WPF 界面展示更新进度想要在 WPF 窗口上实时显示下载进度订阅MultiDownloadStatistics事件即可static void OnDownloadStatistics(object sender, MultiDownloadStatisticsEventArgs e) { var v e.Version as VersionEntry; Console.WriteLine($[Download] {v?.Version}: {e.ProgressPercentage}%); }GeneralUpdate 提供 7 类事件监听覆盖版本信息、单个下载完成、全部下载完成、下载错误、异常、进度统计等全部场景完整定义见src/GeneralUpdate.Core/Event/目录。事件处理器可以直接在 WPF 的Dispatcher中更新进度条与下载速度文案。七、测试与验证5 分钟跑通全流程启动一个简易更新服务端提供版本校验与文件下载接口发布两个版本的应用在服务端配置新版本信息运行旧版主程序观察其自动校验、下载、拉起升级进程升级进程完成文件替换后自动拉起新版主程序验证版本号已更新调试时建议打开调试日志日志出口定义在src/GeneralUpdate.Core/Tracer/GeneralTracer.cs问题定位会轻松很多。八、进阶能力速览完成基础集成后GeneralUpdate 还提供这些开箱即用的进阶能力差分更新通过UseDiffPipeline启用 HDiffPatch 差分算法只下载变更部分大幅节省流量备份回滚更新前自动备份安装目录失败时一键回滚到上一个可用版本静默更新设置Option.Silent开启后台轮询应用退出时自动完成升级用户无感知跨平台支持同一套 API 同时支持 Windows、Linux、macOS见src/GeneralUpdate.Core/Strategy/下的平台策略OSS 对象存储支持从阿里云 OSS、AWS S3、MinIO 等云存储直接分发更新包写在最后自动更新是桌面应用的基础设施早集成早省心。GeneralUpdate 把最复杂的双进程协作、差分算法、备份回滚都封装好了你只需要像上面这样配置十几行代码就能为 WPF 应用加上专业级的自动更新能力。建议从仓库里的示例工程入手跑通后再逐步接入自己的业务逻辑整个过程通常不超过半天。【免费下载链接】GeneralUpdateUnlimited Updates, Boundless Upgrades.项目地址: https://gitcode.com/gh_mirrors/ge/GeneralUpdate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表