2017-01-07 3 views
0

Ich rufe qaac.exe (AAC-Encoder) von Process.Start(). Das Programm qaac.exe wird während der Codierung in dieselbe Zeile ausgegeben. Ich bin mir nicht sicher, was der technische Ausdruck dafür ist, aber es bewirkt, dass das Programm nicht beendet wird, obwohl es die Datei bearbeitet hat. Hier ist mein Code:Umleiten von Standard-Ausgang Casues-Programm, um nicht zu beenden

string output = null; 

var proc = new Process(); 

proc.StartInfo.FileName = "qaac.exe"; 
proc.StartInfo.Arguments = "-v256 -q2 file.wav"; 
proc.StartInfo.WorkingDirectory = @"C:\"; 
proc.StartInfo.CreateNoWindow = true; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.StartInfo.RedirectStandardError = true; 
proc.StartInfo.UseShellExecute = false; 

proc.Start(); 

output = proc.StandardOutput.ReadToEnd(); 
output += "\r\n"; 
output += proc.StandardError.ReadToEnd(); 

proc.WaitForExit(); 

Wenn ich in der -s Argument übergeben an die qaac.exe App im Code (Konsolnachrichten unterdrücken) über es gut funktioniert. Also meine Frage ist, wie greife ich die Ausgabe von einem externen Programm, das in die gleiche Zeile im Konsolenfenster schreibt?

+0

Siehe [Link] (http://stackoverflow.com/questions/2012509/process-standardoutput-readtoend-always-empty) Zweite Antwort (14+) – Graffito

Antwort

1

Ist qaac.exe Schreiben an StandardError? Es kann sein, dass der Puffer für sie auffüllt und einen Deadlock verursacht, wie in der Dokumentation erwähnt.

// Um ​​Deadlocks zu vermeiden, verwenden Sie asynchrone Leseoperationen für mindestens einen der Streams.
// Führen Sie keinen synchronen Lesevorgang am Ende der beiden umgeleiteten Streams durch.

+0

AFAIK, 'qaac' schreibt nicht auf 'StandardError'. – JMS10

+0

@ JMS10: Wenn es ohne Ende geht, können Sie Ihren Debugger verwenden, um herauszufinden, wie weit es vor dem Abwürgen reicht. – Guvante

Verwandte Themen