Foxtable(狐表)用户栏目专家坐堂 → ftp升级后如何才能自动重新打开项目


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

主题:ftp升级后如何才能自动重新打开项目

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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
ftp升级后如何才能自动重新打开项目  发帖心情 Post By:2017/8/3 13:34:00 [只看该作者]

用了下面的ftp下载到本地D盘临时目录自动升级的代码如下:

If ftp.Download("\Update\Update2.Zip","D:\UpdateTemporary\Update2.Zip",True) = True Then '如果下载程序文件成功
    UpdatePath = "D:\UpdateTemporary"
    RemoteUpdate = False
    If Syscmd.Project.Update(False,False) = True Then 

        '----删除临时升级目录----
        If FileSys.DirectoryExists("D:\UpdateTemporary") = True Then
            FileSys.DeleteDirectory("D:\UpdateTemporary",2,2)
        End If
        Return '升级完成后必须先中止后面的代码,否则会出错
    End If
Else
    MessageBox.Show("由于网络原因下载升级文件失败,请稍后再升级!")
End If

现在每次升级完成后都提示完成,重新启动项目,要如何才能实现升级完成后自动重启项目?

谢谢!

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/8/3 14:08:00 [只看该作者]

看看我的代码,能否帮到你:
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=103041&skin=0

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/3 14:25:00 [只看该作者]

方法一:

 

下载信息  [文件大小:248.3 KB  下载次数:3]
图片点击可在新窗口打开查看点击浏览该文件:测试.zip

 

方法二:

 

 If Syscmd.Project.Update(False,False) = True Then 

    Application.restart

 End If


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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/3 15:50:00 [只看该作者]

If Syscmd.Project.Update(False,False) = True Then 
        '----删除临时升级目录----
        If FileSys.DirectoryExists("D:\UpdateTemporary") = True Then
            FileSys.DeleteDirectory("D:\UpdateTemporary",2,2)
        End If
       Application.restart
        Return '升级完成后必须先中止后面的代码,否则会出错
    End If

加在删除了临时目录后再重新启动没问题吧,这样的话是不是下面那个Return就不用了,因为restar因该会自动中止后面的代码吧

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/3 16:45:00 [只看该作者]

以下是引用HappyFt在2017/8/3 15:50:00的发言:

加在删除了临时目录后再重新启动没问题吧,这样的话是不是下面那个Return就不用了,因为restar因该会自动中止后面的代码吧

 

没问题。return要不要都无所谓。


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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/4 9:31:00 [只看该作者]

If ftp.Download("\Update\Update2.Zip","D:\UpdateTemporary\Update2.Zip",True) = True Then '如果下载程序文件成功
    UpdatePath = "D:\UpdateTemporary"
    RemoteUpdate = False
    If Syscmd.Project.Update(False,False) = True Then 
        '----删除临时升级目录----
        If FileSys.DirectoryExists("D:\UpdateTemporary") = True Then
            FileSys.DeleteDirectory("D:\UpdateTemporary",2,2)
        End If
        Application.restart
        Return '升级完成后必须先中止后面的代码,否则会出错
    End If
Else
    MessageBox.Show("由于网络原因下载升级文件失败,请稍后再升级!")
End If

上面的代码运行下载完成后就什么都没有了,也没有提示升级完成,项目也不会自动重新启动,如果在命令窗口单独运行Application.restart可以重启项目,
为什么上面的代码升级不可以呢

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/4 9:55:00 [只看该作者]

我在afterOpenProject直接执行这句代码,没问题

 

If Syscmd.Project.Update(False,False) = True Then

    Application.restart

End If

 

会先升级,然后提示升级结束请重启,点击确定后,重启项目。


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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/4 16:28:00 [只看该作者]

怎么就不行呢?
我的升级代码是在两处,一处是aftopenproject事件中,大小版的升级都是根据发布日期来判断进行,
另外一处如6楼的代码是在配置栏的一个按钮上,此时项目已经打开,用户在使用中任何时候中只要人为点击这个按钮都下载Update2.Zip到本地D盘再进行升级,不考虑小版本发布日期,目的是有时升级的内容只有个别用户需要,打开项目时就不用提示升级,而让他手动点击按钮升级即可,免得为一个人的功能可能几十人都升级没必要
是不是这句代码If Syscmd.Project.Update(False,False) = True Then  还会自己判断发布日期是否大于本地的当前版本的发布日期,然后才升级?

如果小版本升级时不考虑发布日期,是不是不能用ft默认的这句,想实现只要点击下载成功就进行升级应该怎么写?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/4 16:39:00 [只看该作者]

如果用这句代码 Syscmd.Project.Update 都是会检测update.txt的日期才升级的。当然,你可以人为的修改update.txt的日期实现你需要的升级。

 

或者是自己编写升级代码,代码也很简单,就是复制文件粘贴,但需要用到 vbs、bat 来做。


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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/4 17:19:00 [只看该作者]

'下载文件&解压文件&升级文件--------------------
If ftp.Download(dfile,dpath,True) Then  '显示下载进度
    zip.Open(dpath)
    zip.ExtractAll(utmp1)
    zip.Close
    '建立升级批处理命令文件--------------------
    Dim s As String = utmp & "\update.bat"
    If FileSys.FileExists(s) Then
        FileSys.DeleteFile(s)
    End If
    FileSys.WriteAllText(s,"@echo off" & vbcrlf,True,Encoding.Default)
    FileSys.WriteAllText(s,"taskkill /f /im newsource.exe" & vbcrlf,True,Encoding.Default)
    FileSys.WriteAllText(s,"@cls" & vbcrlf,True,Encoding.Default) '清除屏幕.清除删除 foxtable.exe 进程后屏幕反馈的信息.
    FileSys.WriteAllText(s,"echo Wscript.Sleep Wscript.Arguments(0) * 1000>Delay.vbs" & vbcrlf,True,Encoding.Default)
    FileSys.WriteAllText(s,"Delay.vbs 3" & vbcrlf,True,Encoding.Default)
    FileSys.WriteAllText(s,"del Delay.vbs" & vbcrlf,True,Encoding.Default)
    FileSys.WriteAllText(s,"xcopy /s /e /q /y " & utmp1 & "\*.* " & upath & vbcrlf,True,Encoding.Default) '复制升级文件,采用upath变量自动判断升级路径
    FileSys.WriteAllText(s,"@cls" & vbcrlf,True,Encoding.Default) '清除屏幕.清除升级文件后屏幕反馈的信息.
    FileSys.WriteAllText(s,"start " & ProjectPath & "..\" & ename & vbcrlf,True,Encoding.Default) '重启,"..\"表示上一级目录
    FileSys.WriteAllText(s,"rd /s /q " & utmp & vbcrlf,True,Encoding.Default) '删除临时文件夹
    
    Dim Proc As New Process '定义一个新的Process
    Proc.File = s '指定要打开的文件
    Proc.Verb = "Open" '指定动作
    Proc.Start()
    proc.WaitForExit
End If

这是以前用的,但每次都会弹出一个CMD的窗口感觉怪怪的,而且有时会被杀毒软件直接杀掉,后来就没用了,还有更好的方式吗?要怎么改进才行

 回到顶部
总数 24 1 2 3 下一页