利用都度、調べていたのでまとめる。
ソースコード
これが必要
using System.Diagnostics;
StartInfo
を設定して、Process
オブジェクトを生成する。
要Disposeなのでusing
を付ける。
using var p = new Process
{
StartInfo =
{
// 実行プログラムパス
FileName = @"dotnet.exe",
// 実行時引数
Arguments = @"--info",
// 標準出力をリダイレクト
RedirectStandardOutput = true,
// OSシェルを使用しない
UseShellExecute = false
}
};
// 起動
p.Start();
// 標準出力を読み取る
Console.WriteLine(p.StandardOutput.ReadToEnd());
// 終了を待つ
p.WaitForExit();
上記コードで、コマンドライン上にて dotnet --info
した時と同じ出力が得られる
メモ
StartInfo
で実行開始パラメータを設定するFileName
で起動プログラムパスを指定、Arguments
で実行引数指定Arguments
はコマンドライン時と同じようにスペース区切りで複数の引数を指定してOKRedirectStandardInput/Output/Error
を true にするとそれぞれリダイレクトが有効になる- その他、ワーキングディレクトリとかユーザとか指定できたりする
- 実行開始後リダイレクト有効であれば、
Process
のStandardInput/Output/Error
それぞれにStreamReader/Writer
としてアクセスできる - エンコーディングの考慮が必要な場合は実行前に
StartInfo
で指定しておくこと FileName
が実行ファイル(exeなど)でない場合は、UseShellExecute
をtrueにして関連付けられたアプリケーションを起動する。たぶん。- リダイレクトする場合、
UseShellExecute
はfalseにしろって言われる - .NET Framework と Core でデフォルト値の異なるプロパティがあるようだ