1

batファイルを実行していて、出力をコンソールウィンドウに表示しています。現在、batファイルが意図的に失敗しています(batファイルには「STARETwww.webaddress.com」が含まれています)。エラーをキャッチしてすべてが機能しますが、コンソールウィンドウはすぐに閉じます。私はそれを開いたままにしておきたいのですが、これまでのところ、そうする方法を探しても解決策は見つかりませんでした。

私が現在持っているコード:

Me.processStartInfo = New ProcessStartInfo("C:\Admin\PsTools\psexec.exe", "\\PCName -u domain\" & user & " -p " & pass & " pathtobatfile")
Me.processStartInfo.RedirectStandardError = True
Me.processStartInfo.RedirectStandardOutput = True
Me.processStartInfo.WindowStyle = ProcessWindowStyle.Hidden
Me.processStartInfo.UseShellExecute = False
Dim process As System.Diagnostics.Process = Nothing

'Start the process, which runs the bat file on the remote server
process = System.Diagnostics.Process.Start(Me.processStartInfo)
AddHandler process.OutputDataReceived, AddressOf OutputHandler
process.BeginOutputReadLine()
process.WaitForExit()

Dim errorresponse As DialogResult
   If process.HasExited And process.ExitCode <> 0 Then
      errorresponse = MessageBox.Show("There was an error. Exit code: " & process.ExitCode & _
                        ". Do you wish to view the log?", "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error)
        ElseIf process.HasExited And process.ExitCode = 0 Then
            MessageBox.Show("The update completed successfully.", "Success", MessageBoxButtons.OK)
        End If
        If errorresponse = DialogResult.Yes Then
          'To fill in later
        End If

そして、イベントハンドラサブ:

Private Shared Sub OutputHandler(ByVal sendingProcess As Object, ByVal output As DataReceivedEventArgs)
    Console.WriteLine(output.Data)
End Sub

また、同期出力(StreamReaderとConsole.WritelineとReadline()を使用)を実行しようとしましたが、それも機能しませんでした。

4

2 に答える 2

1

最後に追加してみてください

set err=%ERRORLEVEL%
pause
exit %err%
于 2012-10-17T06:14:12.027 に答える
0

ファイルpauseの最後に追加してみてください。BATまたは、プロセスを介してbatファイルを起動する場合は、引数cmdを追加できます。/k

cmd /k pathToBatFile
于 2012-10-17T00:41:21.013 に答える