远程自动升级的实现

本节的内容可以参考CaseStudy目录下的文件:远程更新.Table

我们知道,B/S结构的软件易于部署,而C/S结构的软件则能提供更好的交互性。
虽然鱼和熊掌不可兼得,不过Foxtable却较好地融合了二者的优势。
作为C/S结构的软件,FoxTable有着良好的交互性,能充分利用客户端的计算能力,提供更好的性能和功能。
同时FoxTable内置远程升级功能,当项目有新的版本时,你只需简单的一行代码,即可同步更新所有客户端的项目。

需要注意的是: 试用版不具备本功能,只有商业版和开发版才能实现远程自动升级。

设计步骤:

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

2、制作升级包

首先需要注意的是,升级包必须是zip格式的压缩文件。
当开发者准备发布项目的新版本时,首先应该将项目属性中的项目发布日期设置为当天日期,然后将需要更新的文件压缩成一个zip文件作为升级包使用,升级包的文件名为:update.zip。
升级包中的各文件必须保持原有的相对路径,项目文件位于压缩文件的根目录,而Images、Attachments和Bin则作为子目录。
如果需要的话,可以只将更改过的文件包括在升级包中。
然后新建一个名为update.txt的文本文件,该文本文件的内容为压缩包的发布日期,此日期必须和项目属性中设置的项目发布日期相同,通常就是当天日期。
最后将update.zip和update.txt文件上传到项目属性中指定的在线升级路径中。
即使你没有发布新的项目,也应该在在线升级路径放置一个包含项目发布日期的update.txt文件,以免用户在线升级的时候出现错误提示。

如果你对于制作升级包还有疑惑,可以参考我们为示例文件“远程更新.Table”制作的远程升级包,地址为:

http://www.foxtable.com/download/80211/update.zip
http://www.foxtable.com/download/80211/update.txt

需要注意的是,经常有用户制作升级包的时候,将整个项目文件夹压缩进去,这样是不对的,会导致升级失败。
我们需要将项目文件夹下的文件及其子目录压缩到升级包中,而不是直接将整个项目文件夹压缩到升级包中,这一点要特别注意:

3、在线升级

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

Syscmd.Project.Update()

执行上面的代码,系统首先检索远程升级路径中的update.txt文件,获得升级包的发布日期,然后用这个日期和本地项目的发布日期进行比较,如果升级包的日期较新,则下载update.zip文件,并自动解压更新有关文件。

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

Update的语法:

Syscmd.Project.Update(Prom1, Prom2, ShowUI)

Prom1:  可选参数,逻辑型,没有发现新版本时,是否提示用户。
Prom2:  可选参数,逻辑型,发现新版本时,是否提示用户升级。
ShowUI: 可选参数,逻辑型,升级过程是否显示下载进度。

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

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/2245.htm