Avalonia跨平台应用接入GeneralUpdate:一套代码全平台自动升级
Avalonia跨平台应用接入GeneralUpdate一套代码全平台自动升级【免费下载链接】GeneralUpdateUnlimited Updates, Boundless Upgrades.项目地址: https://gitcode.com/gh_mirrors/ge/GeneralUpdateAvalonia 是 .NET 生态中最受欢迎的跨平台 UI 框架之一但很多开发者会遇到一个难题应用能跨平台了跨平台应用自动升级却迟迟没有落地。本文要介绍的 GeneralUpdate正是一款不依赖任何 UI 框架的 .NET 跨平台自动升级组件一套代码即可让 Avalonia 应用在 Windows、Linux、macOS 上完成静默式自动更新彻底告别发版靠手动拷贝的尴尬。为什么 Avalonia 应用需要 GeneralUpdateAvalonia 的最大卖点是一套 XAML三端运行但升级方案却往往各写各的Windows 用自解压脚本、Linux 写 shell、macOS 打 dmg……维护成本极高。GeneralUpdate 的出现就是为了解决这个痛点特性说明UI 无关不依赖 Avalonia、WPF 或 WinForms更新过程零 UI 占用三端统一同一套升级代码覆盖 Windows / Linux / macOS差分升级支持 Chain差分与 Full全量两种包省流量断点续传下载中断后从断点继续弱网环境友好失败回退差分包失败自动回退到全量包更新更稳上图展示的是 GeneralUpdate 更新客户端的多种主题界面无论你的 Avalonia 应用走浅色还是深色风格升级流程都能无缝嵌入。第一步准备双进程结构 GeneralUpdate 采用Client主程序 Upgrade升级程序的双进程架构这是所有自动升级组件的通用设计主程序负责检查版本、下载文件升级程序负责替换文件、重启应用。在你的 Avalonia 解决方案中创建两个项目src/ ├── MyAvaloniaApp/ # Avalonia 主程序Client └── MyUpdater/ # 升级程序Upgrade可以是控制台项目主程序目录下需要放置generalupdate.manifest.json告诉升级组件你是谁、装在哪里{ mainAppName: MyAvaloniaApp, clientVersion: 1.0.0, appType: Client, updateAppName: MyUpdater, upgradeClientVersion: 2.0.0.0, updatePath: update/ }核心字段说明mainAppName主程序进程名升级完成后由升级程序重新拉起updateAppName升级程序文件名主程序通过它启动升级进程clientVersion当前版本号与服务端对比判断是否需要更新第二步零配置接入三行代码启动升级 ⚡GeneralUpdate 提供了SetSource零配置入口只需提供更新服务地址和应用密钥框架会自动从 manifest 发现应用身份信息await new GeneralUpdateBootstrap() .SetSource(https://api.example.com/Upgrade/Verification, 你的AppSecretKey) .SetOption(Option.AppType, AppType.Client) .LaunchAsync();这段代码放在 Avalonia 主程序的OnFrameworkInitializationCompleted中即可升级组件会在后台完成版本校验、下载、拉起升级进程的全流程。入口实现在 GeneralUpdateBootstrap.cs 中LaunchAsync会根据AppType自动分发到不同的角色策略。第三步完整配置掌控每一个更新细节 ️如果你的场景需要更精细的控制可以用SetConfig传入完整的UpdateRequest配置对象await new GeneralUpdateBootstrap() .SetConfig(new UpdateRequest { UpdateUrl https://api.example.com/Upgrade/Verification, ReportUrl https://api.example.com/Upgrade/Report, AppSecretKey 你的AppSecretKey, AuthScheme AuthScheme.Hmac }) .SetOption(Option.AppType, AppType.Client) .HooksMyAvaloniaHooks() .AddListenerMultiDownloadStatistics(OnDownloadProgress) .AddListenerException(OnUpdateError) .LaunchAsync();其中UpdateRequest的定义见 UpdateRequest.cs可配置项非常丰富InstallPath安装路径、Files/Formats/Directories黑名单保护配置文件不被覆盖、CustomHeaders自定义请求头、MaxChainBeforeFallback差分包数量阈值等。事件监听驱动你的更新 UI ️Avalonia 应用里最常用的做法是通过事件回调驱动一个更新提示窗AddListenerUpdateInfo收到服务端版本信息可用于发现新版本弹窗AddListenerMultiDownloadStatistics实时下载进度与速度驱动进度条AddListenerMultiDownloadError下载失败回调AddListenerException更新异常统一处理升级进程另一半代码怎么写的升级程序Upgrade 进程的代码更简单因为它不需要联网、不需要配置服务端地址所有更新信息通过 AES 加密的 IPC 文件从主进程传递过来await new GeneralUpdateBootstrap() .SetOption(Option.AppType, AppType.Upgrade) .LaunchAsync();这背后是 GeneralUpdate 的双重身份设计同一个GeneralUpdateBootstrap类型构造时会自动探测 IPC 文件是否存在——存在就是 Upgrade 进程直接读取加密配置并执行文件替换不存在就是 Client 进程走完整下载流程。IPC 通信的加解密实现在 IpcEncryption.cs 中。更新全流程从检查版本到重启应用 主程序启动 → 请求服务端校验版本 → 有新版本→ 下载 Chain/Full 包可断点续传 → 写加密 IPC 文件 → 拉起升级进程 → 主程序退出 升级进程 → 读取 IPC 配置 → 校验哈希 → 解压 → 应用差分补丁 → 更新 manifest 版本号 → 拉起新版主程序 → 退出整个执行链路在 docs/core-execution-flow.md 中有非常详细的图解包括 Chain→Full 回退机制、静默模式延迟升级等高级主题强烈建议通读一遍。进阶技巧静默升级用户无感知 对于 Avalonia 这类常驻后台的工具类应用可以开启静默模式主程序在后台轮询更新只在应用退出时才真正执行升级用户下次打开就是新版本.SetOption(Option.Silent, true) .SetOption(Option.SilentPollIntervalMinutes, 60)静默模式的实现位于 SilentPollOrchestrator.cs轮询逻辑在后台线程执行AppDomain.ProcessExit时自动拉起升级进程全程对用户零打扰。平台差异一行代码都不用改 ✅GeneralUpdate 通过OsStrategyResolver自动识别操作系统并分派给对应的 WindowsStrategy.cs、LinuxStrategy.cs、MacStrategy.cs。三端的差异路径大小写、进程启动方式、可执行权限都被封装在策略内部Avalonia 开发者完全无需关心。总结Avalonia 解决的是界面跨平台GeneralUpdate 解决的是升级跨平台两者组合在一起才能真正实现一套代码全平台发布、全平台升级的完整闭环。无论是几十 MB 的小工具还是几百 MB 的桌面软件差分升级、断点续传、失败回退这些特性都能让你的发布体验提升一个档次。如果想要快速上手可以直接拉取官方仓库体验完整示例git clone https://gitcode.com/gh_mirrors/ge/GeneralUpdate示例代码位于 tests/ClientTest/Program.cs主程序接入与 tests/UpgradeTest/Program.cs升级程序接入对照着看十分钟就能完成你的第一个 Avalonia 自动升级应用。【免费下载链接】GeneralUpdateUnlimited Updates, Boundless Upgrades.项目地址: https://gitcode.com/gh_mirrors/ge/GeneralUpdate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考