Захватить всю консоль из процесса - PullRequest
1 голос
/ 14 октября 2010

У меня есть приложение .net, которое должно порождать консольный процесс (приложение Java) и захватывать выходные данные, чтобы реагировать на него различными способами.

У меня нет особых проблем с получениемпроцесс порожден, и получает большую часть вывода, но некоторые из него отсутствуют.Я предполагаю, что он как-то не собирается "стандартный вывод", но мне нужно выяснить, как захватить его.

Public Sub Start()
    Dim cmdArgs As String
    cmdArgs = "-jar """ & Config.ServerJar & """"

    '' Configure the main server process
    mServerProcess = New Process
    With mServerProcess.StartInfo
        .WorkingDirectory = Config.WorkingDirectory
        .FileName = Config.Java
        .Arguments = cmdArgs
        .UseShellExecute = False
        .CreateNoWindow = True
        .RedirectStandardError = True
        .RedirectStandardInput = True
        .RedirectStandardOutput = True
    End With

    '' Wire up an event handler to catch messages out of the process
    AddHandler mServerProcess.OutputDataReceived, AddressOf OutputHandler
    AddHandler mServerProcess.ErrorDataReceived, AddressOf ErrorHandler

    '' Start the server process
    mServerRunning = False
    mServerProcess.Start()

    '' Wire up the writer to send messages to the process
    Dim ioWriter As IO.StreamWriter = mServerProcess.StandardInput
    ioWriter.AutoFlush = True

    '' Start listening for output
    mServerProcess.BeginOutputReadLine()

    '' Sleep for a while to let the server settle
    Threading.Thread.Sleep(5000)

    '' Send test command to the server
    ioWriter.WriteLine("test")

    '' Wait for the server to terminate
    mServerProcess.WaitForExit()
    mServerRunning = False

End Sub

Private Sub OutputHandler(ByVal SendingProcess As Object, _
                          ByVal OutLine As DataReceivedEventArgs)

    If Not OutLine.Data Is Nothing Then
        Debug.Print("STD:" & OutLine.Data)
    End If
End Sub

Итак, мой вопрос, как я могу все консольный вывод?

1 Ответ

0 голосов
/ 14 октября 2010

Я идиот.

Я забыл включить вывод ошибок.

    mServerProcess.BeginOutputReadLine()

должно быть

    mServerProcess.BeginOutputReadLine()
    mServerProcess.BeginErrorReadLine()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...