Przechodzenie bezpośrednio przez wyjście konsoli z Process.Start bezpośrednio

używamProcess.Start z aplikacji wiersza polecenia .NET do uruchomienia innej aplikacji wiersza polecenia. Nie chcę przechwytywać danych wyjściowych aplikacji, chcę po prostu przejść bezpośrednio do konsoli.

Z programem poniżej wynik wydaje się po prostu znikać w powietrzu. Jeśli wyjdęCreateNoWindow domyślniefalse następnie otrzymuję dane wyjściowe w nowym oknie konsoli, ale chcę je wyświetlić w oryginalnym oknie konsoli.UseShellExecute <- false jest również potrzebne w inny sposóbCreateNoWindow jest zmuszonyfalse.

Mogłabym zrobić coś znacznie bardziej skomplikowanegoRedirectStandardOutput iRedirectStandardError a następnie przechwytywanie danych wyjściowych i ponowne drukowanie, ale w połączeniu zWaitForExit, szczególnie jak w mojej prawdziwej aplikacji, której chcę użyćwersja, która ma limit czasu.

Czy w jakiś sposób mogę po prostu uzyskać standardowe wyjście i błąd przekazywane bezpośrednio?

Zachowanie, które widzę, jest mylące, ponieważ dokumentacja dlaRedirectStandardOutput wydaje się wyraźnie mówić:

Gdy proces zapisuje tekst do standardowego strumienia, tekst ten jest zazwyczaj wyświetlany na konsoli.

Oto kod demonstracyjny. Kiedy go uruchomięDummyRunner.exe Otrzymuję dane wyjściowe z pierwszego bitu kodu i kiedy go uruchomięDummyRunner.exe DummyRunner.exe Nic nie dostaję. Chociaż kod znajduje się w F #, nie ma nic szczególnego dla tego problemu, który znam.

module DummyRunner

open System
open System.Diagnostics

[<EntryPoint>]
let main args =

    // do something when called with no arguments, just so we can call
    // this with itself as an argument to make a self-contained test
    if args.Length = 0 then
        for n = 1 to 5 do
            printfn "Waiting %d" n
            System.Threading.Thread.Sleep(1000)
        System.Environment.Exit(0)

    let cmd = args.[0]
    let cmdArgs = args.[1..]

    let startInfo = ProcessStartInfo(cmd, String.Join(" ", cmdArgs))

    startInfo.UseShellExecute <- false
    startInfo.CreateNoWindow <- true

    let p = Process.Start(startInfo)

    p.WaitForExit()
    p.ExitCode

questionAnswers(1)

yourAnswerToTheQuestion