国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種軟件自動(dòng)更新方法

2012-04-29 02:31:34趙宏偉孫永清崔宇寅
電腦知識(shí)與技術(shù) 2012年1期
關(guān)鍵詞:客戶端服務(wù)器

趙宏偉 孫永清 崔宇寅

摘要:探討軟件不可避免的軟件版本更新問(wèn)題。設(shè)計(jì)的自動(dòng)更新方法從網(wǎng)絡(luò)上自動(dòng)下載新版本保存到本地,然后根據(jù)用戶需求,進(jìn)行軟件自動(dòng)更新。在設(shè)計(jì)過(guò)程中,充分考慮了各種原因?qū)е碌能浖率?,并采用了?yīng)對(duì)辦法,大大提高了自動(dòng)更新方法的通用性。

關(guān)鍵詞:自動(dòng)更新;功能更新;版本更新;客戶端/服務(wù)器;XML

中圖分類號(hào):TP319文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)01-0074-03

A Method of Software Upgrade Automatically

ZHAO Hong-wei, SUN Yong-qing, CUI Yu-yin

(Key Laboratory of Ministry of Public Security Information Network Security, Shanghai 201204, China)

Abstract: This paper discusses how to update the software to the new version that we can not avoid encountering this problem. The designed method of the automatic update automatically downloads the new version from the network, then according to usersneeds, the software is automatically updated. In the design process, the various causes of failure of software updates had been taken into account, and many responses were used. Through the practice above, this method was enhanced versatility.

Key words: auto-update; functional upgrades; version upgrades; client/server; XML

全球幾乎每個(gè)時(shí)刻都有新的軟件誕生,不管是大型軟件還是小型應(yīng)用程序,就算設(shè)計(jì)得非常完美,也不可能沒(méi)有BUG或者不需要進(jìn)行擴(kuò)展。那么當(dāng)發(fā)布出去的軟件出現(xiàn)問(wèn)題或者有新功能需要更新怎么辦呢,一個(gè)常見(jiàn)的辦法就是進(jìn)行更新。一種做法是由用戶自己去下載最新版本發(fā)布,但是這種做法不僅給用戶帶來(lái)了不便,也常常因?yàn)橛脩粑茨芗皶r(shí)更新造成安全隱患。因此,隨著互聯(lián)網(wǎng)的普及,另一種軟件更新方法隨之產(chǎn)生,就是軟件自動(dòng)更新,而且有越來(lái)越多的軟件采用了這種自動(dòng)更新的方法。自動(dòng)更新技術(shù)不僅簡(jiǎn)化了用戶操作,也能讓軟件中的各種GUB得到快速修復(fù),同時(shí)軟件中增加的內(nèi)容能夠盡快展現(xiàn)在用戶面前。

更新程序一般采用客戶端服務(wù)器模式,由于軟件客戶端所使用的語(yǔ)言、所運(yùn)行的環(huán)境、以及其他方面的差異,在實(shí)際實(shí)現(xiàn)時(shí),往往面臨了各種困難,如需要用戶反復(fù)重啟或者用戶手動(dòng)關(guān)閉客戶端軟件等等。如何設(shè)計(jì)一種通用的軟件自動(dòng)升級(jí)方法,在不需要用戶干預(yù)的情況的實(shí)現(xiàn)軟件自動(dòng)更新成為一個(gè)需要探討的課題。

本文設(shè)計(jì)了一種更為通用的軟件更新方法,可以在客戶端軟件運(yùn)行自動(dòng)進(jìn)行更新,更新過(guò)程中不需要退出客戶端軟件。對(duì)用戶而言,整個(gè)升級(jí)過(guò)程是完全透明的,同時(shí),考慮到可移植性,本文設(shè)計(jì)的方法能夠使用多種語(yǔ)言實(shí)現(xiàn)。

1自動(dòng)更新方法實(shí)現(xiàn)

1.1方法模型

自動(dòng)更新是軟件的一項(xiàng)重要功能,實(shí)現(xiàn)起來(lái)之所以復(fù)雜是因?yàn)樵谲浖逻^(guò)程中存在著各種不確定的因素,如下載新版本失敗、客戶端程序被占用等等。針對(duì)這些問(wèn)題,本文設(shè)計(jì)了的軟件自動(dòng)更新方法吸收了Windows操作系統(tǒng)升級(jí)的做法,在軟件被占用時(shí)記住狀態(tài),等待操作系統(tǒng)重新啟動(dòng)后,頁(yè)面文件被創(chuàng)建前,此時(shí)用戶還沒(méi)有完全進(jìn)入操作系統(tǒng),而且需要更新的軟件也沒(méi)有啟動(dòng)起來(lái)。這個(gè)方法的自動(dòng)更新模型如圖1所示。

