Foxtable(狐表)用户栏目专家坐堂 → 项目发布后,如何自动检测当前版本并在后台升级


  共有16029人关注过本帖树形打印复制链接

主题:项目发布后,如何自动检测当前版本并在后台升级

帅哥哟,离线,有人找我吗?
yankunhao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/9/18 7:41:00 [显示全部帖子]

这个我做到了,思路是在项目里有两个参数,一个是客户端的版本号,一个是服务器的版本号,当用户启动项目时,有一专用代码来分析这两个号码是否一样,如果不一样就运行升级的项目程序


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/9/18 11:19:00 [显示全部帖子]

这个要你设计的,建两个表,一个为内部表,用一列保存客户版本号,另一表为外部表,用一列保存服务器版本。

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/9/18 17:23:00 [显示全部帖子]

以下代码是在项目的登陆窗口中AfterLoad事件中的,大家可以参考这个来做。以下代码中最主要是“客户端版本”和“服务器版本”的设计,我的做法是在项目里设计一个“登陆”表,这个表是内部表来的,正因为是内部表,所以其中的“客户端版本”内容在用户那里是不变的,在“提示”表里可以设定“服务器版本”是可以保存在服务器里的,所以更新的时候就利用它进行比较,如果不同就到指定的目录里下载新的项目,然后自动解压及安装,当升级完后,用户那里的版本号就和服务器的版本号一致了。

 

e.Form.Controls("ComboBox1").Value=Tables("登陆")(0)("用户名") '默认用户名为登陆表用户名列第一行
e.Form.Controls("TextBox2").Value=Tables("登陆")(0)("会计期间")
Forms("登陆").Controls("TextBox1").Select()
Dim b1 As String =Tables("登陆")(0)("客户端版本")
Dim b2 As String =Tables("提示")(0)("服务器版本")
Dim s As String =FileSys.GetParentPath(ProjectPath)
s=FileSys.GetParentPath(s)
s = s & "\update\" & "update.exe"
If b1<>b2 Then
    Dim Proc As New Process
    Proc.File = s
    Proc.Start()
Syscmd.Project.Exit()
End If

[此贴子已经被作者于2010-9-18 17:37:48编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/9/18 17:29:00 [显示全部帖子]

 

升级程序的“确定升级”代码:
图片点击可在新窗口打开查看此主题相关图片如下:升级窗口.jpg
图片点击可在新窗口打开查看

 

Dim szdj As String =e.Form.Controls("TextBox1").Value
Dim bcdj As String =e.Form.Controls("TextBox2").value
Dim yfm As String =e.Form.Controls("TextBox3").value
Dim mm As String =e.Form.Controls("TextBox4").value
Network.DownloadFile(szdj,bcdj,"","",True,1000,True)
Dim s As String =e.Form.Controls("TextBox6").value
Dim c As String =s & "\" & e.Form.Controls("TextBox5").value
If FileSys.DirectoryExists(c) Then '如果目录C:\MyFolder存在
    FileSys.DeleteDirectory(c,3,2)'则删除之
End If
Dim Proc As New Process
Proc.File = bcdj
Proc.Verb = "open"
Proc.Start()
Proc.WaitForInputIdle()
Sendkeys.SendWait(s) '发送按键信息
Sendkeys.SendWait("{ENTER}")
Sendkeys.sendwait("{RIGHT 1}")
Sendkeys.Sendwait("{ENTER}")
Dim Result As DialogResult
Result = MessageBox.Show("升级完成,请重新打开本系统!","提示")
If Result = DialogResult.OK Then
    Syscmd.Project.Exit()
End If


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/9/18 17:43:00 [显示全部帖子]

以上是我的做法,我想很多人在做系统时都会用到升级,因为做完系统后不想每个用户去更新,多累啊,所以也希望老六能否考虑一下将这项功能做一个通用法的设计,这样大家设计时就不用花多时间去做这个了,开发的效率也高很多,呵呵。

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/10/14 8:32:00 [显示全部帖子]

以下是引用lihe60在2010-10-14 6:51:00的发言:

怎么不能用啊?

不能用?会提示什么呢?

 在这个贴中我已经将要用到的代码都贴出来,

只要大家多想一下应该是没问题的。

[此贴子已经被作者于2010-10-14 8:33:58编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/10/14 8:35:00 [显示全部帖子]

以下是引用lihe60在2010-9-20 16:08:00的发言:

远程服务器没有响应.

 

是否在你的局域网上有这个IP地址,并设定了共享?


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/10/14 9:44:00 [显示全部帖子]

以下是引用卟离卟弃在2010-10-14 9:00:00的发言:

yan兄...我对这行代码不懂,不知道它有什么作用..

 

e.Form.Controls("ComboBox1").Value=Tables("登陆")(0)("用户名") '默认用户名为登陆表用户名列第一行
e.Form.Controls("TextBox2").Value=Tables("登陆")(0)("会计期间")
Forms("登陆").Controls("TextBox1").Select() '???
Dim b1 As String =Tables("登陆")(0)("客户端版本")
Dim b2 As String =Tables("提示")(0)("服务器版本")
Dim s As String =FileSys.GetParentPath(ProjectPath)
s=FileSys.GetParentPath(s)
s = s & "\update\" & "update.exe"
If b1<>b2 Then
    Dim Proc As New Process
    Proc.File = s
    Proc.Start()
Syscmd.Project.Exit()
End If

 

请指教..

[此贴子已经被作者于2010-10-14 9:02:54编辑过]


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

 

这个是用来当登陆窗口出现时就选择那个输入密码的地方,以便直接用键盘输入密码的。


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/10/14 9:49:00 [显示全部帖子]

以下是引用lihe60在2010-10-14 8:42:00的发言:

图片点击可在新窗口打开查看此主题相关图片如下:未命名.bmp
图片点击可在新窗口打开查看

出现这个,应该检查你下载文件的地址,你的地址是:192.168.1.1,后面的端口应该不用80吧,我做的是用文件共享方式,所以没80端口的。大家在用的时候要看帮助里的“Network.DownloadFile”相关用法。

[此贴子已经被作者于2010-10-14 9:52:33编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1019 积分:7155 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/10/14 13:56:00 [显示全部帖子]

以下是引用卟离卟弃在2010-10-14 10:35:00的发言:

老兄,你的版本号,

是狐表发布窗口中的程序版本号?文件版本号?还是自已编辑定义的版本号?

 

 版本号是你定义的,比如你做了个软件,在发布时用‘20101001’这个做版本号,而在你做这个软件时用内部表做登录窗口,这个内部表有用一列(客户端版本号)的第一行保存,这样客户端的版本号就一直在用户的电脑上保存着,以后需要升级的话,就会从服务器的一个共享文件里下载打包了的新客户端软件包,然后将原来的客户端软件目录一次性删除,再将打包的新客户端自动解压到原客户的地方。这个新的客户端软件在你做修改时记得在上所说的内部表里设定一个新的客户端版本号及新的服务器版本号(这个版本号要用外部表,因为你可以更改外部表而不可能去到用户电脑里改,这就是为什么客户产端版本号和服务器的版本要分开设定的原因了)。


 回到顶部
总数 14 1 2 下一页