2010-11-22 15 views
5

Ben yöntemi vardır:Neden bu yöntem çıktımı .exe [ffmpeg] adresinden yönlendirmiyor?

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

Ama retMessage benim çıkışını yönlendirmek etmez. Herhangi bir fikir olan var mı? Argümanlar bir yarasa dosyasında test ettim ve çıktı kesinlikle çıktı.

Alkış, Pete

+2

Belki bu işlem StandardOutput'a değil, yalnızca StandardError'a yazmıyor mu? – dtb

cevap

8

Benim tahminim (DTB yorumuna katılıyorum): AFAIK ffmpeg boru dışarı (vb multimedya, fotoğraf,) ikili veri ve stderr'e stdout'u kullandığı günlük amaçlar için kullanılmaktadır. Örneğinizde stdout'u kullanıyorsunuz.

Ee, size kodunu değiştirmek:

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

ve sorunu çözmek gerekir.

+0

BÜYÜK! thats bu yazı için teşekkür ederiz gerçekten yardım etmek için olsa bile, asla tekrar teşekkürler! – Exitos

+0

Ffmpeg'in çıkışıyla aynı sorunla karşılaştım. StandardOutput boş döndürür, tüm çıktılar standardError'dan gelir. Umarım bu, bir başkasının zamanını kurtarır. – dvdmn