C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトで[FFmpeg]など外部プログラムを実行した結果やエラー文字列を受け取る方法です。
出力とエラーは異なる
外部プログラムを操作した結果やエラーは[System.Diagnostics]アセンブリの[Process]クラスを使って受け取ることが可能です。
[Process]には[StandardOutput]や[StandardError]プロパティがあり、それぞれ[StreamReader]として値の受取が可能です。
プロパティを利用するには、プロセスを開始する前に[RedirectStandardOutput]や[RedirectStandardError]の値を[True]にする必要があります。
また、出力とエラーは分けられているので、コマンドのエラーを取得するには[StandardError]プロパティを使います。
具体的に[ffmpeg.exe]のエラーを取得するには、こんな感じで行います。
string args = "";
var process = Process.Start(new ProcessStartInfo("ffmpeg.exe", args)
{
  CreateNoWindow = true,
  UseShellExecute = false,
  RedirectStandardOutput = true,
  RedirectStandardInput = false,
  RedirectStandardError = true,
});
if (process != null)
{
  string resultOutput = process.StandardOutput.ReadToEnd();
  string resultError = process.StandardError.ReadToEnd();
  process.WaitForExit();
  process.Close();
}
実行して、エラーが発生すると[resultError]にエラー(コマンドプロンプトに表示される文字列)が取得できます。
まとめ
今回は、短い記事ですがWinUI3プロジェクトで外部プログラムを実行した結果やエラー文字列を取得する方法について紹介しました。
[Process]で外部アプリを実行する際に[RedirectStandardError]プロパティを有効にしておくと、プロセス開始時に[StandardError]プロパティでエラー文字列が取得可能です。
WinUI 3 アプリで外部アプリを開始した際のエラー文字列を表示したい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。
