もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
別のコンソールアプリのexeを実行したときに、
戻り値ではなくて、コマンドプロンプトで実行したときに黒窓に出てくるアレを受け取りたい。
例えば、ipconfigのコマンドだと、下記のような文字列を受け取りたい。
やり方
ProcessStartInfoのRedirectStandardOutput
をtrueにしたものを、
Process.Start()
に渡して実行させ、そのプロセスのStandardOutput
を見る。
下記が、サンプルコード。
※こちらのコードほぼそのまんまです。ありがとうございます。
using System.Diagnostics; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { // 実行するファイル string command = @"TestProcess.exe"; var psInfo = new ProcessStartInfo(); psInfo.FileName = command; psInfo.CreateNoWindow = true; psInfo.UseShellExecute = false; psInfo.RedirectStandardOutput = true; // 標準出力をリダイレクト psInfo.RedirectStandardError = true; // 標準エラー出力をリダイレクト var p = Process.Start(psInfo); string output = p.StandardOutput.ReadToEnd(); // 標準出力の読み取り string errOutput = p.StandardError.ReadToEnd(); // 標準出力の読み取り Debug.WriteLine(DateTime.Now.ToString() + " " + output); Debug.WriteLine(DateTime.Now.ToString() + " " + errOutput); } } }
※↑で呼んでいる「TestProcess.exe」は、こちらで作ったものと同じ。
非同期版はこちら
https://tera1707.com/entry/2023/08/16/220208
参考
コンソール・アプリケーションの出力を取り込むには?
https://atmarkit.itmedia.co.jp/ait/articles/0710/11/news123.html