前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服务器上,工具使用用户运行工具时就会连接到自动升级服务器,检查是否有版本更新,如果有则完成更新后再运行最新版本,否则就运行当前工具版本。
为了使这个自动升级模块具有通用性,我将其做成可以单独运行的程序,而并非集成到工具中,这样则可以为各类软件提供自动升级的功能。自动升级模块采用SOCKET方式实现升级客户端与服务端的交互,通过版本控制文件autoupdate.xml来控制版本的更新,完成自动更新后会将历史清单history.htm也发送给客户端,并自动打开该文件,使用户可以对本次升级的具体内容一目了然。
详细实现:
autoupdate.xml具体内容:
Xml代码
<?xml version="1.0" encoding="GBK"?>
<Info>
<Version>1.0.3</Version>
<UpdateServer>
<Ip>122.2.14.212</Ip>
<Port>2110</Port>
</UpdateServer>
<Files>
<File>
<Name>mftest.jar</Name>
<Path>.\bin</Path>
<SubVer>1.0.0.3</SubVer>
</File>
<File>
<Name>run.bat</Name>
<Path>.</Path>
<SubVer>1.0.0.3</SubVer>
</File>
<File>
<Name>eglreco.fix</Name>
<Path>.\config\resource</Path>
<SubVer>1.0.0.0</SubVer>
</File>
<File>
<Name>eglrec.fix</Name>
<Path>.\config\resource</Path>
<SubVer>1.0.0.0</SubVer>
</File>
<File>
<Name>dom4j-1.6.1.jar</Name>
<Path>.\lib</Path>
<SubVer>1.0.0.0</SubVer>
</File>
<File>
<Name>jaxen-1.1-beta-4.jar</Name>
<Path>.\lib</Path>
<SubVer>1.0.0.0</SubVer>
</File>
<File>
<Name>jxl.jar</Name>
<Path>.\lib</Path>
<SubVer>1.0.0.0</SubVer>
</File>
</Files>
</Info>
其中UpdateServer用户描述服务端的IP和端口;Version为软件的大版本号,Files为软件涉及到的文件,其中的SubVer为具体文件的版本号,其他就顾名思义了。
history.htm具体内容: