程序在线升级原理

 

需要两个程序,一个是主程序;一个是升级程序;所有升级任务都由升级程序完成。

 1.启动升级程序,升级程序连接到网站,下载新的主程序(当然还包括支持的库文件、XML配置文档等)到临时文件夹;

 2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小;

 3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小,两者进行比较;如果发现升级程序的日期大于原有程序的最新日期,则提示用户是否升级;或者是采用将现有版本与最新版本作比较,发现最新的则提示用户是否升级;也有人用其它属性如文件大小进行比较,发现升级程序的文件大小大于旧版本的程序的大小则提示用户升级。本文主要采用比较新旧版本更新日期号来提示用户升级。

 4.如果用户选择升级,则获取下载文件列表,开始进行批量下载文档;

 5.升级程序检测旧的主程序是否活动,若活动则关闭旧的主程序;

 6.删除旧的主程序,拷贝临时文件夹中的文件到相应的位置;

 7.检查主程序的状态,若状态为活动的,则启动新的主程序;

 8.关闭升级程序,升级完成。

 

升级程序的自动升级

把需要更新的dll等文件放在服务端
客户端的程序启动,检测到有需要更新的时候启动update.exe,从服务端下载需要更新的dll文件,并退出主程序,通过update.exe进行更新操作等,文件的下载,注册表的操作等都写在了update.exe里

现在的问题是 如果update.exe本身需要更新,要怎么做

要更新UPDATE.EXE,先把UPDATE.EXE程序下载下来,命名为UPDATE_NEW.EXE.
主程序启动后每次都检测下是否有UPDATE_NEW.EXE文件,如果有,主程序删除UPDATE.EXE并重命名UPDATE_NEW.EXE为UPDATE.EXE.这样主程序不用连网检测是否有新的UPDATE.EXE.

“客户端的程序启动,检测到有需要更新的时候启动update.exe,从服务端下载需要更新的dll文件,并退出主程序”

启动update.exe之后,update.exe检测自身是否需要更新。如果需要,则启动第三个程序abc.exe关闭update.exe更新update.exe,完毕之后启动update.exe。
如果update.exe也不能修改了,那把abc.exe命名为update.exe让主程序来启动它。

写两个updatea.exe updateb.exe每次先启动updatea.exe检查updateb.exe是否需要更新,如果有就更新updateb.exe,更新完了启动updateb.exe,updateb.exe用于更新updatea.exe和主程序

下载需要更新的文件到update目录(包括update.exe), 下载完毕设置标记, 启动主程序, 主程序拷贝所有更新文件到安装目录(包括update.exe). 如果下载过程中失败, 则主程序再次启动时候不拷贝(更新不完整), 而是重新调度update.exe下载(可断点续传).

posted @ 2018-02-02 10:45  cocoabird  阅读(2230)  评论(0编辑  收藏  举报