以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  自动升级不要弹出cmd.exe窗口  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=62978)

--  作者:HappyFt
--  发布时间:2015/1/11 14:06:00
--  自动升级不要弹出cmd.exe窗口

用了狐友提供的自动升级的确实好用

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=40763&authorid=0&page=0&star=1

但就是有个问题下面这段代码运行后总会先打开一个Cmd.exe的一个升级窗口,很多用户升级时xp都会拦掉这个文件或提示;部分代码如下文件中

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动升级部份代码.txt

 

    \'Dim up1 As String = utmp & "\\up1.vbs"
    \'If FileSys.FileExists(up1) Then
    \'FileSys.DeleteFile(up1)
    \'End If
    \'FileSys.WriteAllText(up1,"Set ws = CreateObject(""Wscript.Shell"")" & vbcrlf,True,Encoding.Default)
    \'FileSys.WriteAllText(up1,"ws.run ""cmd /c Update.bat"",vbhide",True,Encoding.Default)

网上查了很久有介绍说把批处理保存为一个VBS的文件如上面红色部份就不会弹出Cmd窗口,但总不成功。现在就是想实现在升级时象QQ等那样,前面只是显示一个正在升级的窗口就行,那些批处理都在后台运行不要显示出来,升级完正常打开程序就可以,要怎么才能实现?ft的方式每次升级完还要提示重新启动不能自动打开也不好?

谢谢!


 


--  作者:有点甜
--  发布时间:2015/1/11 15:21:00
--  

呃,加参数

 

shell("d:\\test.bat", 0)


--  作者:HappyFt
--  发布时间:2015/1/15 17:55:00
--  

为什么最近写多点文本上传总出错,传不了,只好写在下面的文本文件中了,谢谢!

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:不弹出cmd窗口问题.txt


--  作者:有点甜
--  发布时间:2015/1/15 18:04:00
--  

 不需要创建啊,直接写就是创建和清空了啊

 

FileSys.WriteAllText(up_vbs,"Set ws = CreateObject(""Wscript.Shell"")" & vbcrlf,False,Encoding.Default)


--  作者:HappyFt
--  发布时间:2015/1/15 18:22:00
--  

但第二句如下,总提示出错没有申明updat.bat变量,不知道是哪个引号没对,要怎么写?

FileSys.WriteAllText(up_vbs,"ws.run "" & utmp & "\\Update.bat" & "",0",True,Encoding.Default)

 

要调用utmp这个变量所代表的目录下的update.bat文件。就是把

ws.run "c:\\Update.bat",0  这样的目录C:\\换成变量utmp总是写不对。

[此贴子已经被作者于2015-1-15 18:29:49编辑过]

--  作者:有点甜
--  发布时间:2015/1/15 19:04:00
--  
FileSys.WriteAllText(up_vbs,"ws.run """ & utmp & "\\Update.bat" & """,0",True, Encoding.Default)
--  作者:HappyFt
--  发布时间:2015/1/15 21:18:00
--  

谢谢,原来是还要加一个双引号,@echo off
taskkill /f /im foxtable.exe
echo Wscript.Sleep Wscript.Arguments(0) * 1000>Delay.vbs
Delay.vbs 3
del Delay.vbs
xcopy /s /e /q /y " & utmp1 & "\\*.* " & upath
start " & ProjectPath & "..\\" & ename

rd /s /q " & utmp

 

还有个问题,如果update.bat文件中有参数,运行

FileSys.WriteAllText(up_vbs,"ws.run """ & utmp & "\\Update.bat" & """,0",True, Encoding.Default)

时如何传递给bat文件,bat文件中又要如何接收呢?


--  作者:有点甜
--  发布时间:2015/1/15 21:24:00
--  
 呃,bat文件是你生成的,要怎么控制,就在前面控制,无法传递参数的。
--  作者:HappyFt
--  发布时间:2015/1/16 12:44:00
--  

\'---通过VBS执行批处理避免弹出CMD窗口
Dim up_vbs As String = utmp & "\\up_vbs.vbs"
FileSys.WriteAllText(up_vbs,"Set ws = CreateObject(""Wscript.Shell"")" & vbcrlf,false,Encoding.Default)
FileSys.WriteAllText(up_vbs,"ws.run ""cmd /c " & utmp & "\\Update.bat" & """,vbhide",True,Encoding.Default)

 

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

 

通过上面的代码升级时是可以不显显cmd窗口,但还有个问题,就是每次下载升级包完成后电脑屏幕都会闪烁一下,好象在运行升级代码前项目窗口打开又突然关掉一样。是否要在Proc.Start()前要用什么代码先退出项目才能避免?

--  作者:有点甜
--  发布时间:2015/1/16 14:11:00
--  

 呃,没测试过你说的闪烁问题,直接写试试

 

shell(""" & utmp & "\\Update.bat" & """, 0)