引言
隨著資訊化的快速發展,各種大型的應用系統已經成為一個現代化企(事)業必備的工具。客戶機/服務器(C/S)結構的運行模式由于穩定性好、安全性高、運行快速等特點被廣泛應用于各種應用系統中,在基于C/S模式的應用系統中,客戶端程式的升級是一個不可回避的問題,傳統的手工升級作業量大、不可靠,自動升級功能對于整個系統的維護便具有重要意義。
在自動升級系統中,下載檔案是最重要也是最復雜的一個步驟,根據升級檔案存盤方式的不同,可以采用不同的方法將需要升級的檔案下載到客戶端,實作升級。
PowerBuilder作為一種可視化的面向物件的快速開發工具,被大多數開發人員用來進行C/S模式系統的開發,本文論述的方法在PowerBuilder環境下實作,但這些方法也同樣適用于其它開發語言,具有通用性。
1自動升級原理
不同軟體自動升級的原理都是類似的。首先,客戶端程式運行時,得到服務器資料庫中該軟體的最新版本資訊,與客戶端程式當前的版本資訊進行比較,如果兩者一致,則說明當前系統已經是最新的版本了,若服務器端的版本號大于客戶端的版本號,系統會呼叫自動升級程式,自動升級程式先關閉客戶端程式,然后從檔案服務器或資料庫中下載最新檔案,并覆寫舊檔案,實作軟體的自動升級。
2檔案存盤
要實作檔案下載,首先必須將要升級的檔案存盤在特定的位置,根據檔案存盤方式的不同,有不同的下載方法,本文只討論未壓縮檔案的存盤與下載。
2.1共享檔案夾
網路上其他用戶可以使用的另一臺計算機上的檔案夾稱共享檔案夾。共享檔案夾是局域網范圍內實作資源共享的常用方式,檔案夾共享的設定和管理非常方便,將升級檔案存盤在共享檔案夾中,可以為用戶存盤和訪問升級檔案提供一個集中的位置,維護作業量小,但是共享檔案夾的安全性較低。
2.2FTP服務器
FTP是指檔案傳輸協議(File Transfer Protocal),即FTP協議,是一種專門用來傳送檔案的網路協議,簡單地說,支持FTP協議的服務器就是FTP服務器。FTP服務器一般由某些FTP服務器程式建立,這種程式不但可以管理服務器中的檔案,還可以管理登錄服務器的用戶,升級檔案存盤在FTP服務器中,安全性可以得到保證,不過建立和維護服務器需要相關的專業知識和技能。
2.3資料庫
由于現代關系資料庫中的特殊資料型別(例如SQL SERVER 2000中的image資料型別)可以將檔案以二進制流的格式存放在資料庫中,這樣就可以在資料庫中建立一張用來存放升級檔案的表,記錄檔案的資料、修改時間、版本號等資訊,然后通過上傳程式將升級檔案寫入資料庫中。利用資料庫存盤升級檔案,檔案以二進制形式存放不會受到病毒和人為因素的干擾;不過在管理升級檔案時需要單獨撰寫檔案上傳程式,如果升級檔案較多,還會影響資料庫服務器的回應速度。
3檔案下載
3.1批處理檔案
批處理檔案也叫批處理程式,是一個包含若干DOS命令的文本檔案,擴展名為.BAT。批處理檔案是一個可執行程式,執行批處理檔案時,檔案中的一系列命令就會按順序自動執行,利用DOS擴展命令“XCOPY”可以將指定位置的檔案復制到客戶機上。
建立一個批處理檔案,命名為upgrade.bat,在檔案中輸入以下命令:
xcopy \\192.168.2.7\upfile\*.* /s /y
192.168.2.7是存盤升級檔案的計算機IP地址,upfile是該計算機上的共享檔案夾,引數“/s”表示復制目錄和子目錄,“/y”表示禁止提示以確認改寫一個現存目標檔案。在自動升級程式中執行腳本:
run("upgrade.bat")
就可以將共享檔案夾中的檔案復制到批處理檔案所在的目錄。此種方法的優點是簡單易行,實作方便;缺點也很明顯,一是批處理程式運行時,會打開DOS視窗,使界面不夠和諧;二是無法判斷資料傳輸是否成功;三是通常只能在局域網范圍內實作。
3.2映射網路驅動器
在程式開發中,為了使用共享檔案夾中的資源,可以使用映射網路驅動器的方式。映射網路驅動器就是將網路上其他機器的共享檔案夾映射成自己機器上的一個磁盤,這樣可以提高訪問時間。
以Windows98作業系統為例,宣告并呼叫API函式后,就可以建立網路映射驅動器,然后就可以從共享檔案夾中復制需要升級的檔案了。以下是實作腳本(其中變數as_source為需要網路驅動器地址,as_copy是復制檔案目的地址):
//宣告網路映射函式
FUNCTION ulong WNetAddConnection(ref string lpszNetPath,ref string lpszPassword,ref string lpszLocalName) LIBRARY "mpr.dll" ALIAS FOR "WNetAddConnectionA"
Long ll_loops, ll_i //檔案數,回圈次數,回圈變數
Long ll_flen, ll_bytes_read, ll_new_pos //檔案長度,讀取的檔案位元組數,檔案新的位置
Blob lblb_file //復制的檔案
Long ll_filenum,li_file_copy //復制檔案的句柄
// 得到檔案長度,并打開檔案
ll_flen = FileLength(as_source)
ll_FileNum = FileOpen(as_source, StreamMode!, Read!, SHARED! )
// 確定讀取檔案的次數
IF ll_flen > 32765 THEN
IF Mod(ll_flen, 32765) = 0 THEN
ll_loops = ll_flen/32765
ELSE
ll_loops = (ll_flen/32765) + 1
END IF
ELSE
ll_loops = 1
END IF
//讀取檔案
ll_new_pos = 1
li_file_copy = FileOpen(as_copy, StreamMode!, Write!, LockWrite!, Append!)
//開始復制檔案
FOR ll_i = 1 TO ll_loops
ll_bytes_read = FileRead(ll_FileNum, lblb_file )
FileWrite(li_file_copy, lblb_file )
NEXT
//關閉檔案
FileClose(ll_FileNum)
FileClose(li_file_copy)
優點:檔案下載速度快,下載程序可控制;缺點:一般情況下只能在局域網范圍內使用,而且編程時需要呼叫API函式。
3.3FTP控制元件
當升級檔案存盤在FTP服務器上時,只能利用FTP 功能實作檔案下載。由于PowerBuilder8.0本身未提供任何FTP功能,因此要實作FTP傳輸,只能應用PowerBuilder以外的資源。Mabry Internet FTP/X Control是開發中常用的一種FTP控制元件,該控制元件由Mabry Software公司提供,它能完成大部分FTP功能,而且在編程中可以方便地控制程式的運行。
注冊該控制元件后,就可以在程式中加入一個該控制元件的OLE,命名為ole_ftp,屬性設定如表1:
表1 FTP控制元件屬性設定
屬性
設定
說明
Host
192.168.2.8
FTP服務器地址
LogonName
user
登錄名
LogonPassword
12345
登錄口令
Timeout
10
超時設定
檔案下載主要腳本:
//連接FTP服務器
ole_1.object.Connect("user ","12345","")
//將FTP服務器中newver目錄下的主程式檔案下載到當前目錄中
ole_ftp.object.Getfile(" \newver\main.exe "," \main.exe ")
這種下載方式既可以在局域網中實作也可以在Internet中實作,而且檔案傳輸速度快,只是在開發時需要用到OLE,OCX等高級技術,而且參考ftp控制元件還會增加開發成本。
3.4SQL陳述句
當升級檔案存盤在資料庫中時,只能用SQL陳述句進行檔案下載。SQL全稱是“結構化查詢語言(Structured Query Language)”, SQL語言已被確定為關系資料庫系統的國際標準,被絕大多數商品化關系資料庫系統采用。PowerBuilder中提供了一套完整的嵌入式SQL陳述句,利用嵌入式SQL陳述句,可以在程式中靈活地操作資料庫。利用SQL陳述句“SELECTBLOB”可以從資料庫中讀取升級檔案:
SELECTBLOB file_data INTO :lb_file
FROM t_upgradefile
WHERE file_name = :ls_filename;
然后利用檔案讀寫函式將檔案資料寫入磁盤,完成檔案從資料庫的下載。
利用SQL陳述句下載檔案可以全程監控檔案的下載進度,但是代碼撰寫量大,實作復雜,而且下載檔案時,會增加資料庫服務器的負荷,影響服務器的回應速度。
4總結
自動升級系統實作檔案下載時,采用上述任一種方法不僅可以實作系統中個別模塊的升級,也可以實作整個應用系統的的版本升級,以上各種方法已在實際系統中得到應用與檢驗,具有較強的實用價值。
uj5u.com熱心網友回復:
有技術大家分享,哈uj5u.com熱心網友回復:
說的比較全面,但是有點淺了,有待于進一步深入。uj5u.com熱心網友回復:
只是一個原理,具體實作當然要復雜的多。更多內容參閱http://blog.csdn.net/xutong
uj5u.com熱心網友回復:
都pb11 smart client了,不用這了uj5u.com熱心網友回復:
謝謝共享。uj5u.com熱心網友回復:
支持技術分享.uj5u.com熱心網友回復:
markuj5u.com熱心網友回復:
不錯不錯,學習一下。uj5u.com熱心網友回復:
好像沒那么簡單,呵呵.uj5u.com熱心網友回復:
lz要干嘛?uj5u.com熱心網友回復:
支持技術分享轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/110630.html
標籤:數據庫相關
