Wie man NUR Standard-Fehler-Stream und nicht Standard-Ausgabe-Stream eines Prozesses in C #, .net

8

Ich schreibe eine Anwendung in C #, die irgendwann eine Anwendung als untergeordneten Prozess mit der Klasse Process mit Asynchronous IO Umleitung wie folgt startet:

%Vor%

Das Problem mit diesem Code ist, dass ich zwar stderr richtig in mein Textfeld umgeleitet habe, aber diese Umleitung scheint zu verbergen der Prozess ' stdout Ausgabe, die ich nicht umgeleitet werden soll!

Wenn ich stdout umleitung, kann ich sehen, wie es richtig umgeleitet wird, aber ist es nicht möglich, stderr nur umzuleiten und nicht stdout? Ich habe mich in Bezug auf dieses Thema umgeschaut und gegoogelt, aber alle Diskussionen scheinen bezüglich der Umleitung von stdout zu gehen ... wie zum Beispiel: Wie man den Standard-Output-Stream und den Standard-Fehler-Stream gleichzeitig asynchron liest

Ich wäre dankbar für jede Hilfe diesbezüglich!

    
bethrezan 16.10.2012, 17:53
quelle

1 Antwort

2

Das ist nicht möglich, da Ausgabe- und Fehlerhandles gleichzeitig umgeleitet werden. MSDN Artikel STARTUPINFO beschreibt STARTF_USESTDHANDLES Flag .

Aber es gibt eine gute Nachricht. Das Einbehalten der Ausgabe von Child-Prozessen ist weiterhin möglich. Du musst nur:

  • redirect Kindprozessausgabe
  • an die untergeordnete Prozesskonsole anfügen
  • schreibt die Ausgabe des Child-Prozesses zurück in seine Konsole

Rufen Sie also direkt nach dem Prozessstart

auf %Vor%

und verwenden Sie dann Console.WriteLine in Ihrem DataReceived -Handler.

    
mikalai 16.10.2012 21:49
quelle

Tags und Links