淺談C#實現在線升級
長期以來,廣大程序員為到底是使用Client/Server,還是使用Browser/Server結構爭論不休,在這些爭論當中,C/S結構的程序可維護性差,布置困難,升級不方便,維護成本高就是一個相當重要的因素。有很多企業用戶就是因為這個原因而放棄使用C/S。然而當一個應用必須要使用C/S結構才能很好的實現其功能的時候,我們該如何解決客戶端的部署與自動升級問題?部署很簡單,只要點擊安裝程序即可,難的在于每當有新版本發布時,能夠實現自動升級。現在好了,我們的目標很簡單,我們希望開發一個與具體應用無關的能夠復用的自動升級系統。下面我為大家提供了一套可復用的用C#實現在線升級。
一.C#實現在線升級存在的困難
***,為了查找遠程服務器上的更新,應用程序必須有查詢網絡的途徑,這需要網絡編程、簡單的應用程序與服務器通訊的協議。
第二是下載。下載看起來不需要考慮聯網的問題,但要考慮下載用戶請求的文件,以及在沒有用戶同意時下載大文件。友好的自動更新應用程序將使用剩余的帶寬下載更新。這聽起來簡單,但卻是一個技術難題,幸運的是已經有了解決方法。
第三個考慮因素是使用新版應用程序更換原應用程序的過程。這個問題比較有趣,因為它要求代碼運行時將自己從系統刪除,有多種辦法可以實現該功能,本文程序主要通過比較新舊版本的日期號來實現替換新版本應用程序的功能。
二.實現軟件自動在線升級的原理
寫兩個程序,一個是主程序;一個是升級程序;所有升級任務都由升級程序完成。
1.啟動升級程序,升級程序連接到網站,下載新的主程序(當然還包括支持的庫文件、XML配置文檔等)到臨時文件夾;
2.升級程序獲取服務器端XML配置文件中新版本程序的更新日期或版本號或文件大小;
3.升級程序獲取原有客戶端應用程序的最近一次更新日期或版本號或文件大小,兩者進行比較;如果發現升級程序的日期大于原有程序的***日期,則提示用戶是否升級;或者是采用將現有版本與***版本作比較,發現***的則提示用戶是否升級;也有人用其它屬性如文件大小進行比較,發現升級程序的文件大小大于舊版本的程序的大小則提示用戶升級。本文主要采用比較新舊版本更新日期號來提示用戶升級。
4.如果用戶選擇升級,則獲取下載文件列表,開始進行批量下載文檔;
5.升級程序檢測舊的主程序是否活動,若活動則關閉舊的主程序;
6.刪除舊的主程序,拷貝臨時文件夾中的文件到相應的位置;
7.檢查主程序的狀態,若狀態為活動的,則啟動新的主程序;
8.關閉升級程序,升級完成。
三.用C#實現在線升級的關鍵步驟
這里我主要使用日期信息來檢測是否需要下載升級版本。
準備一個XML配置文件名稱為AutoUpdater.xml,作用是作為一個升級用的模板,顯示需要升級的信息。
- <?xmlversionxmlversion="1.0"?>
- //xml版本號
- <AutoUpdater>
- <URLAddresURLURLAddresURL="http://192.168.198.113/vbroker/log/"/>
- //升級文件所在服務器端的網址
- <UpdateInfo>
- <UpdateTimeDateUpdateTimeDate="2005-02-02"/>
- //升級文件的更新日期
- <VersionNumVersionNum="1.0.0.1"/>
- //升級文件的版本號
- </UpdateInfo>
- <UpdateFileList>
- //升級文件列表
- <UpdateFileFileNameUpdateFileFileName="aa.txt"/>
- //共有三個文件需升級
- <UpdateFileFileNameUpdateFileFileName="VB40.rar"/>
- <UpdateFileFileNameUpdateFileFileName="VB4-1.CAB"/>
- </UpdateFileList>
- <RestartApp>
- <ReStartAllowReStartAllow="Yes"/>
- //允許重新啟動應用程序
- <AppNameNameAppNameName="TIMS.exe"/>
- //啟動的應用程序名
- </RestartApp>
- </AutoUpdater>
從以上XML文檔中可以得知升級文檔所在服務器端的地址、升級文檔的更新日期、需要升級的文件列表,其中共有三個文件需升級:aa.txt、VB40.rar、VB4-1.CAB。以及是否允許重新啟動應用程序和重新啟動的應用程序名。
【編輯推薦】