ホームに戻る
出典 :
外部アプリケーションを起動する、ファイルを関連付けられたソフトで開く - .NET Tips (VB.NET,C#...) C#でProcessを使って別アプリを実行(起動)する方法 #C# - Qiita
目次 :

外部プログラムの呼び出し

System.Diagnostics.Process オブジェクトを用いることで、別のプログラムを起動できる。

コード例(同期呼び出し)

using System.Diagnostics; // プロセス起動情報( ProcessStartInfo )生成 var sInfo = new ProcessStartInfo { CreateNoWindow = true, //< 新しいウィンドウを開かない : Yes RedirectStandardOutput = true, //< 標準出力のリダイレクト : 行う UseShellExecute = false, //< シェル機能 : 使用しない StandardOutputEncoding = Encoding.UTF8, //< 標準出力のエンコーディング : UTF-8 FileName = "git.exe", //< 実行するプログラム名 Arguments = "hogehoge", //< 実行するプログラムに渡す引数(文字列) }; // プロセス開始( Process.Start() ) using (var p = Process.Start(sInfo)) { // 標準出力を読み取る string output = p.StandardOutput.ReadToEnd(); // プロセスの終了まで待機する p.WaitForExit(); p.Close(); }
上記の例では、"git.exe"に引数"hogehoge"を渡して起動し、実行結果を標準出力から取得している。

注意が必要な点

標準出力から結果を取得する際、日本語などのマルチバイト文字を含んでいると文字化けを起こすことがある。
これは、標準出力のエンコーディングのデフォルトがシフトJISとなっているためで、
上記コードのようにエンコーディングをUTF-8に設定することで回避できる
( ProcessStartInfo.StandardOutputEncoding = Encoding.UTF8 )

Processクラスのメンバ(抜粋)

種別 メンバ 解説 付記
メソッド Start() プロセスを起動する
WaitForExit() プロセスの終了まで待機する
Close() プロセスに関連付けられたすべてのリソースを解放する
BeginOutputReadLine() 非同期で出力の読み取りを開始する
プロパティ EnableRaisingEvents bool プロセス終了時に Exit イベントを発行するか
StartInfo.FileName string 起動するプログラムファイル名
StartInfo.Arguments string プログラムに与える引数
StartInfo.RedirectStandardOutput bool プログラムの出力を標準出力にリダイレクトするか
StartInfo.RedirectStandardInput bool プログラムの入力を標準入力にリダイレクトするか
StartInfo.UseShellExecute bool プロセスの起動にオペレーティングシステムのシェルを使用するか 標準入出力リダイレクト時は必ず false に設定する必要がある)
StartInfo.CreateNoWindow bool プロセスの起動時にウィンドウを生成しないか