我正在尝试通过 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(输出); 行不断打印出“Encoding: task 1 of 1, 0.00 %”并且该过程永远不会完成。如果我杀死我的 C# 应用程序,那么 HandbrakeCLI 会立即从内存中的 7,000k 飙升至 145,000k,然后执行我希望它执行的编码。就像我的 C# 应用程序正在阻止它。
我尝试使用 Read() 而不是 ReadLine() 并且尝试在读取之前和之后刷新 StandardOutput 流但没有成功。我怀疑,由于 HandbrakeCLI 在写入编码进度时会覆盖 stdout,因此当通过 C# 自动化时,它不会像正常过程一样运行。