Foxtable(狐表)用户栏目专家坐堂 → 自动升级不要弹出cmd.exe窗口


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

主题:自动升级不要弹出cmd.exe窗口

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
自动升级不要弹出cmd.exe窗口  发帖心情 Post By:2015/1/11 14:06:00 [显示全部帖子]

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

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的方式每次升级完还要提示重新启动不能自动打开也不好?

谢谢!


 


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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/1/15 17:55:00 [显示全部帖子]

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

 

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


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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By: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文件中又要如何接收呢?


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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By: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()前要用什么代码先退出项目才能避免?

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/1/16 21:20:00 [显示全部帖子]

以下是引用有点甜在2015-1-16 14:11:00的发言:

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

 

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

谢谢甜老师,不知道直接用是怎么用?按下面这样用吗,但升级后会出现错误提示vbs调用中不能用括号()

或者下面这段要怎么写?

Dim up_vbs As String = utmp & "\up_vbs.vbs"
FileSys.WriteAllText(up_vbs,"shell(""" & utmp & "\Update.bat" & """, 0)",False,Encoding.Default)

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


 回到顶部