0

我正在尝试通过 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# 自动化时,它不会像正常过程一样运行。

4

1 回答 1

0

我想到了。我正在将 stderr 重定向到我的 C# 应用程序,但没有使用它。该进程一直挂起,直到 stderr 被消耗。

于 2015-07-30T22:43:28.387 回答