你不必为每一个程序写一个更新程序,事先也不必知道你要更新的是什么程序
你所做的只是
1、新老版本的程序必需同名
2、新版本程序和更新程序上传到服务器里的同一个共享目录
3、将以下代码复制到程序的合适位置,更改第一行代码为你的服务器共享目录
CD \\服务器\更新程序所在目录 &&到服务器存放更新程序.EXE文件的目录
IF FDATE(JUSTFNAME(SYS(16,0)))>FDATE(SYS(16,0))
IF FILE("更新程序.EXE")
WAIT "发现新的版本,正在更新中。" WINDOW ;
AT SYSMETRIC(2)/24-6,SYSMETRIC(1)/12-13 NOCLEAR NOWAIT
MAINUP=FULLPATH("更新程序.EXE") &&得到带完整路径的更新程序.EXE
CD JUSTPATH(SYS(16,0)) &&到客户端也就是正运行的程序文件目录
STRTOFILE(JUSTFNAME(SYS(16,0)),"更新文件.TXT") &&生成文本文件
RUN/N &MAINUP&&&&& &&在客户端调用服务器上的更新程序.EXE
QUIT
ENDIF
ENDIF
说明一下我在更新程序中不用DO WHILE或出错处理中RETRY的原因
1、假设张三运行了程序,突然有事要离开,为了不让其他人动把窗口最小化(这种情况很多),这时你上传了新的版本,李四进来又重新运行程序,肯定死循环
2、你的机器在文件夹选项中选择了单击打开项目(我的机器就是这样),你双击程序可能会两次运行程序,如有新版本肯定死循环当然你也可以采取在更新时杀死进程或禁止重复运行程序来解决上述情况
我用50次循环的理由
INKEY(1,"H") 延时1秒,50次加上每次判断程序是否退出总的时间约1分钟,正常情况程序退出根本不需要这么长时间,但是INKEY()实际上是在等待按键时间,如果用户不断点击鼠标或按键,等待时间将大打折扣,为了保险我用了50次循环