以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [分享]狐表开发版本升级后客户端的全自动升级  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=27687)

--  作者:shenyl0211
--  发布时间: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
--  发布时间:2013/1/7 20:53:00
--  

沙发

这厉害,收藏研究。


--  作者:布莱克朱
--  发布时间:2013/1/7 21:02:00
--  
研究下  能否上传测试.
--  作者:万通
--  发布时间:2013/1/7 21:27:00
--  
估计是有根基之人,收藏学习之。感谢您! 估计,狐老大看了后,一定会加入精华贴,呵呵!
--  作者:VIP用户
--  发布时间:2013/1/7 21:49:00
--  
先顶再学,支持呀!
--  作者:hanxuntx
--  发布时间:2013/1/7 22:11:00
--  

好帖子,学习

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

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

--  作者:nblwar
--  发布时间:2013/1/7 23:39:00
--  
图片点击可在新窗口打开查看看完眼花,头晕
--  作者:Gryvip
--  发布时间:2013/1/8 0:28:00
--  
好帖,顶上去
--  作者:卧美吻花
--  发布时间:2013/1/8 0:49:00
--  
果断收藏
--  作者:lin_hailun
--  发布时间:2013/1/8 8:48:00
--  
 有用,写得很具体,可以根据自己的需要修改,省很多事的。