Foxtable(狐表)用户栏目专家坐堂 → [分享]项目内部更新-解决方案


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

主题:[分享]项目内部更新-解决方案

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


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
[分享]项目内部更新-解决方案  发帖心情 Post By:2010/10/17 22:07:00 [只看该作者]

中心思想为,建立远程文件数据库(updates),记录需要升级的文件。

2、根据当前客户端版本,对比updates文件。

3、下载并验证

4、切换项目

S:新文件更新上次,并记录入数据库中。

[此贴子已经被作者于2010-10-19 14:30:17编辑过]

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


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By: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编辑过]

[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
小狐
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/10/17 22:26:00 [只看该作者]

顶你啊


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


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By:2010/10/17 22:29:00 [只看该作者]

图片点击可在新窗口打开查看争取弄个精华。

通过文件比对的方式,利弊都有。通过综合考虑,我还是选择这种方法来实现

优点:不存在隔代升级障碍。

缺点:远程文件未经打包,下载速度过慢。

嘿嘿。单个文件压缩,不知可行否


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/10/18 7:45:00 [只看该作者]

呵呵,设精

 

图片点击可在新窗口打开查看


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


加好友 发短信
等级:五尾狐 帖子:1128 积分:11029 威望:0 精华:2 注册:2008/9/1 10:45:00
  发帖心情 Post By:2010/10/18 11:07:00 [只看该作者]

学习

 回到顶部
帅哥,在线噢!
lihe60
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6842 积分:43288 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2010/10/18 11:09:00 [只看该作者]

这个实用吗?

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


加好友 发短信
等级:五尾狐 帖子:1018 积分:7150 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/10/18 16:09:00 [只看该作者]

呵呵,希望狐狸爸爸能用这个贴的设计思想,给大家一个更好更完善的项目内部更新的方法。

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