发布后程序的远程自动更新

发布后程序的远程更新,包括项目本身的更新,以及Foxtable运行环境的更新。

提示:由于本节的内容是针对发布后的程序,所以无法在发布前进行测试。

设计步骤:

1、项目属性中有两项用于设置远程升级:

2、制作升级文件

升级文件有三个:

最后将制作好的update.txt、update1.zip、update2.zip三个文件上传到项目属性中指定的在线升级路径中。

3、在线升级

需要提醒一下,本节介绍的内容是针对发布后程序的远程自动升级,所以要测试的话,必须运行发布后的程序进行测试。

你可以在你的项目中加上一个在线升级的菜单命令或者按钮,代码很简单:

Syscmd.Project.Update()

执行上面的代码,系统首先检索远程升级路径中的update.txt文件,获得项目版本日期和Foxtable版本日期,和本机的项目版本日期和Foxtable版本日期进行比较,然后根据比较结果进行动作:

A、如果本机的项目版本日期大于等于update.txt中的项目版本日期,则不进行任何动作。

B、如果本机的项目版本日期小于update.txt中的项目版本日期,且本机的Foxtable版本日期等于update.txt中的Foxtable版本日期,则开始下载简化升级包update1.zip。

C、如果本机的项目版本日期小于update.txt中的项目版本日期,且本机的Foxtable版本日期不等于update.txt中的Foxtable版本日期,则开始下载完整升级包update2.zip。

升级包下载完成后,会自动解压并覆盖本机的文件,完成升级。

因为单单升级项目本身的频率会远远超过同时升级项目和运行环境的频率,所以提供两个升级包,可以让客户端的日常升级更加快捷。

至此我们的在线升级功能已经完成,即使你是一个初次接触编程的人,应该也能即时掌握。

Update的语法:

Syscmd.Project.Update(Prom1, Prom2)

Prom1: 可选参数,逻辑型,没有发现新版本时,是否提示用户。
Prom2: 可选参数,逻辑型,发现新版本时,是否提示用户升级。

例如希望自动升级能够完全"静默",发现新版本时不提示,自动开始升级,没有发现新版本时也不提示:

Syscmd.Project.Update(False,False)

如果我们在AfterOpenProject下面的代码:

Syscmd.Project.Update(False,False)
Forms
("窗口1").Open() '可能会出错
'后续其它代码

目的是希望打开项目的时候自动升级,然后打开窗口1。
但是上述代码肯定会在升级成功之后提示错误,因为一旦升级成功,Foxtable就会关闭,后面的打开窗口代码就会出错,当然后续其它的代码也一样会出错。
我们可以用下面的代码避免错误:

If Syscmd.Project.Update(False,False) = False Then '如果没有升级
   
Forms("窗口1").open()
   
'后续其它代码
End
If

也就是说Update执行后会返回一个逻辑值,如果升级成功,返回True,否则返回False。

总之,如果需要在AfterOpenPoject事件中实现自动升级,那么原有的AfterOpenProject事件代码必须包括在这个判断中,只有没有升级的情况下,才执行原来的代码:

If Syscmd.Project.Update(False,False) = False Then '如果没有升级
    '原AfterOpenProject事件代码
End
If

4、基于局域网的在线升级

在线升级默认是基于互联网的,在升级之前,会自动检测是否连接互联网。
如果要基于局域网进行在线升级,除了将升级包路径设置为局域网路径外,还必须将属性“通过互联网升级”设置为False:


 

5、使用FTP地址升级

升级地址也可以使用FTP地址,例如:
ftp://zhanshang:138238@egridsoft.com/update
上面假定帐户为“zhanshang”,密码为“138238”,ftp服务器的址为“ftp://egridsoft.com”,升级包所在目录为“update”。

重要提示:

三个符号“:/@”在升级地址定义中有特殊意义,用于分割协议、账户、密码、服务器地址以及路径,所以不可以在账户名和密码中出现上述符号。

6、和远程升级相关的系统变量


本页地址:http://www.foxtable.com/webhelp/topics/2934.htm