軟體自動更新思路

來源:互聯網
上載者:User

1 前言

  長期以來,廣大程式員為到底是使用Client/Server,還是使用Browser/Server結構爭論不休,在這些爭論當中,C/S結構的程式可維護性差,布置困難,升級不方便,維護成本高就是一個相當重要的因素。有很多企業使用者就是因為這個原因而放棄使用C/S。然而當一個應用必須要使用C/S結構才能很好的實現其功能的時候,我們該如何解決用戶端的部署與自動升級問題?部署很簡單,只要點擊安裝程式即可,難的在於每當有新版本發布時,能夠實現自動升級。我們希望開發一個與具體應用無關的能夠複用的自動升級系統。下面結合工作中所承擔的井場資料中心項目為大家介紹如何?可複用的自動升級系統。
2 軟體自動升級存在的困難
  第一,為了尋找遠程伺服器上的更新,應用程式必須有查詢網路的途徑,這需要網路編程、簡單的應用程式與伺服器通訊的協議。
  第二是下載。下載看起來不需要考慮連網的問題,但要考慮下載使用者請求的檔案,以及在沒有使用者同意時下載大檔案。友好的自動更新應用程式將使用剩餘的頻寬下載更新。這聽起來簡單,但卻是一個技術難題,幸運的是已經有瞭解決方法。
  第三個考慮因素是使用新版應用程式更換原應用程式的過程。這個問題比較有趣,因為它要求代碼運行時將自己從系統刪除,有多種辦法可以實現該功能,本文程式主要通過比較新舊版本的日期號來實現替換新版本應用程式的功能。
3 軟體自動線上升級的原理
  寫兩個程式,一個是主程式;一個是升級程式;所有升級任務都由升級程式完成。
  3.1.啟動升級程式,升級程式串連到網站,下載新的主程式(當然還包括支援的庫檔案、XML配置文檔等)到臨時檔案夾;
  3.2.升級程式擷取伺服器端XML設定檔中新版本程式的更新日期或版本號碼或檔案大小;
  3.3.升級程式擷取原有用戶端應用程式的最近一次更新日期或版本號碼或檔案大小,兩者進行比較;如果發現升級程式的日期大於原有程式的最新日期,則提示使用者是否升級;或者是採用將現有版本與最新版本作比較,發現最新的則提示使用者是否升級;也有人用其它屬性如檔案大小進行比較,發現升級程式的檔案大小大於舊版本的程式的大小則提示使用者升級。本文主要採用比較新舊版本更新日期號來提示使用者升級。
  3.4.如果使用者選擇升級,則擷取下載檔案清單,開始進行批量下載文檔;
  3.5.升級程式檢測舊的主程式是否活動,若活動則關閉舊的主程式;
  3.6.刪除舊的主程式,拷貝臨時檔案夾中的檔案到相應的位置;
  3.7.檢查主程式的狀態,若狀態為活動的,則啟動新的主程式;
  3.8.關閉升級程式,升級完成。
4 實現線上升級的關鍵步驟
  這裡我主要使用日期資訊來檢測是否需要下載升級版本。
  4.1 準備一個XML設定檔
  名稱為AutoUpdater.xml,作用是作為一個升級用的模板,顯示需要升級的資訊。
<?xml version="1.0" encoding="gb2312" ?> //xml版本號碼
<AutoUpdater>
<URLAddres URL="http://192.168.198.113/vbroker/log/"/>//升級檔案所在伺服器端的網址

<UpdateInfo>
<UpdateTime Date = "2005-02-02"/> //升級檔案的更新日期
<Version Num = "1.0.0.1"/> //升級檔案的版本號碼
</UpdateInfo>
<UpdateFileList> //升級檔案清單
<UpdateFile FileName = "aa.txt"/> //共有三個檔案需升級
<UpdateFile FileName = "VB40.rar"/>
<UpdateFile FileName = "VB4-1.CAB"/>
</UpdateFileList>
<RestartApp>
<ReStart Allow = "Yes"/> //允許重新啟動應用程式
<AppName Name = "TIMS.exe"/> //啟動的應用程式名稱
</RestartApp>
</AutoUpdater>
  從以上XML文檔中可以得知升級文檔所在伺服器端的地址、升級文檔的更新日期、需要升級的檔案清單,其中共有三個檔案需升級:aa.txt、VB40.rar、VB4-1.CAB。以及是否允許重新啟動應用程式和重新啟動的應用程式名稱。
  4.2 擷取用戶端應用程式及伺服器端升級程式的最近一次更新日期
  4.3 比較日期
用戶端應用程式最近一次更新日期與伺服器端升級程式的最近一次更新日期進行比較。如果前者大於後者,則不更新;如果前者小於後者,則通過動態數組擷取下載檔案的列表,開始下載檔案。
  4.4檢測升級
升級程式檢測舊的主程式是否活動,若活動則關閉舊的主程式;刪除舊的主程式,拷貝臨時檔案夾中的檔案到相應的位置。如果臨時檔案夾下存在與應用程式所在目錄下的檔案同名的檔案,則刪除應用程式目錄下的檔案;檢查主程式的狀態,若狀態為活動的,則啟動新的主程式。
至此,整個系統自動更新完畢,流程簡潔,效能高效,可用於任何前端應用軟體的自動更新。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.