CS结构软件自动升级实现(一)

来源:岁月联盟 编辑:zhuzhu 时间:2009-01-18

  为了使这个自动升级模块具有通用性,我将其做成可以单独运行的程序,而并非集成到工具中,这样则可以为各类软件提供自动升级的功能。自动升级模块采用SOCKET方式实现升级客户端与服务端的交互,通过版本控制文件autoupdate.xml来控制版本的更新,完成自动更新后会将历史清单history.htm也发送给客户端,并自动打开该文件,使用户可以对本次升级的具体内容一目了然。

  详细实现:

  autoupdate.xml具体内容:

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>.configresource</Path>
22   <SubVer>1.0.0.0</SubVer>
23  </File>
24  <File>
25   <Name>eglrec.fix</Name> 
26   <Path>.configresource</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用户描述服务端的IP和端口;Version为软件的大版本号,Files为软件涉及到的文件,其中的SubVer为具体文件的版本号,其他就顾名思义了。

  history.htm具体内容:

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>更新内容</td>
21  <td align="center" width=80>日期</td>
22 </tr>
23 <tr>
24  <td align="center" >1.0.3</td>
25  <td ><p>1.实现自动升级功能<br>
26       2.增加版本号显示<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.修正了等字符而无法正确生成的错误<br>
35       2.修正了无法生成的错误<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.修正因为的错误<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.实现通过.功能<br>
51     2.实现通过.功能<br>
52     </p>
53   </td>
54  <td align="center" >2008-12-11</td>
55 </tr>
56</table>
57</body>
58</html>

  工作原理:

  自动升级客户端首先会将本地的autoupdate.xml内容发送给服务端,服务端收到客户端的版本信息后与服务端本地的版本信息(autoupdate.xml)进行比较,首先比较Version,如果一致则通知客户端无需更新,如果不一致则检查Files中各文件的SubVer,服务端将SubVer不一致的文件发送给客户端,对于服务端有而客户端没有的文件也需要发送给客户端,处理完所有File后,服务端将本地的history.htm与传送给客户端,并通知客户端更新完毕;客户端收到更新完毕后的应答后自动打开history.htm,将更新历史信息显示给用户查看。