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