我正在尝试连续运行一组测试/诊断程序,无论我做什么,都会同时运行。我假设这是因为程序打开后代码继续运行,然后立即执行sub中的下一个任务。 为了给出一点背景知识,我在前一段时间内已经编写了一个简单的测试脚本,现在需要使用GUI来实现它。批处理文件将一个接一个地打开程序,因为它会等到应用程序关闭然后移动到下一行(除非使用start命令)。
以下是我在vb中使用的内容:
Private Sub btnRunselect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRunselect.Click
If cbDevmgr.Checked = True Then
MessageBox.Show("DEVMGR!")
End If
If cbCamera.Checked = True Then
MessageBox.Show("Camera!")
End If
If cbKeyboard.Checked = True Then
MessageBox.Show("Keyboard!")
End If
If cbMic.Checked = True Then
MessageBox.Show("Mic!")
End If
If cbBit.Checked = True Then
MessageBox.Show("Bit!")
End If
End Sub
用messagebox代替程序启动。
现在,批处理代码是这样的。
:run1
echo .
echo .
echo ----------------------------------
echo . Final Test
echo ----------------------------------
echo .
echo .
SET %S="Final Test"
\utils\nircmdc\nircmdc mutesysvolume 0
\utils\nircmdc\nircmdc setsysvolume 65535
set s=%s: =,%
\utils\nircmdc\nircmdc speak text %S%
:: figure out where the batch drive is
for %%a in (c,d,e,f,g,h,i,j) do if exist %%a:\BurnInTest\bit.exe set drv=%%a
%drv%:
echo .
echo .
echo ----------------------------------
echo. Device Manager
echo ----------------------------------
echo .
echo .
cd C:\Windows\System32\
devmgmt.msc
cd \
%drv%:
echo .
echo .
echo ----------------------------------
echo. Camera Test
echo ----------------------------------
echo .
echo .
\passmark\BurnInTest\AMCap\amcap.exe
echo .
echo .
echo ----------------------------------
echo. Keyboard Test
echo ----------------------------------
echo .
echo .
\passmark\BurnInTest\KeyboardTest\KeyboardTest.EXE -r
echo .
echo .
echo ----------------------------------
echo. Mic Test
echo ----------------------------------
echo .
echo .
\passmark\BurnInTest\SoundCheck\SoundCheck.EXE -R
GOTO run6
RUN6
任何帮助都会非常感激!提前谢谢。
答案 0 :(得分:1)
查看System.Diagnostics.Process.Start
方法。您可以使用以下内容替换MessageBox
:
Dim P As New System.Diagnostics.Process()
P.StartInfo.UseShellExecute = False
P.StartInfo.FileName = "C:\\full\\path\\to.exe"
P.StartInfo.Arguments = "arguments to pass to program"
P.Start() ' or P.Start("C:\\full\\path\\to.exe", "arguments")
P.WaitForExit()
这将使用参数启动程序并等待它退出。如果您不想无限期等待,则会有超时版本的功能。如果您不打电话WaitForExit
,则流程开始,程序流程正常继续。 Here's some info on Process.StartInfo
,UseShellExecute
默认为true
。
您还可以使用VB中的Shell
函数启动进程;除了它返回一个进程ID(Process.Start
如果它开始,则返回true
),它也减少了.NET'因为它只能在Visual Basic运行时库中使用,所以如果你切换到C#,你仍然可以使用开箱即用的Process.Start
'但是必须导入Microsoft.VistualBasic
运行时(额外的.DLL)才能使用Shell
函数。
如果您对此感到好奇,那么why we need shell execute就是一个很好的答案。
希望有所帮助。