以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  自动升级的代码如何不要弹出CMD窗口  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=72706)

--  作者:HappyFt
--  发布时间:2015/8/4 20:37:00
--  自动升级的代码如何不要弹出CMD窗口

下面是打开项目时自动升级的一段代码,但总是会弹出一个CMD的Dos命令窗口,要如何才能不弹出,只是在前面显示一个“---正在升级---”的对话框,完成后自动打开项目就行

 

代码传不上来,只好放在一个txt文件中了。


 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:自动升级.txt

但总不成功,应该怎么办?

 

谢谢!


--  作者:大红袍
--  发布时间:2015/8/4 21:00:00
--  

直接写 shell(s, 0) 就行。


--  作者:HappyFt
--  发布时间:2015/8/5 19:25:00
--  

 请问这句shell(s,0)要加在哪个位置?象下面这样吗?还是哪里?

 

。。。。

FileSys.WriteAllText(up_vbs,"ws.run ""cmd /c " & utmp & "\\Update.bat" & """,vbhide",True,Encoding.Default)

shell(s,0) 

 

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


 

谢谢!


--  作者:大红袍
--  发布时间:2015/8/5 20:10:00
--  

哦,写错了,这样处理

 

Dim p As new Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False \'关闭Shell的使用
p.StartInfo.RedirectStandardInput = True \'重定向标准输入
p.StartInfo.RedirectStandardOutput = True \'重定向标准输出
p.StartInfo.RedirectStandardError = True \'重定向错误输出
p.StartInfo.CreateNoWindow = True \'设置不显示窗口
p.Start()
p.StandardInput.WriteLine("d:\\test.bat")
p.StandardInput.WriteLine("exit")
Dim strRst As String = p.StandardOutput.ReadToEnd()

msgbox(strRst)

 

 


--  作者:HappyFt
--  发布时间:2015/8/6 11:08:00
--  

谢谢!这样是不会弹出那个窗口了,但是还有两个问题:

1、怎么才能做到升级时在前面一直显示一个“。。。正在升级的窗口。。。”的窗口,直到升级完成时关闭。

2、下面的代码升级后项目不能自动打开,如何才可以升级完成后自动打开项目呢?

 

\'建立升级批处理命令文件--------------------
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 foxtable.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 p As new Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False \'关闭Shell的使用
p.StartInfo.RedirectStandardInput = True \'重定向标准输入
p.StartInfo.RedirectStandardOutput = True \'重定向标准输出
p.StartInfo.RedirectStandardError = True \'重定向错误输出
p.StartInfo.CreateNoWindow = True \'设置不显示窗口
p.Start()
p.StandardInput.WriteLine(utmp & "\\update.bat")

p.WaitForExit


--  作者:大红袍
--  发布时间:2015/8/6 11:24:00
--  

汗,我测试一下下面的代码,不会弹出doc窗口啊

 

Dim up_vbs As String = "d:\\up_vbs.vbs"
Dim Proc As New Process \'定义一个新的Process
Proc.File = up_vbs \'指定要打开的文件
Proc.Start()
proc.WaitForExit


--  作者:HappyFt
--  发布时间:2015/8/6 11:29:00
--  
现在是不会弹出来了,但是项目不能自动重新启动,是哪里的问题呢?
--  作者:大红袍
--  发布时间:2015/8/6 11:35:00
--  

我测试可以打开某个文件

 

---------------------------------------

 

1、bak文件

 

taskkill /f /im foxtable.exe

ping www.baidu.com > d:\\test.txt

start d:\\test.txt

 

2、vbs文件

 

Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c d:\\test.bat",vbhide

 

3、运行代码

 

Dim up_vbs As String = "d:\\up_vbs.vbs"
Dim Proc As New Process \'定义一个新的Process
Proc.File = up_vbs \'指定要打开的文件
Proc.Start()

[此贴子已经被作者于2015/8/6 11:34:44编辑过]