以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- 项目发布后,如何自动检测当前版本并在后台升级 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=8216)
|
-- 作者:小狐
-- 发布时间:2010/9/18 0:25:00
-- 项目发布后,如何自动检测当前版本并在后台升级
比如说我的项目已经开始使用,但是希望今后该项目升级时,终端客户启动时,能够自动进行升级,替换原有的项目。
[此贴子已经被作者于2010-10-15 18:08:22编辑过]
|
-- 作者:yankunhao
-- 发布时间:2010/9/18 7:41:00
--
这个我做到了,思路是在项目里有两个参数,一个是客户端的版本号,一个是服务器的版本号,当用户启动项目时,有一专用代码来分析这两个号码是否一样,如果不一样就运行升级的项目程序
|
-- 作者:lihe60
-- 发布时间:2010/9/18 8:02:00
--
在什么位置,具体怎么操作?
|
-- 作者:yankunhao
-- 发布时间:2010/9/18 11:19:00
--
这个要你设计的,建两个表,一个为内部表,用一列保存客户版本号,另一表为外部表,用一列保存服务器版本。
|
-- 作者:czy
-- 发布时间:2010/9/18 12:34:00
--
以下是引用yankunhao在2010-9-18 7:41:00的发言:
这个我做到了,思路是在项目里有两个参数,一个是客户端的版本号,一个是服务器的版本号,当用户启动项目时,有一专用代码来分析这两个号码是否一样,如果不一样就运行升级的项目程序
我觉得最好将版本号保存在服务器上,判断服务器版本和客户端版本是否一致再进行升级。
|
-- 作者:lihe60
-- 发布时间:2010/9/18 13:15:00
--
以下是引用czy在2010-9-18 12:34:00的发言:
我觉得最好将版本号保存在服务器上,判断服务器版本和客户端版本是否一致再进行升级。
恕本人笨,可否做个例子?
|
-- 作者:yankunhao
-- 发布时间: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
-- 发布时间: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
-- 发布时间:2010/9/18 17:43:00
--
以上是我的做法,我想很多人在做系统时都会用到升级,因为做完系统后不想每个用户去更新,多累啊,所以也希望老六能否考虑一下将这项功能做一个通用法的设计,这样大家设计时就不用花多时间去做这个了,开发的效率也高很多,呵呵。
|
-- 作者:狐狸爸爸
-- 发布时间:2010/9/18 18:09:00
--
呵呵,这种东西没有办法通用的,只有自己设计。
[此贴子已经被作者于2010-9-18 18:09:10编辑过]
|