Upgrade SDK
检查、下载、校验、安装,交给 SDK
把「怎么升级」从每个项目里抽出来:统一协议、服务端判定是否有更新、下载后强制校验 SHA256。业务代码只关心「有没有更新」和「什么时候重启」。
.NET 已可用Tauri / Android 设计中NuGet 0.1.0-preview.1
支持矩阵
| 端 | 包 | 状态 |
|---|---|---|
| Windows(.NET / WPF / WinUI) | Justwei.AppCenter.Upgrade(net10.0,零第三方依赖) | 已实现,NuGet 可安装 |
| Windows(Tauri) | appcenter-upgrade(Rust)+ @appcenter/upgrade-tauri | 设计中 |
| Android | appcenter-upgrade(AAR) | 设计中 |
| Web | — | 不做下载,只做检查与跳转 |
| iOS / macOS | — | 跳转 App Store / 下载页 |
快速开始(.NET)
NuGet 预览版已发布(目标框架 net10.0),也可以工程引用接入。 WPF 与 WinUI 共用同一套逻辑,差别只在 UI。
using Justwei.AppCenter.Upgrade;
using var client = new AppCenterUpgradeClient(new AppCenterOptions
{
BaseUrl = "https://api.app.justwei.com",
Identifier = "my-browser", // 平台上的应用标识
Platform = AppPlatform.Windows,
Arch = "x64",
});
var check = await client.CheckAsync(); // hasUpdate 由服务端判定
if (!check.HasUpdate)
{
return; // 已是最新,不提示
}
var file = await client.DownloadAsync(check,
new Progress<DownloadProgress>(p => Console.WriteLine($"{p.Percent:0}%")));
await client.InstallAsync(file); // 拉起 Updater / 安装器,随后退出主程序它替你做了这些
- 判定更新:
hasUpdate由服务端算,客户端不再自己比版本号; - 选对产物:多架构版本按
arch选择,返回里带artifactId; - 断点续传:复用
.part;服务端不支持 Range 时自动整包重下,不会拼坏; - 完整性校验:
sha256不符即删文件并抛ChecksumMismatch; - 拉起安装:zip 交给同目录
Updater.exe,exe/msi 直接运行安装器。
协议
一次检查就是一次 POST,匿名,不需要密钥:
POST /api/app/upgrade/check
Content-Type: application/json
{
"platform": 1,
"identifier": "my-browser",
"currentVersionName": "0.1.27",
"arch": "x64"
}命中新版本时返回(节选):
{
"hasUpdate": true,
"isMandatory": false,
"versionName": "0.1.28",
"changelog": "- 切换到 AppCenter 升级通道",
"fileName": "MyBrowser-0.1.28.zip",
"artifactId": "3a2460e1-…",
"size": 112895568,
"sha256": "d3b59349…",
"downloadUrl": "https://api.app.justwei.com/api/app/upgrade/download/…"
}安装方式
| 产物 | SDK 行为 |
|---|---|
.zip | 调同目录 Updater.exe(独立进程,等主程序退出后原子替换并重启) |
.exe / .msi | 直接运行安装器(Tauri / NSIS 等),安装逻辑交给安装器自己 |
| 其他类型 | 抛 UnsupportedPackage,不猜测 |
调用 InstallAsync 之后,主程序必须尽快退出 —— 运行中的 exe 无法被覆盖。
错误码
| 枚举 | 含义与处理 |
|---|---|
InvalidConfiguration | 缺标识、非 https 等,启动期就该暴露 |
NetworkError | 网络失败或超时,可退避重试 |
ServerError | 服务端非 2xx,带 HTTP 状态码 |
DownloadFailed | 下载中断、磁盘写入失败、大小不符 |
ChecksumMismatch | SHA256 不一致,文件已删除 |
InstallerNotFound | 缺 Updater.exe,检查分发时是否漏带 |
InstallFailed | 待安装文件不存在 |
UnsupportedPackage / UnsupportedPlatform | 产物类型或平台不支持自安装 |
获取方式
NuGet 预览版已发布,目标框架 net10.0:
dotnet add package Justwei.AppCenter.Upgrade --prerelease 刚发布时搜索索引可能滞后,可显式指定版本: dotnet add package Justwei.AppCenter.Upgrade --version 0.1.0-preview.1。 包 ID 与命名空间均为 Justwei.AppCenter.Upgrade。
Tauri crate、Android AAR 仍在设计中,完成后会在这里补下载入口;当前也可以工程引用 ProjectReference 接入。
发版侧(把版本送到平台)用 CLI,见 CLI 工具。