http://dev.csdn.net/article/28/28023.shtm
以下是我的具体思路:
写两个程序,一个是主程序;一个是升级程序(升级程序放在服务器上);
说明:所有升级任务都由升级程序完成。
1.启动升级程序,升级程序连接到网站,下载新的主程序(当然还包括支持的库文件等)到临时文件夹;
2.升级程序检测旧的主程序是否活动,若活动则关闭旧的主程序(同时记下主程序的状态);
3.删除旧的主程序,拷贝临时文件夹中的文件到相应的位置,同时注册相应的文件;
4.检查主程序的状态,若状态为活动的,则启动新的主程序;
5.关闭升级程序。
6.祝贺你,升级完成。
由于网友提出了关于升级这个升级程序的问题,以下是对其思路进行的一点补充,但原文仍然是升级主程序的,具体代码需读者自己添加:
7.主程序升级完毕;
8.升级程序继续检查所下载的临时文件中是否含有NewUpdate.exe(新的升级程序)和rename.exe(是一个可以更改文件名的程序);
9.若存在以上两个文件,表示要更新Update.exe文件;启动rename.exe程序,同时update.exe关掉自己;
10.rename.exe程序检测update.exe是否已被关掉,若已关掉,删除该update.exe。移动临时文件夹中的NewUpdate.exe文件到主程序的目录下,同时更名为update.exe;
11.rename.exe关掉自己。
12.OK,至此升级程序也被升级了。
-------------------------------------------------------------------2--------------------------------------
我的方法可能比较笨,不一定能奏效。
网络传输还是socket,以文件为更新单元,比如有一个10M的资源文件需要更新,就必须下载10M,如果资源文件更大,就很麻烦了,这是缺陷。
关键是版本控制,在客户端建立version.dat文件,写入以下内容(可以自定义格式):
program.exe v1.00
resource.dat v1.00
data//otherfile.dat v1.00
假设这几个文件是应用程序的组成部分。
建立更新程序update.exe,每次运行的时候从服务器上获取新的version.dat文件,当然了,update.exe事先要清楚服务器的地址与协议。保存新的版本文件在本地,写作version2.dat,然后拿它和本地的version.dat作比较,按格式检查是否存在更新版本,如果存在更新,就依次向服务器发送更新请求,例如检查到program.exe的更新版本是v1.01,那么就发送更新请求,其中包括"program.exe"这样的信息,也可以自定义文件ID等或许更加方便,服务器接受更新请求,开始传输文件,传输协议需要自己来完成(会用FTP可能更好,可惜我不会)。
这样一来,很明显,每次更新的时候,都需要修改服务器上的version.dat文件,并将更新文件放入服务器的恰当位置。说实在,还属于半自动更新,算不上真正的“自动”。
更新中把下载下来的部分写到program.exe.update中,下载完成了,接着下载另一个需要更新的文件,如果有的话。全部完成后,用version2.dat替换version.dat,program.exe.update替换program.exe,完成更新。
如果想更新完毕后自动执行program.exe,可以利用CreateProcess()等。
另外如果要考虑断点续传的话还需要加强一下传输协议,这里略过。
希望这样的方法能对你有所帮助。
---------------------------------------3------------------------------------------------------
我前几天刚完成的,呵呵
共分成3部分:
1. 主程序
2. 自动更新程序
3. 自动更新文件生成器
自动更新程序先从网上下载文件列表(以XML文件形式保存),然后与本地文件列表进行比对,如果有不同则取得下载地址从服务器下载,下载完毕后开始更新。
XML列表文件内容如下:
<SJAutoUpdate URL="http://www.kingesoft.com/Temp"><FileInfo Name="/VPN.txt" Version="081102.081102.46" Size="46"/></SJAutoUpdate>
URL为网站上的更新目录,此目录应与本地目录的文件结构一致
Name为文件名,Version我取的是文件"创建时间.修改时间.大小",Size就是文件大小
这个列表文件是由自动更新文件生成器自动生成的。
我的MyCSDN就是这样做的,下载地址:
http://www.kingesoft.com/Company/DownLoad/MyCSDN.rar