0

次のコードを実行して、vb.netアプリからコマンドを実行しました。

    Dim CMDServer As Diagnostics.ProcessStartInfo
    Dim CMDReply As Diagnostics.Process
    CMDServer = New Diagnostics.ProcessStartInfo
    CMDServer.WorkingDirectory = "C:/"
    CMDServer.FileName = "cmd.exe"
    CMDServer.UseShellExecute = False
    CMDServer.RedirectStandardOutput = True
    CMDServer.RedirectStandardError = True
    CMDServer.CreateNoWindow = True
    CMDServer.Arguments = "/C " + command
    CMDReply = Process.Start(CMDServer)
    MsgBox("START")
    Dim Reply As String = ""
    If Not CMDReply.HasExited Then
        CMDReply.WaitForExit()
    End If
    MsgBox("EXIT")
    Try
        Dim ext = CMDReply.ExitCode
        Reply = CMDReply.StandardOutput.ReadToEnd()
        MsgBox(ext.ToString + "   " + Reply)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

ほとんどすべてのコマンドで正常に動作しますがcommand="help"、プログラムがにとどまっている場合CMDReply.WaitForExit()。ここで何が問題になるのか誰かが説明できますか?

4

1 に答える 1

1

標準デッドロック。最初に出力を読み取ってから、終了を待ちます。すべての出力を読み取るまで、プログラムは終了できません。あなたが持っているコードは、バッファに収まる出力がほとんどない場合にのみ機能します。

ハンス・パッサンのコメントより

于 2016-03-14T18:41:00.933 に答える