標準升級流程
- 啟動檢測:主程序啟動時(登錄前)請求升級服務接口
GET /api/version/latest。
- 版本比對:對比本地版本 (
Assembly.GetExecutingAssembly().GetName().Version) 與服務器版本。
- 用戶確認:有新版本彈窗提示「發現新版本 v2.1.0,是否立即更新?」。
- 下載更新包:啟動獨立更新程序
Updater.exe,下載壓縮包(差分/全量)至臨時目錄,顯示進度條。
- 完整性校驗:下載完成後驗證 MD5/SHA256,防止篡改/損壞。
- 備份與替換:
- 關閉主程序 (Process.GetProcessesByName + Kill/CloseMainWindow)
- 備份關鍵文件 (配置文件、用戶數據) 到 Backup 資料夾
- 解壓覆蓋程序目錄 (保留備份文件)
- 執行遷移腳本 (數據庫升級、配置轉換)
- 重啟主程序:
Process.Start("MainApp.exe"),更新程序退出。
- 清理臨時文件:下次啟動時刪除臨時目錄。
關鍵機制
| 機制 | 說明 |
| 增量更新 | 僅下載變更文件 (bsdiff/七牛云/自定義差分算法),減小包體積。 |
| 靜默更新 | 後台自動下載,下次啟動自動應用,無感知。 |
| 灰度發布 | 服務端按用戶組/版本/地區推送,控制範圍。 |
| 回滾機制 | 保留上一版本備份,更新失敗或用戶投訴可一鍵回滾。 |
| 簽名驗證 | 更新包簽名 (RSA/ECDSA),客戶端驗證公鑰,防劫持。 |
| 斷點續傳 | HTTP Range 請求,網絡中斷續傳。 |
架構圖
Client (MainApp) --> [檢測] --> Server (Version API)
| |
v v
Client (Updater) <--[下載包]-- Server (File Storage/CDN)
|
v
[校驗] -> [備份] -> [替換] -> [遷移] -> [重啟 MainApp]
技術選型建議
安全注意
- 全程 HTTPS,防止中間人篡改更新包。
- 簽名驗證公鑰內置客戶端,私鑰離線簽名。
- 敏感操作(覆蓋系统文件)需管理員權限,設計 UAC 提升或服務模式。