HandbrakeCLI不会通过c#进程实现自动化

本文关键字:进程 实现 自动化 HandbrakeCLI | 更新日期: 2023-09-27 18:05:40

我正在尝试使用c#通过System.Diagnostics.Process类自动化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(输出);行不断地打印出"Encoding: task 1 of 1,0.00 %",这个过程永远不会完成。如果我关闭我的c#应用程序,那么HandbrakeCLI的内存会立即从7,000k上升到145,000k,然后执行我想要它执行的编码。就像我的c#程序在拖我的后腿。

我已经尝试使用Read()而不是ReadLine(),我已经尝试在读取之前和之后刷新StandardOutput流,但没有成功。我有一种怀疑,因为HandbrakeCLI在写编码过程时会覆盖标准输出,所以当它通过c#自动执行时,它不会像一个正常的过程。

HandbrakeCLI不会通过c#进程实现自动化

我明白了。我将错误重定向到我的c#应用程序,但没有消费它。该进程一直挂起,直到stderr被消耗。