在這個(gè)模型里,軟件正常運(yùn)行后,首先進(jìn)行版本檢測(cè),當(dāng)服務(wù)器版本高于當(dāng)前運(yùn)行的版本時(shí),就下載新版本到本地,下載完成后記錄狀態(tài)。當(dāng)用戶手動(dòng)升級(jí)軟件或者操作系統(tǒng)重啟后,更新軟件,完成更新后軟件繼續(xù)正常運(yùn)行。這樣就完成了一次軟件的更新,在實(shí)際實(shí)現(xiàn)中,本文將執(zhí)行更新功能的模塊獨(dú)立出來(lái),做成一個(gè)Update程序,同時(shí)為了表述方便需要更新的軟件稱為L(zhǎng)oader程序,Loader程序啟動(dòng)自動(dòng)更新的程序,可以是軟件的主程序,也可以是其他程序。

1.2方法實(shí)現(xiàn)過(guò)程

根據(jù)圖1中的描述,本文的軟件自動(dòng)更新方法是一個(gè)具有一定周期的循環(huán)過(guò)程,一次周期的具體實(shí)現(xiàn)過(guò)程如下:

1) Loader程序啟動(dòng)Update程序。

2) Update程序發(fā)現(xiàn)新版本,根據(jù)Update文件夾下的包名和sha1值判斷是否已經(jīng)下載,如果沒(méi)下載,從服務(wù)器下載新文件包到update文件夾下。

3) Update程序的提醒線程彈出對(duì)話框提醒用戶有新版本需要更新,如果用戶點(diǎn)擊[是]開(kāi)始更新,[否]休眠10分鐘再提醒,如果用戶一直不同意更新,則在操作系統(tǒng)下次啟動(dòng)后自動(dòng)更新。

4)用戶選擇更新后Update程序開(kāi)始更新工作;

5)更新時(shí)候首先判斷注冊(cè)表更新步驟鍵值是否為2,如果是2表明前期已經(jīng)備份完畢跳過(guò)備份步驟直接更新文件,否則創(chuàng)建backup文件夾,根據(jù)配置文件先將需要更新的文件移動(dòng)到backup文件夾中作為更新失敗恢復(fù)??截愅戤呅薷淖?cè)表更新步驟鍵值為2,然后將update文件夾中的文件根據(jù)更新配置文件解壓到相應(yīng)位置覆蓋原有文件,如果備份或者更新途中失敗,那么將備份文件夾中的文件重新拷貝出來(lái)還原版本,提示用戶重啟操作系統(tǒng)更新。更新完成后刪除update、backup文件夾,刪除注冊(cè)表更新配置腳本將更新步驟鍵值設(shè)為0。

6)更新成功后啟動(dòng)loader程序。

1.3 Loader與Update的啟動(dòng)與交互

Loader程序通常是由用戶手動(dòng)運(yùn)行或者跟隨操作系統(tǒng)啟動(dòng)起來(lái)的,Loader程序運(yùn)行后自動(dòng)啟動(dòng)Update程序,Update程序首先判斷用戶是否可以聯(lián)網(wǎng),這個(gè)功能可以有很多種實(shí)現(xiàn)方法,比如可以ping某個(gè)網(wǎng)站或者直接連接更新服務(wù)器。如果客戶機(jī)可以聯(lián)網(wǎng),那么從服務(wù)器下載更新配置文件來(lái)本地,通過(guò)更新配置文件中的信息來(lái)確定本地系統(tǒng)中的軟件是否需要更新。

Loader啟動(dòng)后不僅啟動(dòng)了Update進(jìn)程,而且啟動(dòng)了一個(gè)監(jiān)聽(tīng)線程,該監(jiān)聽(tīng)線程設(shè)置了一個(gè)信號(hào),接收異步事件,等待Update進(jìn)程的事件通知,Loader進(jìn)程在沒(méi)有事件通知前一直做著自己的事務(wù),如圖2所示。當(dāng)Update進(jìn)程檢查到有新版本后,設(shè)置升級(jí)事件,通知Loader進(jìn)程做相應(yīng)的升級(jí)前的準(zhǔn)備工作,自己則進(jìn)入等待狀態(tài)。當(dāng)Loader進(jìn)程完成準(zhǔn)備工作后,就告訴Update進(jìn)程已準(zhǔn)備完畢,然后Update進(jìn)程就啟動(dòng)更新線程進(jìn)行實(shí)質(zhì)性的軟件更新了。

在這個(gè)交互過(guò)程中,Loader進(jìn)程接到升級(jí)事件通知啟動(dòng)后通常提示用戶重新啟動(dòng)操作系統(tǒng),如果用戶同意,Loader進(jìn)程則進(jìn)行準(zhǔn)備工作,需要準(zhǔn)備的工作包括中斷現(xiàn)有所有事務(wù)、保存現(xiàn)有各種狀態(tài)等。如果用戶不同意立即更新,則記錄狀態(tài),下次操作系統(tǒng)重啟時(shí)自動(dòng)更新Loader程序。

