Foxtable(狐表)用户栏目专家坐堂 → 我想问下,狐表自带的系统升级功能,那个触发Update1.zip下载是通过什么底层方法?


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

主题:我想问下,狐表自带的系统升级功能,那个触发Update1.zip下载是通过什么底层方法?

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


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
我想问下,狐表自带的系统升级功能,那个触发Update1.zip下载是通过什么底层方法?  发帖心情 Post By:2022/4/2 17:21:00 [显示全部帖子]

我想问下,狐表自带的系统升级功能,那个触发Update1.zip下载是通过什么底层方法
我在网络严格的国企服务器里,部署了一个Nginx网站,开通好tcp端口,可以通过浏览器访问update.txt,可以下载update1.zip

用狐表检查升级,WebRequest请求可以打开update.txt
但是Syscmd.Project.Update()是没效果,没看到下载update1.zip或者update2.zip的进度条

我在感觉Syscmd.Project.Update()并不是通过Http协议去访问下载的,但也绝对不是FTP。难道是狐表自己写原生的socket协议?

想问下有人重写过自己的升级方法的代码吗?分享下帖子

====================================================

以下是我用的升级代码,这些代码在普通阿里云服务器都正常,已经用过60多个项目
'联网检测更新---
If User.Type <> UserTypeEnum.Developer Then'根据是否开发者,再检查升级
    Try
        Dim req = System.Net.WebRequest.Create(PublicUpdatePath & "/update.txt") 'PublicUpdatePath是自己定义的升级网址
        Dim pos = req.GetResponse
        Dim stm As System.IO.Stream = pos.GetResponseStream()
        Dim reader As New System.IO.StreamReader(stm)
        Dim str As String = reader.ReadToEnd
        pos.Close
        stm.Close
        reader.close
        
        Dim ary() As String = str.split("|")
        Dim d As Date = ary(0)
        Dim dv As Date = ary(1)
        If PublishDate < d Then
            If MessageBox.show("发现新版本{" & d & "},是否升级?","在线升级提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then
                '备份一下Config文件夹--
                Dim now As String = Format(Date.now, "yyyyMMddHHmmss")
                If FileSys.DirectoryExists(ProjectPath & "Config") Then
                    FileSys.CopyDirectory (ProjectPath & "Config",ProjectPath & "Config备份_" & now, True)
                End If
                '备份一下Config文件夹--
                
                If dv > ApplicationVertion Then
                    MessageBox.show("本次升级内容较多,请耐心等待" & vbcrlf & vbcrlf & "升级后需要【手动启动软件】!","升级重要提醒",MessageBoxButtons.OK,MessageBoxIcon.Warning)
                End If
                If Syscmd.Project.Update(False,False) =True Then
                    If dv <= ApplicationVertion Then '小版本更新,可以用自动重启,大版本绝对不能用,会无限升级!
                        Application.ReStart  '升级成功后重启项目
                    End If
                End If
                Return ""
            Else
                MessageBox.show("旧版程序运行过程中,可能会有报错,请尽快升级","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
            End If
        Else '无需升级,正常启动
            '继续执行Try组合后的代码
        End If
    Catch ex As exception
        'MessageBox.Show("联网检测更新失败,将以当前版本运行")
    End Try
End If
'联网检测更新---
[此贴子已经被作者于2022/4/2 17:21:34编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2022/4/6 9:22:00 [显示全部帖子]

顶一下这个问题,遇到麻烦

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


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2022/4/21 11:24:00 [显示全部帖子]

oh~我发现啥问题了,自己的错,用了新的升级路径变量,却忘了覆盖给狐表的升级方法里。补上下面红色这句,不是https的问题,谢谢官方的关心



'联网检测更新---
If User.Type <> UserTypeEnum.Developer Then'根据是否开发者,再检查升级
    Try
        Dim req = System.Net.WebRequest.Create(PublicUpdatePath & "/update.txt")
        Dim pos = req.GetResponse
        Dim stm As System.IO.Stream = pos.GetResponseStream()
        Dim reader As New System.IO.StreamReader(stm)
        Dim str As String = reader.ReadToEnd
        pos.Close
        stm.Close
        reader.close
        
        Dim ary() As String = str.split("|")
        Dim d As Date = ary(0)
        Dim dv As Date = ary(1)
        If PublishDate < d Then
            If MessageBox.show("发现新版本{" & d & "},是否升级?","在线升级提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then
                '备份一下Config文件夹--
                Dim now As String = Format(Date.now, "yyyyMMddHHmmss")
                If FileSys.DirectoryExists(ProjectPath & "Config") Then
                    FileSys.CopyDirectory (ProjectPath & "Config",ProjectPath & "Config备份_" & now, True)
                End If
                '备份一下Config文件夹--
                
                If dv > ApplicationVertion Then
                    MessageBox.show("本次升级内容较多,请耐心等待" & vbcrlf & vbcrlf & "升级后需要【手动启动软件】!","升级重要提醒",MessageBoxButtons.OK,MessageBoxIcon.Warning)
                End If
                UpdatePath = PublicUpdatePath '把自己定义的升级路径变量,覆盖给狐表的升级路径变量,才能开始做升级处理
                If Syscmd.Project.Update(False,False) =True Then
                    If dv <= ApplicationVertion Then '小版本更新,可以用自动重启,大版本绝对不能用,会无限升级!
                        Application.ReStart  '升级成功后重启项目
                    End If
                End If
                Return ""
            Else
                MessageBox.show("旧版程序运行过程中,可能会有报错,请尽快升级","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
            End If
        Else '无需升级,正常启动
            '继续执行Try组合后的代码
        End If
    Catch ex As exception
        'MessageBox.Show("联网检测更新失败,将以当前版本运行")
    End Try
End If
'联网检测更新---

 回到顶部