-- 作者: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编辑过]
|