我试图通过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#自动化时它不会像正常进程那样。
答案 0 :(得分:0)
我明白了。我将stderr重定向到我的C#应用程序,但没有消耗它。这个过程一直持续到stderr被消耗为止。