一、實現原理
一般來說Update分為客戶端和服務器端兩個組成部分,客戶端接收服務器上的更新信息,並下載更新文件,然後完成一系列注冊、配置等更新工作,全部自動化,不用人工操作。
根據筆者的經驗,Update程序最好獨立於主程序之外,也就是說有一個單獨的Update.exe程序來執行更新操作,這樣既可以直接更新主程序,也便於完成Update的“自身更新”。
首先,我們遇到的第一個問題是選擇合適的開發工具。一般來說Update的功能並不復雜,只是完成下載更新的功能,所以本文就用VB語言編寫代碼。另外也可以選用一些成熟的Update組件,例如用.NET框架開發的應用程序更新組件AppUpdater等,都可以很方便地幫助我們而只需要編寫極少的代碼。
由於各種Update程序的種類繁多,本文主要介紹通用的一些特性以及適合個人編程、小型公司的Update經濟方案,執行流程如下:
1.下載網站某個頁面,根據頁面內容獲得最新版本號;
2.如果最新版本高於當前版本,則下載升級文件(一般為壓縮包);
3.釋放文件,並用最新文件替換舊文件完成升級。
按照這個最簡化的方案,當開發者需要更新升級軟件的時候,只用FTP上傳更新文件即可。tW.WingWit.cOM好處是可以不必開發服務器端,更不用購買或租用昂貴的升級服務器。
OK,我們現在開始詳細剖析Update的具體執行過程,軟件界面如圖。
二、穿透防火牆
首先,Update要對網絡是否已經連通進行判斷。筆者在這個問題上反復使用過多種方法:Ping某個IP地址、獲取注冊表鍵值、網卡連通判斷等等,最終都不理想。原因在於IP地址可能變化、甚至有時候即使物理連通了,也不一定能夠確保文件的下載更新。
筆者使用的方法是利用Microsoft Internet Con trols控件訪問開發者的官方首頁來判斷網絡是否已經連通。代碼如下:
Dim Network As Long
Private Sub Form_Load()
WebBrowser1.Navigate "http://www.boobsoft.com"
End sub
Private Sub WebBrowser1_DownloadComplete() '當Web頁面載入完畢此事件激活
If Network = 0 Then
Label1.Caption = "正在升級,請稍後..."
Update '調用升級過程
End If
End Sub
Private Sub WebBrowser1_NavigateError(ByVal pDisp As Object, URL As Variant, Frame As Variant, StatusCode As Variant, Cancel As Boolean) '當Web頁面浏覽失敗的時候此事件激活
Network = -1'必需此語句,在Update過程中要判斷網絡是否持續通暢
MsgBox "網絡沒有連通,或升級服務器臨時關閉,請稍後再試。"
End Sub
小經驗:Internet Controls控件的好處不僅是代碼簡單,它是微軟官方控件,更重要的是可以直接穿透防火牆,節省了我們很多時間。
From:http://tw.wingwit.com/Article/Software/201309/339.html