.net程式客戶端更新方案
客戶端程式一個很大的不便的地方就是程式集更新,本文這裡簡單的介紹一種通用的客戶端更新方案。這個方案依賴程式集的動態載入,具體方案如下:
將程式集儲存在一個檔案資料庫中,客戶端所有程式集直接從檔案資料庫中載入,資料庫中主要儲存內容包括:
- 程式集名稱
- 程式集大小
- md5資訊
- 程式集內容
客戶端啟動的時候,從資料庫中動態載入程式集,可以直接使用Assmbly.Load,也可以參考我之前文章介紹的ofollow,noindex" target="_blank">.net載入失敗的程式集重新載入 實現動態載入。
客戶端更新流程如下:
- 該程式集資料庫伺服器一份,客戶端一份
- 程式啟動時,首先將本地的程式集目錄(程式集名稱和md5資訊)傳送給伺服器,伺服器根據客戶端目錄生成需要更新的差異程式集資料庫,並返回給客戶端。
- 客戶端根據接收到的差異資料庫更新本地程式集資料庫。
先更新,後啟動
- 每次啟動前,首先更新程式集,
- 更新程式集完成後,然後再載入程式集。
這個方式有點是,實現簡單,缺點主要是延長了啟動時間
先啟動,後更新
- 主程式啟動過程中,下載差異資料庫,然後提示程式重新啟動
- 程式重新啟動的過程中,首先合併差異資料庫,然後再載入程式集。
這種方案不影響客戶端啟動,但如果更新的時候有一個重啟動作,對客戶端不夠友好,適合於更新頻率較小的場景。
邊更新,邊啟動
對於客戶端來說,往往由於載入了一些第三方的主題庫,導致本身啟動速度就很慢,需要SplashScreen來過渡。這個過渡時間可以用來併發更新程式集
- 啟動時,首先載入主屏程式需要顯示,但又不怎麼會更新的本地程式集(往往是一些第三方的控制元件),同時顯示SplashScreen。
- 載入這些程式集的同時,獲取需要更新的程式集資料庫,更新本地程式集資料庫。
- 更新程式集資料庫和載入首屏程式集完成後,正常繼續啟動。
這個方式既不影響啟動速度,又沒有重啟的動作,但邏輯較複雜些,還需要考慮到一些衝突(例如,已經載入了需要更新的程式集)。