我正在使用Visual Studio 2013创建的程序。该程序做了一些事情,我几乎完成了,但最后一个问题出现了。
在程序中我有三个按钮。一个"强制重启","手动启动"和一个强制停止"。 "强制停止"停止一堆程序,并强制重启"停止它们然后再次启动它们。 "手动启动"启动所有程序。我将使用"手动启动"例如,进一步向下。
这些按钮背后发生的是它启动了一堆蝙蝠文件来完成这项工作。蝙蝠文件包含tasskill /f /im program.exe
和start "c:\program.exe
"。然后是超时并退出的第二个。
问题:
到目前为止一切顺利。问题是当批处理启动程序时,VB程序不会移动到下一个bat文件。它使cmd.exe运行。即使我在批次中有exit
。现在,如果我进入并手动关闭程序或cmd.exe,那么它将从下一个bat文件开始。
现在基本上是这样的:VB按钮 - >批量开始 - >批量运行程序 - >批次不关闭AKA VB不会移动到下一批。
它应该是这样的:VB按钮 - >批量开始 - >批量运行程序 - >批次退出 - >下一批开始 - >批量运行程序 - >批量退出 - > ...
以下是我在VB脚本部分中所得到的内容:
Private Sub btnManualStart_Click(sender As Object, e As EventArgs) Handles btnManualStart.Click
If MessageBox.Show("Do you want to manually start all programs and services?", "OBS", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
Timer2.Start()
Dim FileNum As Integer = FreeFile()
FileClose(FileNum)
TextBox1.Text &= Environment.NewLine & TimeOfDay & (" Manual start made")
Dim shell
shell = CreateObject("wscript.shell")
shell.run("C:\RestartApps\Scripts\Start_program1.bat", 0, True)
shell.run("C:\RestartApps\Scripts\Start_program2.bat", 0, True)
shell.run("C:\RestartApps\Scripts\Start_program3.bat", 0, True)
shell.run("C:\RestartApps\Scripts\Start_program4.bat", 0, True)
shell = Nothing
end if
希望这是可以理解的。
答案 0 :(得分:2)
我不确切知道您的批次在做什么,但在我看来,您可以简单地使用Shell快捷方式:
Dim commands As String() = {
"C:\RestartApps\Scripts\Start_program1.bat",
"C:\RestartApps\Scripts\Start_program2.bat",
"C:\RestartApps\Scripts\Start_program3.bat",
"C:\RestartApps\Scripts\Start_program4.bat"
}
For Each cmd As String In commands
Shell(cmd, AppWinStyle.Hide, False)
Next
确保在重载(String,AppWinStyle,Boolean)上将第三个参数设置为FALSE。这个布尔值确保执行被设置为" fire and forget"。 (与你已经传递的那个相同,为TRUE(等待退出代码))。
编辑:将AppWinStyle更改为隐藏,这将以静默方式运行您的批次
答案 1 :(得分:1)
您需要改进批处理脚本中使用的start
,如下所示:
start "" /B "c:\program.exe"
Start
命令:启动程序,命令或批处理脚本(opens in a new window)。注意:
""
始终包含 TITLE 这可以是一个简单的字符串,也可以只是一对空引号""
; /B
启动应用而不创建新窗口。另一种方法:使用call
代替start ""
,如下所示:
call "c:\program.exe"