<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    rochoc

    關(guān)于java、cobol、zos

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      6 Posts :: 1 Stories :: 21 Comments :: 0 Trackbacks

    前段時(shí)間做了一個(gè)工具發(fā)布給公司的各部門使用后反饋了不少BUG,每次修改后均需要發(fā)郵件通知各用戶替換最新版本,很不方便,因此后來就寫了一個(gè)自動(dòng)升級(jí)的功能,這樣每次發(fā)布新的版本時(shí)只需要將其部署到自動(dòng)升級(jí)服務(wù)器上,工具使用用戶運(yùn)行工具時(shí)就會(huì)連接到自動(dòng)升級(jí)服務(wù)器,檢查是否有版本更新,如果有則完成更新后再運(yùn)行最新版本,否則就運(yùn)行當(dāng)前工具版本。
         為了使這個(gè)自動(dòng)升級(jí)模塊具有通用性,我將其做成可以單獨(dú)運(yùn)行的程序,而并非集成到工具中,這樣則可以為各類軟件提供自動(dòng)升級(jí)的功能。自動(dòng)升級(jí)模塊采用SOCKET方式實(shí)現(xiàn)升級(jí)客戶端與服務(wù)端的交互,通過版本控制文件autoupdate.xml來控制版本的更新,完成自動(dòng)更新后會(huì)將歷史清單history.htm也發(fā)送給客戶端,并自動(dòng)打開該文件,使用戶可以對(duì)本次升級(jí)的具體內(nèi)容一目了然。

    詳細(xì)實(shí)現(xiàn):
    autoupdate.xml具體內(nèi)容:

     1<?xml version="1.0" encoding="GBK"?>
     2<Info>
     3  <Version>1.0.3</Version>
     4  <UpdateServer>
     5    <Ip>122.2.14.212</Ip>
     6    <Port>2110</Port>
     7  </UpdateServer>
     8  <Files>     
     9    <File> 
    10      <Name>mftest.jar</Name>  
    11      <Path>.\bin</Path>
    12      <SubVer>1.0.0.3</SubVer> 
    13    </File>
    14    <File> 
    15      <Name>run.bat</Name>  
    16      <Path>.</Path>
    17      <SubVer>1.0.0.3</SubVer> 
    18    </File>
    19    <File> 
    20      <Name>eglreco.fix</Name>  
    21      <Path>.\config\resource</Path>
    22      <SubVer>1.0.0.0</SubVer> 
    23    </File> 
    24    <File> 
    25      <Name>eglrec.fix</Name>  
    26      <Path>.\config\resource</Path>
    27      <SubVer>1.0.0.0</SubVer> 
    28    </File>
    29    <File> 
    30      <Name>dom4j-1.6.1.jar</Name>  
    31      <Path>.\lib</Path>
    32      <SubVer>1.0.0.0</SubVer> 
    33    </File>
    34    <File> 
    35      <Name>jaxen-1.1-beta-4.jar</Name>  
    36      <Path>.\lib</Path>
    37      <SubVer>1.0.0.0</SubVer> 
    38    </File>
    39    <File> 
    40      <Name>jxl.jar</Name>  
    41      <Path>.\lib</Path>
    42      <SubVer>1.0.0.0</SubVer> 
    43    </File>    
    44  </Files> 
    45</Info>
         其中UpdateServer用戶描述服務(wù)端的IP和端口;Version為軟件的大版本號(hào),F(xiàn)iles為軟件涉及到的文件,其中的SubVer為具體文件的版本號(hào),其他就顧名思義了。

    history.htm具體內(nèi)容:
     1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     2<html>
     3<head>
     4<title>XXX軟件更新歷史</title>
     5<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
     6<style type="text/css">
     7    BODY,TABLE {
     8FONT-SIZE: 12px;
     9COLOR: #666666;
    10FONT-FAMILY:  宋體;
    11background-color: #ffffff; 
    12line-height: 160%;}

    13    
    </style>
    14</head>
    15
    16<body>
    17<table width="600" border="1" align="center" cellpadding="2" cellspacing="0">
    18  <tr bgcolor="#ECECEC"> 
    19    <td align="center" width=50>版本</td>
    20    <td align="center" width=470>更新內(nèi)容</td>
    21    <td align="center" width=80>日期</td>
    22  </tr>
    23  <tr> 
    24    <td  align="center" >1.0.3</td>
    25    <td ><p>1.實(shí)現(xiàn)自動(dòng)升級(jí)功能<br>
    26              2.增加版本號(hào)顯示<br>              
    27              3.修正.<br>
    28          </p>
    29      </td>
    30    <td align="center" >2008-12-25</td>
    31  </tr>
    32  <tr> 
    33    <td  align="center" >1.0.2</td>
    34    <td ><p>1.修正了等字符而無法正確生成的錯(cuò)誤<br>
    35              2.修正了無法生成的錯(cuò)誤<br>
    36          </p>
    37      </td>
    38    <td align="center" >2008-12-20</td>
    39  </tr>
    40<tr> 
    41    <td  align="center" >1.0.1</td>
    42    <td ><p>1.增加通過<br>
    43              2.修正因?yàn)?img alt="" src="http://www.tkk7.com/Images/dot.gif" />的錯(cuò)誤<br>
    44          </p>
    45      </td>
    46    <td align="center" >2008-12-15</td>
    47  </tr>
    48<tr> 
    49    <td  align="center" >1.0.0</td>
    50    <td ><p>1.實(shí)現(xiàn)通過.功能<br>
    51         2.實(shí)現(xiàn)通過.功能<br>
    52          </p>
    53      </td>
    54    <td align="center" >2008-12-11</td>
    55  </tr>
    56</table>
    57</body>
    58</html>

    工作原理:
    自動(dòng)升級(jí)客戶端首先會(huì)將本地的autoupdate.xml內(nèi)容發(fā)送給服務(wù)端,服務(wù)端收到客戶端的版本信息后與服務(wù)端本地的版本信息(autoupdate.xml)進(jìn)行比較,首先比較Version,如果一致則通知客戶端無需更新,如果不一致則檢查Files中各文件的SubVer,服務(wù)端將SubVer不一致的文件發(fā)送給客戶端,對(duì)于服務(wù)端有而客戶端沒有的文件也需要發(fā)送給客戶端,處理完所有File后,服務(wù)端將本地的history.htm與傳送給客戶端,并通知客戶端更新完畢;客戶端收到更新完畢后的應(yīng)答后自動(dòng)打開history.htm,將更新歷史信息顯示給用戶查看。
    posted on 2009-01-04 21:55 rochoc 閱讀(6833) 評(píng)論(18)  編輯  收藏

    Feedback

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-01-05 09:03 HiMagic!
    如果可使用http protocol會(huì)簡(jiǎn)單些,使用request parameter可以省去傳文件,比文件  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-01-05 21:39 rochoc
    @HiMagic!
    但是使用http的話服務(wù)端要使用http服務(wù)器,這個(gè)弄起來比較麻煩,其實(shí)用socket根據(jù)自定義的協(xié)議來交互也是很爽的,響應(yīng)快效率高:)   回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-01-10 09:32 日月雨林@gmail.com
    不錯(cuò)!謝謝你,讓我學(xué)到了很多東西!  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一)[未登錄] 2009-01-10 10:08 Matthew Chen
    @ochoc
    但是用http的話放個(gè)xml文件和若干個(gè)程序文件在網(wǎng)站上,可以把更新的整個(gè)任務(wù)都拉到客戶端來做。socket更新通訊協(xié)議一改變意味著服務(wù)器和客戶端都要修改,而放在靜態(tài)網(wǎng)站上的xml內(nèi)容可以相對(duì)固定地存在。

    最好提供在任何情況的更新失效之后提示手動(dòng)下載,不僅是針對(duì)網(wǎng)絡(luò)失敗等的原因,更是為了應(yīng)對(duì)暫時(shí)沒有考慮到會(huì)出現(xiàn)的問題。  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-01-11 09:04 HiMagic!
    @ochoc
    Matthew Chen的意見很正確,CS的弊病不是在于兩端都要改,因?yàn)锽S往往也要兩端改,而是兩端要深度的改,就像這篇文章的后續(xù)一樣,太多的代碼了。JDK6已經(jīng)帶有內(nèi)嵌的HTTP Server了,對(duì)于這樣的需求足夠了,不用額外部署HTTP。  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-01-11 12:38 車夫
    感覺非常不錯(cuò),不過還有一個(gè)問題:
    怎么更新應(yīng)用的主程序?
    是執(zhí)行你當(dāng)前應(yīng)用的時(shí)候,來調(diào)用升級(jí)客戶端嗎?怎么觸發(fā)的升級(jí)?當(dāng)主程序執(zhí)行的時(shí)候,更新主程序肯定會(huì)更新失敗吧。

    我理解沒錯(cuò)的話,可能就需要建立更新專用的臨時(shí)目錄,要更新的文件放在臨時(shí)目錄中,再用更新客戶端關(guān)閉主程序,更新客戶端再替換文件。


      回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-01-12 19:45 rochoc
    @車夫

    這個(gè)有兩種做法,一種是再增加一個(gè)殼程序,里面先執(zhí)行更新,然后再調(diào)用要運(yùn)行的程序;

    還有一種做法是寫一個(gè)bat或sh,選執(zhí)行更新,然后再執(zhí)行要運(yùn)行的程序;

    我現(xiàn)在是采用后一種方法,如:
    java -cp ./bin/autoupdate.jar;./lib/jaxen-1.1-beta-4.jar;./lib/dom4j-1.6.1.jar; com.icbc.autoupdate.AutoUpdateClient
    javaw -cp ./bin/mftest.jar;./bin/autoupdate.jar;./lib/jaxen-1.1-beta-4.jar;./lib/dom4j-1.6.1.jar;./lib/jxl.jar; com.icbc.mf.ui.MainFrameUI >mftest.log&
      回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一)[未登錄] 2009-01-16 09:51 Matthew Chen
    @rochoc
    你在客戶端用的是純粹的java項(xiàng)目吧,我目前用的是eclipse RCP product,不包括ui的組件,可能6M多,更新方式是下載新的版本的jar,放在plugins目錄下,重啟它會(huì)自動(dòng)使用更新版本的jar,然后清除舊的就可以了。

    哦,當(dāng)然我用到是SWT.  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-01-18 19:35 rochoc
    @Matthew Chen
    對(duì),我這個(gè)是純JAVA項(xiàng)目  回復(fù)  更多評(píng)論
      

    # 關(guān)于你代碼在LINUX下出現(xiàn)的錯(cuò)誤 2009-03-03 18:50 lmlm3000
    非常感謝你提供的源碼,但我發(fā)現(xiàn)在LINUX下運(yùn)行服務(wù)器端的時(shí)候,會(huì)出現(xiàn)Sring字符越界的情況,啥原因呢  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-03-05 20:08 rochoc
    能否提供一下報(bào)錯(cuò)的詳細(xì)內(nèi)容,謝謝!  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-03-05 20:08 rochoc
    @lmlm3000
    能否提供一下報(bào)錯(cuò)的詳細(xì)內(nèi)容,謝謝!   回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-03-06 08:59 lmlm3000
    出錯(cuò)的情況只有在LINUX做服務(wù)器的情況下才出現(xiàn),windows做服務(wù)器沒有問題出現(xiàn)。
    客戶端能接受文件全路徑(其中有個(gè)LINUX和Windows文件分割符問題沒處理好,我改了下),下面是客戶端的錯(cuò)誤
    2009-03-06 08:51:01->>ty1.yonix.cn/123.175.89.169:讀取數(shù)據(jù)頭部失敗
    2009-03-06 08:51:01->>更新文件:D:\workspace\new_win1\.\easydo.jar失敗
    2009-03-06 08:51:01->>非期望標(biāo)識(shí)位,48
    2009-03-06 08:51:01->>自動(dòng)升級(jí)處理完畢
    在源碼出錯(cuò)的部分是:
    //讀取數(shù)據(jù)長(zhǎng)度
    if(flagb[0]==AUPD.MARK_DATA_SECT)
    {
    len = socketIn.read(lenb, 0, 4);
    if (len != 4)
    {
    Config.print(socket.getInetAddress() + ":讀取數(shù)據(jù)頭部失敗");
    break;
    }
    }
    其中l(wèi)en讀取變成了1或者3,而不是4;該錯(cuò)誤只有在程序下載自己生成的可執(zhí)行的jar包才出問題
    如果要詳細(xì)溝通的話加我qq93327938;我對(duì)這個(gè)問題出現(xiàn)也很感興趣  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-03-06 09:02 lmlm3000
    關(guān)注下HttpComponents,用該包的話,使用request,header非常方便  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-03-06 22:17 rochoc
    @ lmlm3000
    因?yàn)榧依餂]有LINUX系統(tǒng),我周一去公司試一下,看能否解決  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-03-10 20:25 rochoc
    @ lmlm3000
    下面把我已經(jīng)在Linux上測(cè)試通過的代碼放上來  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2009-03-10 21:16 rochoc
    http://www.tkk7.com/Files/rochoc/Linux.zip  回復(fù)  更多評(píng)論
      

    # re: CS結(jié)構(gòu)軟件自動(dòng)升級(jí)實(shí)現(xiàn)(一) 2010-03-29 16:23 qupdater
    http://www.qupdater.com

    QUpdater是一個(gè)免費(fèi)的自動(dòng)升級(jí)程序。
    -為您的軟件集成穩(wěn)定/高效的自動(dòng)升級(jí)功能,是我們的宗旨。
    -四步完成升級(jí)工作:檢查新版本,下載解壓到臨時(shí)目錄,檢查本地文件,拷貝到工作目錄。
    -無需特別的服務(wù)器,普通的Web服務(wù)即可,如IIS、Tomcat等。
    -QUpdater不關(guān)心您的軟件升級(jí)過程,無論用戶使用的是1.0/2,0什么的,直接對(duì)比分析用戶使用的版本和最新版。
    -服務(wù)器部署最新版的軟件文件(壓縮/不壓縮都均可),QUpdater對(duì)比分析服務(wù)器和客戶的軟件文件,不同就更新。
    -可以刪除不再使用的軟件文件。
    -可以更新運(yùn)行中的dll/exe,先備份再更新。
    -您不用關(guān)心QUpdater自身的升級(jí)、他自己能做好這一切。
    -多線程下載,并校驗(yàn)文件,不成功則多次嘗試。
    -自動(dòng)升級(jí)核心程序qupdater.exe是用VC編寫的,不依賴任何類庫,穩(wěn)定/高效。
    -提供有專門的批量文件壓縮工具,支持拖拽、導(dǎo)入剪切板中的文件。

    請(qǐng)把更多的精力放在您的業(yè)務(wù)上吧!自動(dòng)升級(jí),這么點(diǎn)小功能,自己做值嗎?自己做穩(wěn)定嗎?
    -QUpdater可以免費(fèi)使用,最超值的服務(wù),也不過是中上端工程師半個(gè)月的工資,再優(yōu)秀的工程師,做得這么專業(yè),也得好幾個(gè)月吧。
    -有了自動(dòng)升級(jí),您的軟件,不再是斷線的風(fēng)箏!
    -有了自動(dòng)升級(jí),您也可以牽著用戶的鼻子走!
    -有了自動(dòng)升級(jí),您將不再害怕盜版!
    -有了自動(dòng)升級(jí),您的用戶可以享受超值服務(wù)。
    -周宏偉說,小版本成就大軟件,是360安全衛(wèi)士成功的秘籍,秘籍是什么?——自動(dòng)升級(jí)。

    http://www.qupdater.com
      回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲av永久无码精品表情包| 野花高清在线观看免费3中文 | 人妻仑乱A级毛片免费看| 四虎在线免费播放| 一本色道久久88亚洲精品综合| 免费福利在线播放| 亚洲一级毛片在线播放| 久久亚洲精品视频| 日本不卡免费新一区二区三区| 黄色成人免费网站| 亚洲精品综合久久中文字幕| **一级毛片免费完整视| 亚洲色偷偷色噜噜狠狠99| 国产成人免费永久播放视频平台| 国产亚洲精彩视频| 亚洲日韩国产精品第一页一区| 人人揉揉香蕉大免费不卡| 亚洲精品成人久久| 特级淫片国产免费高清视频| 爱情岛论坛免费视频| 亚洲精品制服丝袜四区| 久久免费观看国产精品| 亚洲人妖女同在线播放| 国产黄色片在线免费观看| 亚洲国产日韩一区高清在线 | 岛国片在线免费观看| 国产亚洲视频在线播放大全| 精品国产亚洲男女在线线电影 | 国产精品亚洲va在线观看| 亚洲码国产精品高潮在线| 18禁男女爽爽爽午夜网站免费| 亚洲AV永久无码精品一福利| 国产亚洲精品拍拍拍拍拍| 亚洲免费一级视频| v片免费在线观看| 亚洲白色白色永久观看| 国产成人免费a在线资源| 久久精品视频免费看| 婷婷国产偷v国产偷v亚洲| 亚洲一区二区在线视频| 四虎影视精品永久免费网站|