2010-11-22 7 views
5

私は方法があります:この方法はなぜ私の出力を.exe [ffmpeg]からリダイレクトしないのですか?

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; 
    } 

をしかし、それはretMessageに私の出力をリダイレクトdoes notの。誰にでもアイデアはありますか?私はバットファイルの引数をテストし、出力は間違いなく出力されます。

乾杯、 ピート

+2

おそらく、プロセスはStandardOutputに書き込むのではなく、StandardErrorだけに書き込みますか? – dtb

答えて

8

私の推測(DTBさんのコメントに同意): 私の知る限りffmpegはパイプにバイナリデータ(マルチメディア、スナップショットなど)を標準出力を使用し、標準エラー出力をログ記録の目的のために使用されています。あなたの例では、stdoutを使用します。

だから、あなたにコードを変更:

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

、それはあなたの問題を解決する必要があります。

+0

大変! thats sorted itポストのおかげで本当に助けになりました。 – Exitos

+0

私はffmpegの出力で同じ問題がありました。 StandardOutputは空を返し、すべての出力はstandardErrorから来ます。これが他の人の時間を節約することを望みます。 – dvdmn

関連する問題