Sie können Ihre Ausgabe synchron oder asynchron verarbeiten.
1. Synchrone Beispiel
static void runCommand()
{
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c DIR"; // Beachten Sie den /c Befehl (*)
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
//* Lesen Sie die Ausgabe (oder den Fehler)
string output = process.StandardOutput.ReadToEnd();
Console.WriteLine(output);
string err = process.StandardError.ReadToEnd();
Console.WriteLine(err);
process.WaitForExit();
}
Hinweis, dass es besser ist, sowohl Ausgabe als auch Fehler zu verarbeiten: sie müssen getrennt behandelt werden.
(*) Für einige Befehle (hier StartInfo.Arguments
) müssen Sie die /c
Direktive hinzufügen, sonst friert der Prozess im WaitForExit()
ein.
2. Asynchrone Beispiel
static void runCommand()
{
//* Erstellen Sie Ihren Prozess
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c DIR";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
//* Setzen Sie Ihre Ausgabe- und Fehler- (asynchrone) Handler
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler);
//* Starten Sie den Prozess und die Handler
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
//* Bearbeiten Sie die Ausgabe (schreiben Sie in Konsole/Log/StringBuilder)
Console.WriteLine(outLine.Data);
}
Wenn Sie keine komplizierten Operationen mit der Ausgabe durchführen müssen, können Sie die OutputHandler-Methode umgehen, indem Sie die Handler direkt in der Zeile hinzufügen:
//* Setzen Sie Ihre Ausgabe- und Fehler- (asynchrone) Handler
process.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
process.ErrorDataReceived += (s, e) => Console.WriteLine(e.Data);