自動升級系統中下載文件的若干種方法

引言

 

隨着信息化的快速發展,各種大型的應用系統已經成爲一個現代化企()業必備的工具。客戶機/服務器(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中實現,而且文件傳輸速度快,只是在開發時需要用到OLEOCX等高級技術,而且引用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總結

 

自動升級系統實現文件下載時,採用上述任一種方法不僅可以實現系統中個別模塊的升級,也可以實現整個應用系統的的版本升級,以上各種方法已在實際系統中得到應用與檢驗,具有較強的實用價值。

 

參考文獻

[1] 李玉東,馬琳,等.PowerBuilder8.0對象與控件大全.電子工業出版社.2002

[2] 陳小並等.SQL Server 2000培訓教程.清華大學出版社.2002

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章