摘 要:在闡述了軟件在線自動升級的功能特點(diǎn)的基礎(chǔ)上,詳細(xì)地介紹了通用升級程序的設(shè)計以及實(shí)現(xiàn)原理。該系統(tǒng)采用了I/O網(wǎng)絡(luò)模型以及加密技術(shù),能夠自動、及時、準(zhǔn)確地對客戶使用產(chǎn)品進(jìn)行穩(wěn)定的升級。
關(guān)鍵詞:自動升級;多線程; I/O模型
中圖分類號:TP
文獻(xiàn)標(biāo)識碼:A
文章編號:1672-3198(2010)09-0296-01
1 系統(tǒng)特性
1.1 安全性
安全性分為兩個部分,即服務(wù)端安全性和客戶安全性。服務(wù)端安全性主要由服務(wù)主機(jī)安全性決定,由于服務(wù)主機(jī)將存放原始版數(shù)據(jù),因此必須確保本類數(shù)據(jù)不被竊取。
客戶端安全主要防止同一許可證多用及泄露情況。對于同一許可證,為了防止多用戶采用,升級服務(wù)程序?qū)⒉捎靡淮我幻艿姆?wù)方式,即本次升級時將下次升級密鑰進(jìn)行約定,保證每個密鑰只能使用一次。
為了防止泄露情況,對每個客戶端發(fā)送的數(shù)據(jù)將進(jìn)行處理,即在數(shù)據(jù)部分采用對無關(guān)數(shù)據(jù)進(jìn)行水印方式,有效保證每個客戶端所獲得的數(shù)據(jù)功能上無差異,但可以根據(jù)最后生成的樣本等進(jìn)行有效的區(qū)分。
1.2 分離性
分離性主要分為兩部分,即不同產(chǎn)品的分離以及不同用戶等級的分離。不同產(chǎn)品的分離將通過對不同的目錄進(jìn)行區(qū)分來實(shí)現(xiàn),即用戶將首先進(jìn)行驗證,驗證成功后,升級程序根據(jù)數(shù)據(jù)庫保存內(nèi)容,對相應(yīng)的目錄進(jìn)行處理,與用戶通訊并分離。
不同用戶等級的分離原理類似不同產(chǎn)品的分離,有著不同等級的用戶可以針對不同目錄進(jìn)行區(qū)分。
1.3 通用性
通用性主要指升級服務(wù)程序可以對所有產(chǎn)品進(jìn)行升級服務(wù)。這部分功能將由具體設(shè)計進(jìn)行保證,使之適用于所有情況的升級服務(wù)。
2 升級程序的設(shè)計
2.1 服務(wù)器端工作流程
(1)服務(wù)器護(hù)進(jìn)程監(jiān)聽8167端口。
(2)有用戶連接時,創(chuàng)建線程進(jìn)行處理。
(3)進(jìn)行身份驗證,查詢數(shù)據(jù)庫與用戶提供密碼是否一致。
(4)通過驗證后,生成一個新密碼,更新數(shù)據(jù)庫并發(fā)送給用戶(*)。
(5)確認(rèn)用戶產(chǎn)品和身份,尋找對應(yīng)的目錄。
(6)確認(rèn)用戶更新日期。
(7)遍歷目錄下所有的文件,依次發(fā)送文件名(*)。
(8)用戶確認(rèn)是否存在此文件,如否,轉(zhuǎn)(11) (*)。
(9)發(fā)送此文件MD5,用戶確認(rèn)是否一致,如否,轉(zhuǎn)(11) (*)。
(10)轉(zhuǎn)(7)。
(11)發(fā)送此文件內(nèi)容(*)。
(12)轉(zhuǎn)(7)直至文件更新結(jié)束。
(13)更新數(shù)據(jù)庫中用戶相關(guān)信息。
其中,所有帶(*)號的步驟均為DES加密傳送數(shù)據(jù)。
2.2 管理程序的設(shè)計
管理程序主要負(fù)責(zé)進(jìn)行客戶數(shù)據(jù)管理及日志查詢、回溯等功能。
(1)日志查詢。
查詢當(dāng)日日志,本周日志,本月日志。查詢用戶登陸情況。查詢指定用戶名的更新情況。可以查詢指定產(chǎn)品更新情況。
(2)用戶管理。
進(jìn)行用戶添加、刪除、修改管理。手工重置用戶的密碼。
(3)產(chǎn)品管理。
對產(chǎn)品進(jìn)行添加、刪除、發(fā)布時間修改等管理。指定產(chǎn)品對應(yīng)的目錄。
3 升級程序的實(shí)現(xiàn)
3.1 服務(wù)器端的實(shí)現(xiàn)
服務(wù)器端啟用WSAAsyncSelect模型對客戶端的請求進(jìn)行相關(guān)響應(yīng),接收FD_ACCEPT連接通知,代碼如下:
WSAAsyncSelect(Listen,m_hWnd,WM_SOCKET,F(xiàn)D_ACCEPT | FD_CLOSE);
其中Listen為服務(wù)器端套接字。接收到連接請求后,服務(wù)器端相關(guān)消息響應(yīng)代碼如下:
LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch( message )
{
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
Accept = ::accept(wParam, (struct sockaddr*)clientAddr, clientlen);
WSAAsyncSelect(Accept, this->GetSafeHwnd(), WM_SOCKET, FD_READ | FD_WRITE | FD_CLOSE);
break;
case FD_READ:
DWORD threadid;
HANDLE handle;
handle = CreateThread(NULL, 5000000, ThreadProc, (LPVOID)threadtemp, NULL, threadid );
CloseHandle( handle );
break;
}
}
接收到客戶端請求,開啟FD_READ, FD_WRITE,客戶端傳送數(shù)據(jù)過來時,接收到FD_READ通知,開啟線程ThreadProc,與客戶端進(jìn)行數(shù)據(jù)驗證及交互。
3.1.1 版本比較
為了確實(shí)軟件產(chǎn)品是否需要更新,服務(wù)器端需要接收客戶端發(fā)送的升級信息。本程序?qū)⑾到y(tǒng)當(dāng)前版本的信息以一定的格式寫入文件,存放于升級服務(wù)器中。同時客戶端也存在相同類型的文件以記錄客戶端的版本信息。當(dāng)客戶端連接到升級服務(wù)器以后,首先將客戶端升級信息發(fā)送到服務(wù)器端,與服務(wù)器端的版本信息進(jìn)行比較,然后分析出當(dāng)前版本是否需要升級。
3.1.2 數(shù)據(jù)傳輸?shù)陌踩元?/p>
為了保證服務(wù)器端相關(guān)程序不被竊取,本程序采用了一次一密的加密方式,即當(dāng)用戶第一次更新時,會發(fā)送公司指定的用戶名密碼至服務(wù)器,此時客戶端程序同時會獲取用戶所用機(jī)器的硬件數(shù)據(jù)(機(jī)器特征值),發(fā)送到服務(wù)器端。用戶再次需要升級時,會驗證用戶名密碼以及機(jī)器的特征是否正確后才能完成升級服務(wù)。每次用戶提交給服務(wù)器的驗證結(jié)構(gòu)體如下定義:
typedef struct UserInfo
{
char username[100];//用戶名
char password[100];//用戶密碼
char product[20];//更新的項目ID
char machineMD5[50];//用戶PC的唯一標(biāo)識
}USERINFO,*LPUSERINFO;
machineMD5為獲取客戶機(jī)相關(guān)硬件特征值。
對于文件數(shù)據(jù)的傳輸,為避免數(shù)據(jù)泄露,均在客戶采用DES加密后進(jìn)行傳送,服務(wù)器端收到數(shù)據(jù)解密后寫文件。
3.1.3 獲取更新文件列表
客戶端將產(chǎn)品路徑中的文件中各文件信息發(fā)送到客戶端,每個文件的結(jié)構(gòu)體定義如下:
typedef struct List
{
char filepath[260];//文件的相對路徑
char md5hash[50];//文件的md5值
}FILELIST,*LPFILELIST;
md5hash變量取文件的md5值,客戶端產(chǎn)品路徑中的各文件的路徑及md5值與服務(wù)器端的此結(jié)構(gòu)體數(shù)組進(jìn)行比較,由于相同的文件具有相同的md5值,得出需要更新的文件信息。
3.2 客戶端的實(shí)現(xiàn)
客戶端是獨(dú)立于產(chǎn)品的工具,默認(rèn)設(shè)置為開機(jī)自動運(yùn)行的,也可以進(jìn)行手動升級。如服務(wù)器開啟,客戶端連接升級服務(wù)器,并將升級服務(wù)器的版本文件與本機(jī)的版本文件相比較,若有新版本,則將服務(wù)器傳送的文件下載到本地臨時目錄下,再進(jìn)行升級安裝。如果不需要升級,則提示后自行退出。升級服務(wù)器支持端點(diǎn)續(xù)傳功能,在客戶端下
載時,將下載文件和服務(wù)器端的文件進(jìn)行大小比較,對余下的數(shù)據(jù)進(jìn)行傳送。
參考文獻(xiàn)
[1]劉偉,耿英三.軟件自動升級系統(tǒng)的研制與開發(fā)[J].計算機(jī)工程與應(yīng)用,2002,(15).
[2]李青森,何丕廉,董旭源.軟件系統(tǒng)版本自動更新功能的設(shè)計和實(shí)現(xiàn)[J].微處理機(jī),2004,(1) .