2010-11-22 2 views
5

Ich habe die Methode:Warum leitet diese Methode meine Ausgabe nicht von .exe [ffmpeg] um?

public static string StartProcess(string exePathArg, string argumentsArg, int timeToWaitForProcessToExit) 
    { 
     string retMessage = ""; 

     using (Process p = new Process()) 
     { 
      p.StartInfo.FileName = exePathArg; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.Arguments = argumentsArg; 
      p.StartInfo.UseShellExecute = false; 



      try 
      { 
       p.Start(); 
       StreamReader myOutput = p.StandardOutput; 

       retMessage = "STANDARD OUTPUT: " + myOutput.ReadToEnd(); 

       p.WaitForExit(timeToWaitForProcessToExit); 
      } 
      catch (Exception ex) 
      { 
       retMessage = "EXCEPTION THROWN: " + ex.ToString(); 

      } 
      finally 
      { 
       try 
       { 
        p.Kill(); 
       } 
       catch { } 
      } 
     } 

     return retMessage; 
    } 

Aber es funktioniert nicht meine Ausgabe zu retMessage umleiten. Irgendwelche Ideen? Ich habe die Argumente in einer Bat-Datei getestet und die Ausgabe wird definitiv ausgegeben.

Cheers, Pete

+2

Vielleicht schreibt der Prozess nicht in StandardOutput sondern nur in StandardError? – dtb

Antwort

8

Meine Vermutung (mit dtb Kommentar vereinbaren): AFAIK ffmpeg Binärdaten Rohr aus stdout verwendet (Multimedia, Snapshots, etc.) und stderr wird zur Protokollierung verwendet. In Ihrem Beispiel verwenden Sie stdout.

So ändern Sie Code:

p.StartInfo.RedirectStandardError = true; 
    ... 
    string log = p.StandardError.ReadToEnd(); 

und es sollte Ihr Problem lösen.

+0

GREAT! thats sortierte es danke für den Beitrag wirklich geholfen, ich hätte nie zu überprüfen, danke nochmal! – Exitos

+0

Ich hatte dasselbe Problem mit der Ausgabe von ffmpeg. StandardOutput gibt leer zurück, die gesamte Ausgabe kommt von standardError. Ich hoffe, dass dies die Zeit von jemand anderem spart. – dvdmn

Verwandte Themen