編寫人:左丘文
2015-4-20
近來在給一客戶實施ECM系統,但他們使用功能并不是我們ECM制造版提供的標準功能,他們要求對系統作一些定制功能,為了避免因程序的bug而帶來頻繁讓用戶更新程序的不良影響,就想給ECM增加一個winform自動更新功能,今天在這里,我想與大家一起分享代碼,在此做個小結,以供參考。有興趣的同學,可以一同探討與學習一下,否則就略過吧。
1、首先我們在這里先分析一下其它程序猿的一些基本情況:
相信有許多程序猿都喜歡用Winform做開發吧?!因為Winform相對Webform而言,優點是,功能更強大,編程更方便.但是它的缺點,就是軟件的安裝及維護是相當麻煩地,要實現軟件更新,需要到客戶端一臺一臺地升級。
長期以來,廣大程序猿為到底是使用Client/Server,還是使用Browser/Server結構爭論不休,在這些爭論當中,C/S結構的程序可維護性差,布置困難,升級不方便,維護成本高就是一個相當重要的因素。有很多企業用戶就是因為這個原因而放棄使用C/S。然而當一個應用必須要使用C/S結構才能很好的實現其功能的時候,我們該如何解決客戶端的部署與自動升級問題?部署很簡單,只要點擊安裝程序即可,難的在于每當有新版本發布時,能夠實現自動升級。現在好了,我們的目標很簡單,我們希望開發一個與具體應用無關的能夠復用的自動升級系統。下面我為大家提供了一套可復用的用C#實現在線升級。這里分為本地在線升級,也可以利用webservice 在線通過互聯網與軟件開商的服務器在線升級。
2、實現軟件自動在線升級的原理:
1) 寫三個程序,一個是主程序;兩個是升級程序;所有升級任務都由升級程序完成
原本只需要一個升級程序,但在這里,由于我們另外還涉及到了,在線與軟件供應商服務器更新功能,因此我們這里用到了一個主程序兩個升級程序。
2) 很多人實行的原理是將現有版本與最新版本作比較,發現最新的則提示用戶是否升級,當然也有人用其它屬性比較的,例如:文件大小或者更新日期。我們這里主要利用FileUtil的兩個屬性SHA1File與md5File來判斷,與服務器之間是否存在版本差異,存在就更新。
3) 我們的程序,剛開始初始版本是我一同事利用了三天時間,大致寫了一個框架出來,我是在他的基礎上,對其進行了完善,如增加了對文件流的壓縮與解壓縮功能,方便進行網絡的傳輸,增加了通過webservices的在線更新功能。并將程序做到通用功能,并嵌套到了我們的ECM系統中。
3、軟件更新操作界面:
1) 啟動我們的主程序ECM
2) 系統會從數據庫中檢查是否有新版本,點點【否】會直接進入系統,點【是】系統會進入到更新介面:
先擇需要更新的內容,點擊更新,系統會自動更新相關程序。
3) 與軟件供應商服務器在線更新介面:
操作類似于在線本地更新一樣。
具體就需要各位好好的自已去調試了。
4、更新程序的代碼:
1) 我們的更新程序是以文件流的形式存放在數據庫中,因此我們首先需要為系統數據庫增加相關的表,用于存儲更新文件。
2) 整體程序框架圖如下:
3) 上傳功能代碼:
新聞熱點
疑難解答