以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- [分享]项目内部更新-解决方案 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=8392)
|
-- 作者:qtcks
-- 发布时间:2010/10/17 22:07:00
-- [分享]项目内部更新-解决方案
中心思想为,建立远程文件数据库(updates),记录需要升级的文件。
2、根据当前客户端版本,对比updates文件。
3、下载并验证
4、切换项目
S:新文件更新上次,并记录入数据库中。
[此贴子已经被作者于2010-10-19 14:30:17编辑过]
|
-- 作者:qtcks
-- 发布时间:2010/10/17 22:08:00
--
1、创建updates 表
Dim Builder As New ADOXBuilder("") \'要指定数据源名称 Dim tbl As ADOXTable Builder.Open() tbl = Builder.NewTable("updates") \'创建表 With tbl .AddColumn("版本号" ,ADOXType.DateTime) .AddColumn("文件路径" ,ADOXType.Text) .AddColumn("文件校验码" ,ADOXType.nvarchar,16) End With
Builder.AddTable(tbl) \'增加表 Builder.Close() Syscmd.Project.Open(ProjectFile)
[此贴子已经被作者于2010-10-19 20:45:42编辑过]
|
-- 作者:qtcks
-- 发布时间:2010/10/17 22:08:00
--
开发者:新文件上传服务器
Dim bbh As Date = Date.Now \'设置本次上传版本号 \'------------------------设置ftp服务器信息 Dim ftp1 As new ftpclient ftp1.host="" ftp1.Account = "" ftp1.password = "" \'---------------------获取远程服务器历史文件校验码 Dim dt As datatable Dim cmd As New SQLCommand cmd.CSelect 文件路径,文件校验码 from updates" dt = cmd.ExecuteReader() Dim ftp_jym As String = dt.GetComboListString("文件校验码") \'output.show(ftp_jym) \'获取服务器文件校验码 \'========================== For Each dir As String In FileSys.GetDirectories(ProjectPath & "\\Publish") \'遍历发布项目文件夹 Dim x As String = dir.Replace(ProjectPath & "\\Publish\\","") \'获取目录名称 Output.Show(x) If ftp1.DirectoryExists("/远程ftp更新目录/" & x) = False Then \'如果不存在目录 ftp1.MakeDir("/远程ftp更新目录/" & x) \'则创建目录 End If For Each File As String In FileSys.GetFiles(dir) \'遍历项目\\ dir 目录下所有文件 Dim xy As String = File.Replace(dir ,"") \'获取文件名称 Dim jym As String = CRCCheckFile(File) \'获取文件校验码 If ftp_jym.Contains(jym) = False Then \'对比服务器是否存在本校验码记录. ftp1.Upload(file,"远程ftp更新目录/" & x & xy,True) \'上传文件 cmd.CommandText = "INSERT INTO updates(版本号,文件路径,文件校验码) VALUES(\'" & bbh & "\',\'" & x & xy & "\',\'" & jym & "\')" \'向 updates 记录本次上传文件信息 cmd.ExecuteNonQuery End If Next Next For Each File As String In FileSys.GetFiles(ProjectPath & "\\Publish") \'遍历目录下所有文件 Dim xy As String = File.Replace(ProjectPath & "\\Publish\\","") \'获取文件名称 Dim jym As String = CRCCheckFile(File) \'获取文件校验码 If ftp_jym.Contains(jym) = False Then \'对比服务器是否存在本校验码记录. ftp1.Upload(file,"远程ftp更新目录/" & xy,True) \'先上传文件 cmd.CommandText = "INSERT INTO updates(版本号,文件路径,文件校验码) VALUES(\'" & bbh & "\',\'" & xy & "\',\'" & jym & "\')" cmd.ExecuteNonQuery End If Next output.show((Date.now - bbh).Totalseconds) \'记录本次上传时间
[此贴子已经被作者于2010-10-17 22:21:06编辑过]
|
-- 作者:qtcks
-- 发布时间:2010/10/17 22:08:00
--
客户端:新文件下载更新
Dim x As Date = "2010-10-17 18:49:32.000" \'当前版本号 \'================== Dim dt As datatable Dim cmd As New SQLCommand cmd.Cselect b.文件路径,b.版本号,c.文件校验码 from " & _ "(Select DISTINCT cast(t.文件路径 as varchar(80)) 文件路径 ,max(版本号) 版本号 from updates t where 版本号 >=\'" & x & "\' group by cast(t.文件路径 as varchar(80))) b " & _ "INNER JOIN (select * from updates) c " & _ "on c.版本号 = b.版本号 and cast(c.文件路径 as varchar(80)) = b.文件路径 " dt = cmd.ExecuteReader()
此主题相关图片如下:qq截图未命名.png
\'===================== FTP远程服务器信息 Dim ftp1 As new ftpclient ftp1.host="" ftp1.Account = "" ftp1.password = "" \'--------------------------开始下载 output.show(dt.DataRows.Count) \' 获取当前更新文件量
For Each wj As DataRow In dt.DataRows Dim i As Integer Dim bd As String = CRCCheckFile(ProjectPath & "\\远程ftp更新目录\\" & wj("文件路径")) \'判断是否已经下载, If bd = wj("文件校验码") Continue For \'新文件已下载,跳过本次下载,进入下一次循环 End If Do ftp1.Download("远程ftp更新目录\\" & wj("文件路径"),ProjectPath & "\\远程ftp更新目录\\" & wj("文件路径"),True) \'下载文件 Dim Down As String = CRCCheckFile(ProjectPath & "\\远程ftp更新目录\\" & wj("文件路径")) If Down = wj("文件校验码") output.show("下载成功") Exit Do End If i+=1 Loop While i<=4 \'重复下载5次 Next
filesys.MoveDirectory(ProjectPath & "\\update\\", ProjectPath, True) Syscmd.Project.Open(ProjectFile)
[此贴子已经被作者于2010-10-17 22:26:01编辑过]
|
-- 作者:小狐
-- 发布时间:2010/10/17 22:26:00
--
顶你啊
|
-- 作者:qtcks
-- 发布时间:2010/10/17 22:29:00
--
争取弄个精华。
通过文件比对的方式,利弊都有。通过综合考虑,我还是选择这种方法来实现
优点:不存在隔代升级障碍。
缺点:远程文件未经打包,下载速度过慢。
嘿嘿。单个文件压缩,不知可行否
|
-- 作者:狐狸爸爸
-- 发布时间:2010/10/18 7:45:00
--
呵呵,设精
|
-- 作者:pyh6918
-- 发布时间:2010/10/18 11:07:00
--
学习
|
-- 作者:lihe60
-- 发布时间:2010/10/18 11:09:00
--
这个实用吗?
|
-- 作者:yankunhao
-- 发布时间:2010/10/18 16:09:00
--
呵呵,希望狐狸爸爸能用这个贴的设计思想,给大家一个更好更完善的项目内部更新的方法。
|