Foxtable(狐表)用户栏目专家坐堂 → [分享]狐表开发版本升级后客户端的全自动升级


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

主题:[分享]狐表开发版本升级后客户端的全自动升级

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[分享]狐表开发版本升级后客户端的全自动升级  发帖心情 Post By:2013/1/7 20:32:00 [只看该作者]

 

功能和特点:

1、一个服务器文件夹(端口)可以包含多套管理系统;

2、即使单位的IP地址被网络运营商更改了,也只需要更改全局代码中的IP地址,不必更改其它内容;

3、便于开发多套管理系统;

4、省略了<update.txt>文件,保证了多套系统可以共享服务器上的升级、运行文件夹;

5、狐表版本修改后,更新的开发文件在<项目管理.bat>中反映,无需修改软件;

6、用2个按钮分别完成<一般升级>和<版本升级>,无需修改软件;

7、用一个按钮快速生成用于分发的项目文件,便于首次安装的分发和共享下载;

8、项目文件都放在D盘的固定文件夹,一是安全,二是便于交流,三是便于维护;

9、系统启动时首先ping内网5次,然后ping外网,自动选择IP地址;

10、兼顾了软件开发和软件交付使用。

 

不妥之处敬请高手斧正!

 

全局代码内容:

'院内通用-以下设置服务器地址
Public IP1 As String ="10.22.1.40" '内网
Public IP2 As String ="111.111.111.111" '外网
Public IPa As String = IP1 '采用值
Public ftpAccount As String = "******" '设置ftp登录用户名
Public ftppassword As String = "******" '设置ftp登录密码

'根据项目而定--以下定义项目参数
Public sfile As String="项目管理系统" '数据源名称,即Sql数据库文件名
Public pname As String="项目管理系统" '项目名称,一个项目可以有多个数据源(可以切换)
Public bname As String="项目管理.bat" '开发版本升级后用到的
Public ename As String="项目管理.exe" '项目运行文件名,不含路径
Public rfile As String ="d:\" & pname & "\数据文件\" & ename '项目运行文件名,含路径
Public pfile As String=pname & ".foxdb" '开发项目文件名
Public dpath As String="d:\" & pname & "\设计资料\" '项目文件开发路径
Public bpath As String="d:\" & pname & "\备份文件\" '本地项目文件备份路径,仅开发时用,交付后用upath
Public rpath As String="d:\" & pname & "\数据文件\project" '项目文件运行路径
Public upath As String="\项目管理系统\数据文件\" '服务器上的项目文件升级路径和备份路径
Public datafile As String = pname & ".zip" '包含最新升级数据的文件名

项目管理.bat内容:

taskkill /f /im foxtable.exe '强行终止
move /y d:\项目管理系统\数据文件\project\foxtable.lib.dll d:\项目管理系统\数据文件
move /y d:\项目管理系统\数据文件\project\foxtable.exe d:\项目管理系统\数据文件
move /y d:\项目管理系统\数据文件\project\config.dat d:\项目管理系统\数据文件
move /y d:\项目管理系统\数据文件\project\项目管理.exe d:\项目管理系统\数据文件
start /d d:\项目管理系统\数据文件 /max 项目管理.exe
del d:\项目管理系统\数据文件\project\项目管理.bat

BeforeConnectOuterDataSource事件:

'通用-根据是否开发状态以及内网和外网登录时服务器地址IP的不同,选择不同的连接字符串
Dim i As Integer=1 '外部数据源
If i=1 Or e.ProjectFile<> dpath & pfile Then '这是开发时项目文件名
    Dim a As Boolean
    For i =1 To 5 'ping5次
        a=Network.Ping(IP1,500) 'ping内网,每次500毫秒
        If a Then '如果ping通就退出for循环
            Exit For
        End If
    Next
    If a Then '如果内网Ping通,则用内网地址
        IPa=IP1
    Else '否则用外网地址
        IPa=IP2
    End If
    本句自己完善,原文贴不上:连接字符串 e.C & IPa
