This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: Prozess-Output via C# anzeigen
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Hin und wieder kommt es dann doch einmal vor, dass via .NET andere Prozesse aufgerufen werden und deren Output auf die Standard-Ausgabe eingelesen werden soll. Dazu gibt es mehrere M��glichkeiten.
Die erste Variante liest alle Daten aus der Standard-Ausgabe ein, wenn der Prozess fertig abgelaufen ist:
ProcessStartInfo psi = new ProcessStartInfo("MyPathMyApp.exe");
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = new Process();
p.StartInfo = psi;
p.Start();
StreamReader sr = p.StandardOutput;
p.WaitForExit();
string output = sr.ReadToEnd();
sr.Close();
Debug.WriteLine(output);
Manchmal dauert der Prozess selbst l��nger und es ist wichtig, die Daten dann zu bekommen, wenn diese auf der Standard-Ausgabe geschrieben werden. Hierzu kann seit .NET 2.0 mit dem Event OutputDataReceived gearbeitet werden. Das sieht so aus:
privatevoid StartProcess()
{
ProcessStartInfo psi = new ProcessStartInfo("MyPathMyApp.exe");
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = new Process();
p.OutputDataReceived +=
new DataReceivedEventHandler(p_OutputDataReceived);
p.StartInfo = psi;
p.Start();
p.BeginOutputReadLine();
p.WaitForExit();
}
void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Debug.WriteLine(e.Data);
}
In diesen F��llen werden die Informationen immer nur als Debug-Informationen geschrieben. Sie k��nnen aber nat��rlich auch anderweitig weiterverwendet werden.
Hier noch ein kleiner Hinweis: Dadurch wird alles abgefasst, was auf die Standard-Ausgabe geschrieben wird. Liegt also beispielsweise eine Windows-Forms-Anwendung vor, die zwecks Debugging-Informationen (siehe Visual Studio) viele Informationen via Console.WriteLine schreibt und das damit verteilt wird, k��nnen diese Informationen dadurch ebenfalls ausgelesen werden. Das sollte man sich in manchen F��llen schon ganz gut ��berlegen (siehe Debug.WriteLine).