摘要:相對于B/S架構系統來說, C/S架構系統最大的缺點客戶端系統升級工作量大,在客戶端站點較多的情況下,完全采用人工方式升級幾乎是不可能完成的。該文介紹了一種C/S架構下客戶端系統自動升級的方法,并基于.NET技術對其進行實現。
關鍵詞:C/S; .NET;自動升級;構件
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)21-6107-02
Design and Implementation of Auto-update Component for Client/Server Structure System
WANG Qi
(Yuncheng University Department of Computer Science Technology, Yuncheng 044000, China)
Abstract: Update of client is a problem for C/S architecture, warm for Browse/Server architecture System. And client site increased, Update system by full manual is impossible to finish. This article Presents a method for Auto-update of client in C/S architecture, and realized it Using .NET.
Key words: Client/Server; .NET; auto-update; component
隨著企業規模的不斷擴大及企業信息化程度的不斷提高,與企業相關的行業軟件的使用規模也在不斷的擴大,由于行業軟件一般采用C/S架構開發,隨之帶來的軟件維護更新成本也在急劇增長。傳統的軟件升級方法是對每臺客戶端進行人工更新,不僅工作量大,而且容易造成遺漏或錯裝的情況,會給企業的正常業務運行帶來一定影響。設計一套自動升級構件,完成客戶端系統的智能化自動升級勢在必行。[1-2]
1 自動升級構件設計思路及流程分析
1.1 設計思路
筆者一般采用.NET進行項目開發,為了降低項目開發和維護的成本、增強系統的擴展性和安全性等,在項目開發時采用了多層架構開發模式, 在一般的項目中包含如下幾個模塊:
1)公共類庫;2)數據訪問層;3)業務層。
這3個模塊相互配合,共同實現系統功能。其中業務層作為啟動項目,負責主要的業務功能及數據的展示;公共類庫是筆者在做項目過程中積累的一些公共的功能模塊,也就是說一般項目都可能會用到的一些功能模塊;數據訪問層也屬于類庫范疇,主要負責對數據庫的操作。系統經過編譯之后會形成3個最為重要的文件:1)Hemp.Common.dll:該文件為公共類庫編譯之后形成的動態庫;2)Hemp.JJJJ.Data.dll:該文件為數據訪問層編譯之后形成的動態庫;3)某某系統.exe:該文件為業務層編譯之后形成的可執行性文件。
對于一個系統來說,如果要進行客戶端的更新操作,其實主要就是更新這三個文件。
1.2 流程分析
為了完成客戶端系統的自動更新,我們設計如下流程:[3-4]
1)在服務器上開通FTP,用來存放最新的更新程序和程序的更新版本號,為了保證更新程序下載的速度,可以將以上3個文件進行壓縮處理。
2)在客戶端系統登陸時,和服務器端進行版本號的比對,如果服務器端版本號高于客戶端,便進行更新程序的下載,并同時更新客戶端版本號。
3)在更新程序下載到客戶端后,自動調用Rar.exe(解壓軟件),替換相應文件,如果替換成功,自動升級過程即可完成。
4)重新啟動客戶端。流程如圖1所示。
2 自動升級構件設計與實現
按照功能,可以把該構件分成兩部分來設計。
1) 第一部分是嵌入客戶端系統,完成是否有更新版本的檢測工作,并在更新完成后同步客戶端的版本號;核心代碼如下:
Dim boolUp As Boolean = False
‘判斷FTP上是否有更新程序和版本文件
If ftp.FtpFileExists(\"Update.rar\") And ftp.FtpFileExists(\"Update.txt\") Then
If File.Exists(\"Update0.txt\") Then File.Delete(\"Update0.txt\")
‘從FTP上下載版本文件,并重命名為UpDate0.txt
ftp.Download(\"Update.txt\", \"UpDate0.txt\", True)
Dim Int1, Int2 As Integer
‘判斷客戶端是否存在版本文件,如果存在,和UpDate0.txt內容進行比較,如果小于UpDate0.txt內容,'意味存在更新程序,將boolUp置為True,否則將boolUp置為False。
If File.Exists(\"Update1.txt\") Then
Dim sr As New StreamReader(\"Update0.txt\")
Int1 = CInt(sr.ReadLine())
sr.Close()
sr = New StreamReader(\"Update1.txt\")
Int2 = CInt(sr.ReadLine())
sr.Close()
If Int1 > Int2 Then
boolUp = True
End If
Else
boolUp = True
End If
If boolUp Then
lblDateServer.Text = \"正在下載系統更新...\"
Application.DoEvents()
‘下載更新程序壓縮包到客戶端。
ftp.Download(\"Update.rar\", \"Update.rar\", True)
‘啟動系統升級程序。
Process.Start(\"系統升級.exe\")
‘更新客戶端版本號
If File.Exists(\"Update1.txt\") ThenFile.Delete(\"Update1.txt\")
File.Move(\"Update0.txt\", \"Update1.txt\")
Me.Close()
Exit Sub
End If
End If
其中Update.rar為更新程序的壓縮包,Update.txt存放于服務器端,內容為更新程序壓縮包最新的版本號,Update1.txt存放于客戶端,內容為客戶端最新的版本號。當Update1.txt的內容小于Update.txt的內容時,意味著有需要更新的程序。
2) 第二部分是完成更新程序的下載及覆蓋工作。核心代碼如下:
‘刪除前面所說的3個文件。
If File.Exists(\"某某系統.exe\") Then System.IO.File.Delete(\"某某系統.exe\")
If File.Exists(\"Hemp.JJJJ.Data.dll\") Then File.Delete(\"Hemp.JJJJ.Data.dll\")
If File.Exists(\"Hemp.Common.dll\") Then File.Delete(\"Hemp.Common.dll\")
‘啟動解壓軟件,對更新程序壓縮包進行解壓。
Process.Start(\"Rar.exe\", \" x -o+ Update.rar \")
MsgBox(\"系統更新完成,請重新打開系統!\")
Me.Close()
Me.Dispose()
自動升級構件運行界面如圖2所示。
3 結束語
對于C/S架構應用程序來說,自動升級已經成為一個不可或缺的功能,它可以大大簡化系統的維護工作,降低系統的維護成本。另外該構件可以很方便的嵌入第三方系統中,實現系統的自動升起。該構件目前已在筆者開發的多個項目中得到應用,效果良好。
參考文獻:
[1] 劉艷.一種通過數據庫實現版本監測進行自動升級的方法[J].現代計算機,2004(1):97-100.
[2] 杜成龍,鐘立,肖云.NET分布式系統的自動升級設計與實現[J]計算機工程,2007(2):239-240.
[3] 喬俊玲,閆曉婷.信息管理系統客戶端軟件自動升級的實現[J].福建電腦,2007(4).
[4] 郭賢海,詹英.通用自動升級系統的研制與開發[J].計算機時代,2006(2).
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文