1.4 Update進(jìn)程實(shí)現(xiàn)

在Update進(jìn)程實(shí)現(xiàn)過(guò)程中,有2個(gè)發(fā)揮重要作用的線程,一個(gè)是下載線程,另一個(gè)是更新線程。因此Update進(jìn)程重點(diǎn)就是對(duì)這2個(gè)線程的實(shí)現(xiàn)。

1.4.1下載線程

下載線程的作用是檢查并下載新版本,其實(shí)現(xiàn)流程如圖3所示,其步驟如下:

1)下載線程首先先檢查是否有上次沒(méi)更新的配置信息,如果有先更新;下載線程通過(guò)讀取配置文件,與本地程序的版本信息進(jìn)行比較,獲知新版本軟件是否已下載或已備份。

2)如果新版本已下載,則提示用戶進(jìn)行軟件更新。

3)如果新版本已備份,則直接通知啟動(dòng)更新線程進(jìn)行軟件更新。

4)如果既沒(méi)有下載新版本,又沒(méi)有備份,就根據(jù)配置信息的url鏈接地址從服務(wù)器下載新文件到update文件夾。下載的文件均為單個(gè)的zip壓縮包,下載完畢根據(jù)SHA1判斷文件完整性,如果SHA1校驗(yàn)失敗,重新下載,重試3次失敗暫停更新。與本地軟件進(jìn)行版本比對(duì)后,確定是否有新版本;

5)如果有新版本則創(chuàng)建Update文件夾,并下載需要更新的文件;

6)為了保證下載的軟件沒(méi)有被惡意篡改過(guò),需要檢查文件SHA1值;7)然后提示用戶更新,并通知啟動(dòng)更新線程。

1.4.2更新線程

更新線程的作用是實(shí)現(xiàn)軟件版本的更新升級(jí),包含了2種情況,一種是用戶同意更新,更新線程就關(guān)閉Loader程序后進(jìn)行更新,另一種是用戶不同意立即更新,更新線程則設(shè)置為操作系統(tǒng)重新啟動(dòng)后進(jìn)行更新,其流程如圖4所示。

更新線程的執(zhí)行步驟如下:

1)更新線程首先讀取的配置信息,根據(jù)配置文件確定新版本是否已下載或已備份。

2)如果已有新版本下載,則根據(jù)配置文件進(jìn)行軟件更新,更新失敗說(shuō)明軟件被占用或者其它原因,此時(shí)可能需要重新啟動(dòng)操作系統(tǒng)。3)如果更新成功,則在配置文件中修改更新步驟為0,表示回到初始狀態(tài)。4)如果沒(méi)有新版本被下載,但是備份文件夾中有新版本,則根據(jù)配置進(jìn)行更新。

5)當(dāng)更新成功后,啟動(dòng)Loader進(jìn)程。

2更新配置文件和備份配置文件格式

本方法中涉及的更新配置文件和備份配置文件均采用XML格式,以提高通用性及可讀性,配置文件格式如下。

2.1配置文件

update0001.zip21212231

/lib/socket.dll63adfadsfeabd7a7c7a7779543

update0002.zip4129821

/lib/demo.dll7d7a3b2135bbdccd7a7c7a77793

update0003.exe44223456

/loader.exe135bbdccd7a7c77d7a8d7f66b543b2

2.2備份文件格式

backup0001.bak/lib/socket.dll

backup0002.bak/lib/demo.dll

backup0003.bak/loader.exe

猜你喜歡
客戶端服務(wù)器
通信控制服務(wù)器(CCS)維護(hù)終端的設(shè)計(jì)與實(shí)現(xiàn)
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
得形忘意的服務(wù)器標(biāo)準(zhǔn)
計(jì)算機(jī)網(wǎng)絡(luò)安全服務(wù)器入侵與防御
客戶端空間數(shù)據(jù)緩存策略
積分刷刷刷-FTP服務(wù)器篇
布拖县| 巴马| 盘山县| 遂昌县| 布尔津县| 三原县| 德州市| 寻乌县| 河曲县| 格尔木市| 巨野县| 海淀区| 西林县| 临猗县| 集贤县| 潍坊市| 南丹县| 略阳县| 绍兴县| 芦溪县| 衡阳县| 绥宁县| 政和县| 闻喜县| 马龙县| 厦门市| 西宁市| 绥宁县| 平乡县| 四川省| 庐江县| 边坝县| 长宁区| 永川市| 巴里| 惠安县| 土默特左旗| 罗平县| 巧家县| 普兰县| 阆中市|