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#アプリがそれを妨げているようです。

ReadLine() の代わりに Read() を使用しようとしましたが、読み取りの前後に StandardOutput ストリームをフラッシュしようとしましたが、成功しませんでした。HandbrakeCLI はエンコードの進行状況を書き込むときに stdout を上書きするため、C# で自動化すると通常のプロセスのように動作しないのではないかと疑っています。

4

1 に答える 1

0

私はそれを考え出した。stderr を C# アプリケーションにリダイレクトしていましたが、消費していませんでした。stderr が消費されるまでプロセスが停止していました。

于 2015-07-30T22:43:28.387 に答える