以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  客户机根据服务机的变化升级如何设计呢?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=7142)

--  作者:yankunhao
--  发布时间:2010/5/19 13:41:00
--  客户机根据服务机的变化升级如何设计呢?

如何实现各客户机在打开系统时根据服务机的变化升级程序,升级完后再打开系统?


--  作者:baoxyang
--  发布时间:2010/5/19 13:44:00
--  

这个可以在远程服务器上建立一个ftp服务器才行,然后通过一个文档记录下版本信息,通过版本信息来升级。


--  作者:yankunhao
--  发布时间:2010/5/19 14:02:00
--  

如果软件的使用环境在本局域网中,能给示例吗?例如用到那个事件,相关的语句。


--  作者:狐狸爸爸
--  发布时间:2010/5/19 14:33:00
--  

用一个表,记录升级日期和更新文件信息,本机记录最近一次升级的日期,比较两个日期,如果不同,更具更新文件信息,逐个下载文件。

有一个BeforeOpenProject事件,可以在这里设置代码。

不过你需要掌握SQL语句。

[此贴子已经被作者于2010-5-19 14:39:58编辑过]

--  作者:baoxyang
--  发布时间:2010/5/19 15:06:00
--  

老大,在AfterOpenProject中不知是否可以进行升级应当可以吧?


--  作者:狐狸爸爸
--  发布时间:2010/5/19 15:09:00
--  

你可以尝试一下


--  作者:yankunhao
--  发布时间:2010/5/19 15:19:00
--  
BeforeOpenProject事件发生时,数据表都还未生成啊。那又如何记录呢?
--  作者:yankunhao
--  发布时间:2010/5/19 15:24:00
--  
我是想这样的,如果服务器有文件更新,包括项目的主程序,那么客户机就自更新,将服务机的文件复制到客户机,免得每个客户机都要手动安装一次。
--  作者:狐狸爸爸
--  发布时间:2010/5/19 15:25:00
--  

所以要用SQL语句。

不过你还是在AfterOpenProject事件算了,不是因为表没有生成,而是因为执行BeforeOpenProject事件时数据源没有生成。


--  作者:baoxyang
--  发布时间:2010/5/19 15:30:00
--  

但有一个问题,就是当远程复制时,突然网络掉线时,会造成客户机无法启动及再升级。为了避免此事件发生时,必须把复制的文件放在临时的目录下,进行判断文件是否与服务器文件个数相等时,才从临时目录下复制到当前的项目下。

 

dim file1,file2,file3,file4 as string
Dim path as string = "C:\\data\\" \'ApplicationPath
Dim lst As WinForm.ListBox
Lst = e.form.Controls("ListBox1")
if lst.Items.Count > 0 then
  For k as integer = 0 to lst.Items.Count -1
           lst.selectedIndex = k
           file1 = lst.Items(k)        
           file2 = "ftp://" & s2 & ":" & s3 & "@" & s1 & file1
           file3 = path & file1
           file4 = file3.Replace("/升级","")
           file4 = file4.trim()
           Network.downloadfile(file2,file4,"","",true,100000,true)     ‘请问老大出现复制异常时如何判断?

  Next
end if

messagebox.show("升级成功!需要重新启动项目!!")
Syscmd.Project.Exit(False)