End If

发布项目按钮:

'通用-发布项目,上传升级文件
Syscmd.Project.PublishProject()'发布项目
Dim zip As New zipFile'以下创建升级文件
Dim zFile As String = dpath & datafile
If FileSys.FileExists(zfile) Then '如果升级文件已经存在
    FileSys.deletefile(zfile,2,2) '则删除
End If
zip.Create(zFile) '创建空文件
'zip.AddFolder(dpath & "publish\project") '添加project目录下的全部文件
'zip.AddFolder(dpath & "publish\project\Attachments") '添加Attachments目录下的全部模板文件
'zip.AddFolder(dpath & "publish\project\Images") '添加Images目录下的全部图标文件
zip.AddFile(dpath & "publish\project\" & pname & ".FoxEx",pname & ".FoxEx") '或只更新项目主文件
zip.AddFile(dpath & "publish\project\" & pname & ".chm",pname & ".chm") '帮助文件没变可以不更新
zip.Close()
Dim ftp1 As new ftpclient
ftp1.TimeOut=20000 '用于设置尝试操作的毫秒数
ftp1.host=ipa '设置单位ftp服务器地址
ftp1.Account = ftpaccount '设置ftp登录用户名
ftp1.password = ftppassword '设置ftp登录密码
ftp1.upload(dpath & datafile,upath & datafile,True) '上传升级文件
FileSys.CopyDirectory(dpath & "Publish", "e:\" & pname & "\数据文件",True)'拷贝项目文件到E盘

生成下发文件按钮:

Dim zfile As String = "e:\" & pname & ".rar" '将要生成的压缩文件
If FileSys.FileExists(zfile) Then '如果压缩文件已经存在
    FileSys.deletefile(zfile,2,2) '则删除
End If
Dim Proc As New Process
Proc.File = "winrar.exe"
Proc.Arguments = " a -ibck " & zfile & " E:\" & pname
Proc.Start
Proc.WaitForexit
Proc.Arguments = " a -ibck " & zfile & " E:\系统安装和登录说明.doc"
Proc.Start

开发系统版本升级后发布项目按钮:

'通用-发布项目,上传升级文件
Syscmd.Project.PublishProject()'发布项目
Dim zip As New zipFile'以下创建升级文件
Dim zFile As String = dpath & datafile '以下创建升级文件
If FileSys.FileExists(zfile) Then '如果升级文件已经存在
    FileSys.deletefile(zfile,2,2) '则删除
End If
zip.Create(zFile) '创建空文件
zip.addfile(dpath & bname)
Dim Multi As String = FileSys.ReadAllText(dpath & bname, Encoding.Default)
Dim Values(),name As String
Dim m,n As Integer
Values = Multi.split(vbcr)
For Index As Integer = 1 To Values.Length - 3
    m=Instrrev(Values(Index)," ")
    n=Instrrev(Values(Index),"\project\")
    name=mid(Values(Index),n+9,m-n-9)
    zip.addfile(dpath & "publish\" & name)
Next
zip.addfile(dpath & "publish\project\" & pname & ".foxex") '或只更新项目主文件
'zip.addfile(dpath & "publish\project\" & pname & ".chm") '帮助文件没变可以不更新
zip.Close()
Dim ftp1 As new ftpclient
ftp1.TimeOut=20000 '用于设置尝试操作的毫秒数
ftp1.host=ipa '设置单位ftp服务器地址
ftp1.Account = ftpaccount '设置ftp登录用户名
ftp1.password = ftppassword '设置ftp登录密码
ftp1.upload(dpath & datafile,upath & datafile,True) '上传升级文件
FileSys.CopyDirectory(dpath & "Publish", "e:\" & pname & "\数据文件",True)'拷贝项目文件到E盘

AfterOpenProject事件:

If ProjectFile<>dpath & pfile Then '这是项目开发文件名

    Dim ftp1 As new ftpclient
    ftp1.TimeOut=20000 '用于设置尝试操作的毫秒数
    ftp1.host=ipa '设置单位ftp服务器地址
    ftp1.Account = ftpAccount '设置ftp登录用户名
    ftp1.password = ftppassword '设置ftp登录密码
    Dim s1 As Date=ftp1.GetFileDate(upath & datafile) '服务器上升级文件的日期时间
    Dim s2 As Integer=ftp1.GetFilesize(upath & datafile) '服务器上升级文件的大小
    If s1>publishdate Then '如果较现在版本的日期时间新则下载并升级
        Dim s3 As String = upath & datafile '服务器上升级文件中包含升级内容的文件
        Dim s4 As String = rpath & "\" & datafile '准备保存在客户端的包含升级内容的文件
        ftp1.download(s3,s4,False) '静默下载并另存
        Dim zip As New zipFile
        zip.Open(s4) '打开升级文件
        zip.Extractall(rpath) '全部解压到客户端运行文件夹
        zip.Close() '关闭升级文件
        FileSys.deleteFile(s4,2,2) '删除升级文件
        If s2<2000000 then'升级文件小于2Mb,属于一般性版本升级
            Syscmd.Project.Open(ProjectFile) '重新打开项目
        Else           
            Dim s As String = rpath & "\" & bname
            Dim Proc As New Process '定义一个新的Process
            Proc.File = s '指定要打开的文件
            Proc.Verb = "Open" '指定动作
            Proc.Start()
            proc.WaitForExit
        End If
    Else
        Forms("用户登录").Open()
    End If
Else
    Forms("用户登录").Open()
End If

[此贴子已经被作者于2013-1-8 15:30:00编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1077 积分:9923 威望:0 精华:0 注册:2008/9/2 11:34:00
  发帖心情 Post By:2013/1/7 20:53:00 [只看该作者]

沙发

这厉害,收藏研究。


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


加好友 发短信
等级:三尾狐 帖子:623 积分:3897 威望:0 精华:0 注册:2011/8/3 22:13:00
  发帖心情 Post By:2013/1/7 21:02:00 [只看该作者]

研究下  能否上传测试.

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


加好友 发短信
等级:幼狐 帖子:182 积分:1968 威望:0 精华:0 注册:2012/7/2 9:35:00
  发帖心情 Post By:2013/1/7 21:27:00 [只看该作者]

估计是有根基之人,收藏学习之。感谢您! 估计,狐老大看了后,一定会加入精华贴,呵呵!

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


加好友 发短信
等级:童狐 帖子:218 积分:2330 威望:0 精华:0 注册:2009/7/14 1:06:00
  发帖心情 Post By:2013/1/7 21:49:00 [只看该作者]

先顶再学,支持呀!

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


加好友 发短信
等级:九尾狐 帖子:2609 积分:16926 威望:0 精华:11 注册:2011/9/20 16:13:00
  发帖心情 Post By:2013/1/7 22:11:00 [只看该作者]

好帖子,学习

等狐爸解决系统升级需要重新发布的问题

[此贴子已经被作者于2013-1-7 22:11:58编辑过]

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6806 威望:0 精华:1 注册:2012/8/7 22:03:00
  发帖心情 Post By:2013/1/7 23:39:00 [只看该作者]

图片点击可在新窗口打开查看看完眼花,头晕

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


加好友 发短信
等级:一尾狐 帖子:479 积分:4505 威望:0 精华:0 注册:2008/9/4 14:40:00
  发帖心情 Post By:2013/1/8 0:28:00 [只看该作者]

好帖,顶上去

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


加好友 发短信
等级:幼狐 帖子:187 积分:1469 威望:0 精华:0 注册:2012/6/8 9:34:00
  发帖心情 Post By:2013/1/8 0:49:00 [只看该作者]

果断收藏

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/8 8:48:00 [只看该作者]

 有用,写得很具体,可以根据自己的需要修改,省很多事的。

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