以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- ftp升级后如何才能自动重新打开项目 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=104700) |
||||
-- 作者:happyft -- 发布时间:2017/8/3 13:34:00 -- ftp升级后如何才能自动重新打开项目 用了下面的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 -- 发布时间:2017/8/3 14:08:00 -- 看看我的代码,能否帮到你: http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=103041&skin=0
|
||||
-- 作者:有点甜 -- 发布时间:2017/8/3 14:25:00 -- 方法一:
方法二:
If Syscmd.Project.Update(False,False) = True Then Application.restart End If |
||||
-- 作者:HappyFt -- 发布时间: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因该会自动中止后面的代码吧
|
||||
-- 作者:有点甜 -- 发布时间:2017/8/3 16:45:00 -- 以下是引用HappyFt在2017/8/3 15:50:00的发言:
加在删除了临时目录后再重新启动没问题吧,这样的话是不是下面那个Return就不用了,因为restar因该会自动中止后面的代码吧
没问题。return要不要都无所谓。 |
||||
-- 作者:HappyFt -- 发布时间: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可以重启项目, 为什么上面的代码升级不可以呢
|
||||
-- 作者:有点甜 -- 发布时间:2017/8/4 9:55:00 -- 我在afterOpenProject直接执行这句代码,没问题
If Syscmd.Project.Update(False,False) = True Then Application.restart End If
会先升级,然后提示升级结束请重启,点击确定后,重启项目。 |
||||
-- 作者:HappyFt -- 发布时间:2017/8/4 16:28:00 -- 怎么就不行呢? 我的升级代码是在两处,一处是aftopenproject事件中,大小版的升级都是根据发布日期来判断进行, 另外一处如6楼的代码是在配置栏的一个按钮上,此时项目已经打开,用户在使用中任何时候中只要人为点击这个按钮都下载Update2.Zip到本地D盘再进行升级,不考虑小版本发布日期,目的是有时升级的内容只有个别用户需要,打开项目时就不用提示升级,而让他手动点击按钮升级即可,免得为一个人的功能可能几十人都升级没必要 是不是这句代码If Syscmd.Project.Update(False,False) = True Then 还会自己判断发布日期是否大于本地的当前版本的发布日期,然后才升级? 如果小版本升级时不考虑发布日期,是不是不能用ft默认的这句,想实现只要点击下载成功就进行升级应该怎么写? |
||||
-- 作者:有点甜 -- 发布时间:2017/8/4 16:39:00 -- 如果用这句代码 Syscmd.Project.Update 都是会检测update.txt的日期才升级的。当然,你可以人为的修改update.txt的日期实现你需要的升级。
或者是自己编写升级代码,代码也很简单,就是复制文件粘贴,但需要用到 vbs、bat 来做。 |
||||
-- 作者:HappyFt -- 发布时间: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的窗口感觉怪怪的,而且有时会被杀毒软件直接杀掉,后来就没用了,还有更好的方式吗?要怎么改进才行
|