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


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

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

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望: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

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

谢谢!

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望: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因该会自动中止后面的代码吧

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望: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可以重启项目,
为什么上面的代码升级不可以呢

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望: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默认的这句,想实现只要点击下载成功就进行升级应该怎么写?


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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望: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的窗口感觉怪怪的,而且有时会被杀毒软件直接杀掉,后来就没用了,还有更好的方式吗?要怎么改进才行

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/4 17:52:00 [显示全部帖子]

网上查下建立了一个updatebat.vbs的文件,内容如下:
Se t ws = CreateObject("Wscript.Shell") 
ws.run "cmd /c update.bat",vbhide 

这个文件要放在哪里,是升级时自动再建可以吗?
  Dim Proc As New Process '定义一个新的Process
    Proc.File = updatebat.vbs  '指定要打开的文件
    Proc.Verb = "Open" '指定动作
    Proc.Start()
    proc.WaitForExit
还有bat文件可以直接用记事本写好存在attachment下直接调用吗?

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/4 19:32:00 [显示全部帖子]

If ftp.Download("\Update\Update1.Zip","D:\UpdateTemporary\Update1.Zip",True) = True Then '如果下载程序文件成功
    UpdatePath = "D:\UpdateTemporary"
    RemoteUpdate = False
    
    '--将update日期文件加2天
    Dim s As String = FileSys.ReadAllText(UpdatePath & "\Update.txt")  '读取文件
    Dim d As String() = s.split("|")
    Dim d1 As Date = CDate(d(0))
    Dim d2 As String = d(1)
    d1 = d1.AddDays(2)
    FileSys.WriteAllText(UpdatePath & "\Update.txt",d1 & "|" & d2 , False)  '重新写入文件
  msgbox(11)
    If Syscmd.Project.Update(False,False) = True Then '发现新版本时不提示用户,因为前面已提示过
  msgbox(12)
        Application.restart  '重新启动
    End If
End If

能显示11却没有显示22, 说明没有用唉

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/4 21:51:00 [显示全部帖子]

这个是手工点击升级用的,启动项目时才用有日期判断的,关键是我这里测试为什么不行啊!!!!只执行到显示了msgbox(11)就什么都没有了,也没错误提示

用批处理的代码如下:
'----建立批处理文件----------------
Dim s As String = Path & "\update.bat"
If FileSys.FileExists(s) Then
    FileSys.DeleteFile(s)
End If
FileSys.WriteAllText(s,"@echo off" & vbcrlf,True,Encoding.Default)  '参数true表示不覆盖
FileSys.WriteAllText(s,"taskkill /f /im foxtable.exe" & 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 " & temp1 & "\*.* " & upPath & vbcrlf,True,Encoding.Default) '复制升级文件
FileSys.WriteAllText(s,"@cls" & vbcrlf,True,Encoding.Default) '清除屏幕.清除升级文件后屏幕反馈的信息.
FileSys.WriteAllText(s,"start " & ProjectPath & "..\" & ename & vbcrlf,True,Encoding.Default) '重启
FileSys.WriteAllText(s,"rd /s /q " & temp1 & vbcrlf,True,Encoding.Default) '删除临时文件夹

'---建立vbs文件---------
'Dim s2 As String = Path & "\upbat.vbs"
'If FileSys.FileExists(s2) Then
    'FileSys.DeleteFile(s2)
'End If
'FileSys.WriteAllText(s2,"S et ws = CreateObject(""Wscript.Shell"")" & vbcrlf,True,Encoding.Default)  '参数true表示不覆盖
'FileSys.WriteAllText(s2,"ws.run ""cmd /c update.bat"",vbhide" & vbcrlf,True,Encoding.Default)

Dim Proc As New Process '定义一个新的Process
Proc.File = s  '指定要打开的文件  
Proc.Verb = "Open" '指定动作
Proc.Start()
proc.WaitForExit

上面红色处直接用批处理文件打开就可以正常升级,但是就出弹出一个讨厌的cmd的命令执行窗口,  
如果改成Proc.File = s2  这样就不成功,用vbs文件调用bat要怎么弄才行


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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/4 22:54:00 [显示全部帖子]

谢谢有点蓝,总算解决了这个问题,可以了.这种通过vbs调用bat的情况杀毒软件是不是就不会拦截?

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17026 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/8/21 11:31:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:vbs.jpg
图片点击可在新窗口打开查看

XP的系统升级时会出现这个?
还有这次新版升级用这种方式结果全部都不能用,要不提示配置文件失效,要不就是被杀毒软件拦截,什么都没有提示,只能五六十台机重新安装,用户网管都烦死了.


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