在线升级程序

通常你的应用程序的startup窗口只是一个bridge窗口,它将会与app server进行通常通讯,通过比对client已安装的文件库的版本(你可以在client安装时生成一个ini文件来记录各个库的版本,在server side也有一个对应的文件,当需要更新时改这个文件),从而产生需要下载更新和文件列表, 根据例表,bridge窗口会启动socket或http连接来下载指定文件overwrite本地文件,在全部OK之后,bridge窗口再启动应用的主程序并关闭自已,完成在线升级.

所以关键是要有一个bridge窗口,它通常是一个启动图版窗口,它与你的主程序从某种意上来讲是两个不同的app,这样保证在升级中不会产生不能读写本地文件导致的问题,也会保证有些应用一加载时就会加载所有的库文件导致的问题.

 

你需要有一个Server,我们可以用Http Server来处理,也就是说你的Client App 在安装的时候需要指定你更新服务器在什么地方,例如:http://update.mycom.com/xapp/upgrade

其中你在xapp webapp中通过设定/upgrade为一个servlet,他将支持Get Http请求,它将会反回一个xml,这个xml中包含所有可升级包(通常可能是.class文件或.xml或.jar等,总之是你client中需要更新文件)的最新版本号,例如:
<xapp>
 <pack location="lib" path="comm1.jar" version="1"/>
 <pack location="lib" path="comm2.jar" version="2"/>
 <pack location="classes" path="com/xapp/util/FileUtil.class" version="1"/>
 <pack location="classes" path="com/xapp/dtd/module.dtd" version="1"/>
 <pack location="config" path="useraction.xml" version="3"/>
 ..............
</xapp>

然后,你需要在你的Http Server上开发另外一个servlet用于下载指定的资源,例如:
http://update.mycom.com/xapp/download?location=lib&path=comm2.jar

将会下载client app安装目录下lib子目录下的comm2.jar,当然,需要在你的update.mycom.com xapp下某个地方例如web-inf/update/下,存放最新的发布程序(安装好的).

OK, 有了上面支持外,你需要做的工作就在client app了, 你需要两个main method的java应用, 一个是你目前的main method class,即真正运行的启动的class,我们将它定义为App Main Class, 你需另外开发一个带main method的class,它用于检查版本并下载更新后的文件,并同步本机的版本信息,最后启动App Main Class, 我们定义它为Launcher App Class.

例如:
public class AppLauncher {
  public static void main(String[] args) {
     1. 通过http://update.mycom.com/xapp/upgrade读取server上应用版本信息
      2.
     if (本地没有版本信息文件,) { //说明我们初次安装
         下载 server上返回的版本配置中所有的文件(配置xml文件中有location信息及path信息)
     }
     else {
        下载server上返回的版本高于本地配置文件中版本的包
     }

     3. 利用server上返回的xml替代本地的xml

     4. 调用commandline启动App Main class method.(注意不要在程序中直接运行,而是通过commandline方式来运行,这样就相当于没有Launcher App Main class了).

     5. 当启动完App main class之后,Launcher App就自动退出了.

  }
}


注意一点:
1. Launcher App的classpath不要同 App Main应用合一块了,也就是说他们是完全独立的.
2. 从某种意义上来讲,你首次安装的Client App只是Launcher App,没有安装App Main及其相关的任何组件.
                                                                                                                                   

程序功能: 本程序是检查程序版本并提供HTTP方式在线更新的程序! 支持多个文件、不同目录更新。 windows环境通用。 使用: 1.把所有需要更新的文件名称和版本号信息添加到更新列表XML文件中,XML文件内容格式: <?xml version="1.0" encoding="gb2312"?> BPL\FORM.bpl 2012.6.4.0 main.exe 2012.6.5.0 注意: 1)与XML文件同一个目录的,文件名不要含目录信息。 2)没有版本号的文件,每次发布时,自己编一个不同的版本号填入XML. 3)XML文件清单信息,每次发布都应包含所有的程序文件。 4)更新列表XML文件与程序文件一同发布到IIS虚拟目录中(windows环境下的)。 2.手动直接执行UPDATE.EXE文件更新时, 需要把更新列表XML文件的URL地址写在文本配置文件CLIENTDB.LXH中。 内容格式如下: [UPDATE] XMLURL=HTTP://192.168.0.80/RELEASE/FILELISTS.XML 3.由主控程序调用时,调用代码格式如下: ShellAPI.ShellExecute(0, 'Open', 'UPDATE.EXE', PWideChar(Params), '',SW_SHOWNORMAL); 其中Params参数,字符串内容必须按顺序分别为: 更新列表XML文件的URL地址 + 主控程序文件名 + 个性程序标题, 共传入三个入口参数,每个参数之间用空格隔开。 可以不传参数,则默认用CLIENTDB.LXH配置文件中的XML URL地址; 可以只传1个参数,参数此时必须为XML URL地址; 如果传第2个参数,更新完毕会自动启动主控程序; 如果传第3个参数,则更新程序标题为第3个参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值