首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET WinForm 自動更新組件架構設計與實現

     編輯:ASP.NET 基礎

自研自動更新組件:從原理到落地

雖然 ClickOnce 提供了完善的發布與更新方案,但其高度封裝導致安裝路徑不可控、更新流程難定制、UI 無法品牌化。針對企業級 C/S 架構應用,本文分享一個輕量級、可深度定制的自動更新組件實現全過程。

核心更新流程

  1. 主程式啟動 → 呼叫更新組件 AutoUpdater.Update()
  2. 組件連接 IIS/FTP 下載 UpdateInfo.xml (含版本號、文件列表、下載 URL)
  3. 比對本地版本 (以 AssemblyVersion 為準),新版本則提示用戶
  4. 用戶確認 → 建立臨時目錄 → 多線程下載差異文件
  5. 備份舊版 → 替換文件 → 回滾機制保障失敗時恢復
  6. 重啟主程式完成更新

專案結構

AutoUpdater.sln
├── IAutoUpdater.cs        // 對外介面
├── AutoUpdater.cs         // 核心邏輯
├── AutoUpdater.config     // 本地配置 (伺服器地址、臨時目錄等)
├── DownloadConfirm.cs     // 更新提示 UI
├── DownloadProgress.cs    // 下載進度 UI
├── CommonUtility.cs       // 通用工具
├── Config.cs              // 配置序列化
├── ConstFile.cs           // 常量定義
├── DownloadFileInfo.cs    // 遠程文件實體
├── LocalFile.cs           // 本地文件實體
├── RemoteFile.cs          // 伺服器文件實體
└── UpdateFileList.cs      // 文件列表集合

伺服器端部署步驟

  1. 編譯發布最新版本至 IIS/FTP 目錄
  2. 執行生成工具掃描目錄,產出 UpdateInfo.xml (包含每個文件的版本、大小、雜湊值)
  3. 配置 MIME 類型支援 .xml、.dll、.exe 等靜態文件下載

客戶端整合代碼

// Program.cs 或主視窗建構函式
bool hasError = false;
IAutoUpdater updater = new AutoUpdater();

try 
{
    updater.Update(); // 內含版本檢查、下載、替換、重啟
}
catch (WebException) { MessageBox.Show("無法連接更新伺服器"); hasError = true; }
catch (XmlException) { MessageBox.Show("更新配置文件損壞"); hasError = true; }
catch (Exception ex) { MessageBox.Show($"更新異常: {ex.Message}"); hasError = true; }
finally 
{
    if (hasError) 
    {
        try { updater.RollBack(); } // 回滾機制
        catch { /* 記錄日誌 */ }
    }
}

UI 交互流程

更新提示對話框
圖 1:發現新版本時的確認對話框

下載進度條
圖 2:多線程下載進度顯示,支援取消操作

原始碼獲取與擴展方向

完整源碼託管於 CodePlex:https://autoupdater.codeplex.com/

後續規劃擴展:

  • 差分更新 (僅下載二進制差異塊)
  • 靜默更新模式 (企業環境強制推送)
  • 插件化架構支援模組級獨立更新
  • WPF/UWP 版本適配

此組件代碼精簡 (<2000 行),適合作為學習自動更新原理的教學案例,亦可直接用於中小型項目並按需二次開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved