GeneralUpdate實現應用程式更新

微軟技術棧發表於2021-12-08

大家好,我是本期的實驗室研究員——朱震。今天我將通過實驗和完整的操作過程,向大家介紹如何基於開源專案GeneralUpdate打造一個能自動升級的客戶端應用。接下來就讓我們一起到實驗室中一探究竟吧!

image.png

專案介紹

GeneralUpdate是基於.net standard開發的一款(c/s應用)自動升級程式。該元件將更新的核心部分抽離出來方便應用於多種專案當中目前適用於wpf,控制檯應用,winfrom。目前封裝了六個元件功能分別如下:

  • GeneralUpdate.Core:斷點續傳、逐版本更新、下載超時時間
  • GeneralUpdate.ClientCore:斷點續傳、逐版本更新、更新元件自更新、便捷啟動更新元件
  • GeneralUpdate.AspNetCore:服務端支援更新包下載地址、版本資訊等內容
  • GeneralUpdate.Zip:解壓更新包、解壓進度通知
  • GeneralUpdate.Single:應用程式單例執行
  • GeneralUpdate.Common:元件公共類、方法
  • 以及生成版本資訊的資料庫結構指令碼。

編碼實現

在講編碼實現之前,可能大家對自動更新流程不太熟悉,這裡我整理了一張更新的流程圖來為大家講解:

289e178077dac9c8f4ec90ef4a1e4bc6.png

請先記住幾個名詞,MainApp是公司的產品專案,UpdateApp是獨立程式的升級程式,Service是伺服器。

(1)Mainapp會向伺服器請求UpdateApp更新程式的包(這一步是為了自更新UpdateApp)

(2)如果UpdateApp需要更新則下載更新包(進行MD5加密驗證)

(3)不需要更新或更新完成之後都會通過程式通訊開啟UpdateApp

(4)UpdateApp啟動之後則開始向伺服器請求Mainapp的更新包(進行MD5加密驗證)

(5)如果有則把更新包下載下來,並把Mainapp更新包裡的檔案解壓並覆蓋到本地實現更新

(6)UpdateApp更新完成後則啟動Mainapp並關閉自身

大致知道更新流程之後我們來分別看看MainApp、UpdateApp、Service的應用吧。

MainApp

9707b41749e3dfda797bdd52a43aabb7.png

大家可以看到在引用GeneralUpdate.ClientCore 的nuget包之後,可以直接按照以上語法直接使用非常方便,基本上你所關注的一些資訊都封裝在了這些事件裡,我們一起來看看封裝了那些內容。

MutiDownloadProgressChanged該事件可提供資訊,單個或多個更新包的:

  • 當前下載包大小
  • 下載進度
  • 進度百分比
  • 下載的版本資訊
  • 當前正在執行的操作(檢查版本資訊中、正在下載當前版本、更新完成、更新失敗)
  • 已下載大小

MutiDownloadStatistics該事件可提供資訊:

  • 剩餘下載時間
  • 下載速度

OnMutiDownloadCompleted該事件可提供資訊:

  • 當前下載的更新包是否下載完成

OnMutiAllDownloadCompleted該事件可提供資訊:

  • 這一次如果有多個版本需要更新則會在所有版本更新檔案下載完成之後通知

OnMutiDownloadError該事件可提供資訊:

  • 下載版本檔案過程出現的異常資訊

Exception:

  • 整個下載、安裝、啟動程式的過程任何異常都會通過該事件返回

Config:

  • 程式之間需要傳遞的內容

Strategy<>:

  • 是開放給開發者擴充套件的入口,如果更新流程有新的變更則可以繼承元件預設自帶的DefaultStrategy類進行自定義擴充套件

LaunchTaskAsync:

  • 啟動更新引導類

UpdateApp

這裡幾乎和上一個元件的功能一樣這裡簡單的看看程式碼如何應用。

a933ce6e9d0345971bf3ac1043f88313.png

Service

這裡我們只需要在IServiceCollection中注入我們實現好的更新邏輯即可。

9aadc7caba64d5f682189ca235e7233b.png

接下來再看看controller中如何實現。

988f9e48385446eafac08a1055372bf9.png

執行效果

895a751cbce7c7b9e9923b84f8a0a64d.png

下載安裝

專案地址:

Nuget地址:

微軟最有價值專家(MVP)

bc93fde364ea9dd3d9106b58e805b770.png

微軟最有價值專家是微軟公司授予第三方技術專業人士的一個全球獎項。28年來,世界各地的技術社群領導者,因其線上上和線下的技術社群中分享專業知識和經驗而獲得此獎項。

MVP是經過嚴格挑選的專家團隊,他們代表著技術最精湛且最具智慧的人,是對社群投入極大的熱情並樂於助人的專家。MVP致力於通過演講、論壇問答、建立網站、撰寫部落格、分享視訊、開源專案、組織會議等方式來幫助他人,並最大程度地幫助微軟技術社群使用者使用Microsoft技術。
更多詳情請登入官方網站:
https://mvp.microsoft.com/zh-cn


歡迎關注微軟中國MSDN訂閱號,獲取更多最新發布!
image.png

相關文章