ホームに戻る
出典 :
目次 :
外部プログラムの呼び出し
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 |
プロセスの起動時にウィンドウを生成しないか |
|