HandbrakeCLI不会通过C#进程自动化

时间:2015-07-30 16:39:40

标签: c# process handbrake

我试图通过System.Diagnostics.Process类使用C#自动化HandbrakeCLI。但是,只要我的程序试图运行该过程,似乎该过程永远不会进展。

以下是我的流程设置:

Process process = new System.Diagnostics.Process();
ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.FileName = parameters.HandbrakeLocation;
startInfo.Arguments = arguments;

process.StartInfo = startInfo;
process.Start();

string output = string.Empty;
while ((output = process.StandardOutput.ReadLine()) != null)
{
    Debug.WriteLine(output);
}
process.WaitForExit();

HandbrakeCLI.exe确实出现在我的进程列表中。 Debug.WriteLine(输出); line连续打印出“编码:任务1的1,0.00%”并且该过程永远不会完成。如果我杀了我的C#应用​​程序,那么HandbrakeCLI会立即从内存中的7,000k上升到145,000k,然后执行我想要的编码。就像我的C#app一样阻止它。

我尝试使用Read()而不是ReadLine(),我尝试在读取之前和之后刷新StandardOutput流,但没有成功。我怀疑是因为HandbrakeCLI在写入编码进度时会覆盖stdout,所以当通过C#自动化时它不会像正常进程那样。

1 个答案:

答案 0 :(得分:0)

我明白了。我将stderr重定向到我的C#应用​​程序,但没有消耗它。这个过程一直持续到stderr被消耗为止。