てくメモ

trivial な notes

【C#】外部プロセスを扱うなら今は

ProcessXを使いたい。
参考:neue cc - ProcessX - C#でProcessを C# 8.0非同期ストリームで簡単に扱うライブラリ


標準のProcessクラスは、現代風でない使い心地であるほか、ハマりポイントもある。
参考:非同期外部プロセス起動で標準出力を受け取る際の注意点 - Qiita


そのため、直触りは幸福度が高くない。
そこでProcessX。コンパクトなのでサクッと導入して using。

using Cysharp.Diagnostics;


例として、ImageMagickでも起動してみる。

// 簡潔!
await ProcessX.StartAsync("magick source.png -resize 128x dest.bmp").WaitAsync();

コマンド実行そのままというフィールで使える。


次は標準出力を扱ってみる。

// !!!
 var data = await ProcessX.StartReadBinaryAsync($"magick source.png -resize 128x bmp:-");

直触りでやろうとするととても億劫な部分なので、とても幸福度が高い。


CancellationTokenを使ったキャンセル、ExitCodeに応じたエラー、直接ストリームで入出力を触るようなAPI、などなどきっちり用意されている。


今からならProcessクラスを調べるよりこちらの方がQOLの高い選択肢、だと思う。