如何实现客户端程序自动更新下载
请教各位高手:我用PB8+SQL SERVER2000编写了一套管理系统,要安装到几十个客户端,所以当程序有改动时要一台一台的重新安装就很浪费时间,我的问题是:如何实现当客户端运行程序时,程序自动判断本机上的程序是否为最新程序,如果不是则自动到服务器下载最新程序到本机,我想通过判断本机上程序的最后修改时间与服务端程序的最后修改时间,如果时间不一样则客户端自动下载.我有这个想法但不知道怎么去实现,特别是如何去提取客户端和服务器端的程序的最后修改时间.
我看了很多贴子都是通过比较版本号来实现的,我觉得不太好,因为版本号也要人为的维护,还有的是在客户端安装一个批处理文件,由操作人员根据需要来更新程序,我觉得不科学,所以想通过程序自动判断程序的更新时间来做,但苦于自己才疏学浅做不到,还是请高手帮帮忙吧.谢谢
问题点数:20、回复次数:21Top
1 楼swazyl(swazyl)回复于 2003-12-05 08:22:34 得分 0
怎么没人回答我的问题啊,我先谢谢各位啦Top
2 楼zzhcims(离忧谷主)回复于 2003-12-05 08:55:12 得分 0
使用第三方控件Top
3 楼swazyl(swazyl)回复于 2003-12-05 08:58:37 得分 0
zzhcims(离忧谷主),能不能告诉具体怎么实现呀,谢谢啦Top
4 楼treesoft(长沙水)回复于 2003-12-05 09:25:41 得分 0
个人认为通过版本号来实现更好些……Top
5 楼zzhcims(离忧谷主)回复于 2003-12-05 09:58:35 得分 0
特别是对更新时间的判断,最好使用第三方控件,比如powertcp等。使用ole,你可以看相关控件的帮助。Top
6 楼tommyhuanglei(汪洋里的海盗)回复于 2003-12-05 10:12:34 得分 0
能举个例子吗?
帮楼主顶一下!Top
7 楼zzr72(宗宗)回复于 2003-12-05 10:34:54 得分 0
你自己用数据库编程,可以充分利用数据库啊!
——设个地方存程序版本的生成时间,然后在程序中设个常量(每个版本不一样),这样一对比就明白了,完全不用第三方软件就可以实现。Top
8 楼zzr72(宗宗)回复于 2003-12-05 10:37:56 得分 0
另,windows的域管理可以设客户登录脚本,如果你的客户端都是登录的话,在脚本中实现:
if exist file_path_name then xcopy new_file_path_name file_path_name /d /y即可实现,注意:new_file_path_name是客户机可访问的路径,加/d就是如果时间更新的话就copy否则不用,/y表示不用提示。Top
9 楼xingtao(as)回复于 2003-12-05 14:25:04 得分 20
TO 楼主:'还有的是在客户端安装一个批处理文件,由操作人员根据需要来更新程序,我觉得不科学'
给楼主补充一点,你可能误解了,并不是在客户端安装一个BAT,这个BAT是放在服务器端的
不明白用楼主为什么觉得不科学?如果按照你说的那样,即使用更新时间来判断,那么你怎么才能让客户下载服务器端的程序呢?不明白你这所说的下载到底是什么意思呢?如果你做的是B/S程序,那么算我才疏学浅,没做过BS程序,也许用下载这个词,你是对的;但要是C/S程序的话,我想问你,怎么下载呢?真正快捷的办法就是写一个BAT文件,在数据库中建一张表,存放程序的版本或更新时间。客户端的程序里open时候要根据那个表的版本或更新时间做判断,如果高于当前版本或是更新时间大于上次的更新时间,那么就要先执行bat(run *.bat),更新最新的程序,执行速度是很快的,几秒就会把服务器的程序COPY并覆盖到客户当前的程序!这就是我写的一个bat文件
@echo off
echo 开始更新系统,请稍等
net use z: \\server\futureaf
echo 开始拷贝文件....
xcopy z:\ C:\Progra~1\Future\ /Y /C /Q /S /D
copy C:\Progra~1\Future\**物流空运系统.lnk c:\windows\desktop
net use z: /DELETE /YES
echo 更新完成!
@echo on
exitTop
10 楼xingtao(as)回复于 2003-12-05 14:28:06 得分 0
“由操作人员根据需要来更新程序,我”
这句话你又说错了,根本不是‘由操作人员根据需要’,这是程序自动判断并更新的,当然,你也可以取消更新Top
11 楼119119(^_^,转向DELPHI,我是痛病快乐)回复于 2003-12-06 00:21:18 得分 0
帮你顶,关注中。。。。。。Top
12 楼sdahyk()回复于 2003-12-06 08:34:55 得分 0
我有疑问,程序在运行的时候才能去判断有没有更新,这时候用copy命令是没有办法覆盖的啊?Top
13 楼zzr72(宗宗)回复于 2003-12-06 08:37:58 得分 0
用域用户登录自动更新程序肯定在本机程序运行之前,我们一百台的网络都是用这种方式进行程序更新的。NT4的方式和Win2k的略有不同,但效果一样。Top
14 楼flyerlxg(飞鸟)回复于 2003-12-06 09:53:01 得分 0
如果在用户登录之后程序更新了怎么办呢?难道要用户重新登录吗?
如果想实时自动升级,则必须在程序中置一个时间控件,定时检查是否有新的程序,但这样一来势必增大通信量,降低系统效能。我认为还是在程序启动时一次性检测,如果有新的则予更新。至于检测的手段,我个人认为版本比较还是行之有效的策略,具体实施可为:在数据库中存放当前最高的版本号,程序中设置一个常量,当程序启动时,则读出数据库中的版本号与本身的版本号进行比较,如果本身的高,则update进数据库后再调用主程序继续执行,如果本身的低,则到指定的位置copy新的主程序到本机,然后再调用主程序,如果相等,则直接调主程序执行。这样一来,用户根本感觉不到程序的更新,从而也不影响系统。
至于用更新时间来检测,如果有时同一个文件重新创建,那么他的时间是不是也要跟着改变呢,而此时主程序根本没有更新,用户完全没有必要进行更新的动作呀。Top
15 楼zzhcims(离忧谷主)回复于 2003-12-06 20:10:23 得分 0
用FTP支持在INTERNET上更新,比只能在局域网使用范围更广,至于更新时间的比较可以用控件,也可以用数据库来实现。Top
16 楼banalman(IT解放者)回复于 2003-12-18 21:09:07 得分 0
我的做法是将更新程序放在数据库中,客户端下载。Top
17 楼gongdepin(gongdepin)回复于 2003-12-19 09:19:21 得分 0
飛鳥說得很正確,我們的大概也是這樣做的,但是還是有些不同的地方,版本號的處理梢有點不同Top
18 楼gongdepin(gongdepin)回复于 2003-12-19 09:29:12 得分 0
to:飛鳥,想請教你一個問題:在程序更新時怎麼判斷copy動作是否完成了?根據這個動作我要修改本機的版本號的,因為在更新是可能有斷電的可能,還有最關鍵的一點就是決定主程序的運行時機這樣就不用重起程序延長copy的時間,望回復Top
19 楼lxwin2008(lx)回复于 2003-12-19 11:21:05 得分 0
大家看看office 2003 是怎么更新的!!!Top
20 楼softdear(softdear)回复于 2003-12-19 11:36:18 得分 0
upTop
21 楼lionkings(游俠)回复于 2004-03-24 10:54:10 得分 0
我有一個問題﹐我想做一個很靈活通用的自動更新﹐不管應用名字﹐因為我很多個系統﹐各系統都用到几乎相同的pfc﹐我只想在pfc寫進一段代碼﹐判斷我文件服務器上的*.exe的最后修改時間﹐對比本地的修改時間﹐舊了就更新﹐我的問題是of_filecopy()執行時不能覆蓋當前的應用文件*.exe﹐怎么辦呢﹐其它的pbd都更新了﹐就剩下當前正在運行的exe﹐該怎么做呢? 請教。。。。。。Top
相关问题
- 则么实现客户端自动更新下载服务器端程序?
- 客户端自动更新程序?
- 自动更新程序版本DLL问题讨论.如何做到多客户端(100以上)自动更新.利用IE功能下载CAB包.使其更新CAB包功能?
- 自动更新程序版本DLL问题讨论.如何做到多客户端(100以上)自动更新.利用IE功能下载CAB包.使其更新CAB包功能?
- 自动更新程序版本DLL问题讨论.如何做到多客户端(100以上)自动更新.利用IE功能下载CAB包.使其更新CAB包功能?
- 如何自动更新C/S结构的客户端程序?
- WinForm程序,客户端应用程序怎么从服务器下载文件?
- 哪里可以下载Sybase 10.x的WINDOWS9x客户端程序?
- 请问那里有informix 5的windows客户端程序下载?
- 做了一个activeX的打印驱动程序,更新服务器后,客户端不自动更新.




