2009年2月23日

外部アプリケーションを起動する

自分が作っているアプリケーションとは別の、外部アプリケーションを起動するには、Visual BasicではShell関数を使用していた。.NETにおいてもVisualBasic名前空間に存在しているが、せっかくなのでC#流に(C#でもVisualBasic名前空間を使用することは可能)。

C#ではProcessクラスを使用する。

一番簡単な方法はProcessクラスのStartメソッドに、外部アプリケーションのパスを指定する方法。

System.Diagnostics.Process.Start("ping", "localhost");

外部アプリケーションが終了するまで、待機するにはStartメソッドで取得したProcessクラスオブジェクトのWaitForExitメソッドを呼ぶ

System.Diagnostics.Process p = System.Diagnostics.Process.Start("ping", "localhost");
p.WaitForExit();

StartメソッドにはProcessStartInfoクラスのインスタンスを渡すオーバーライドも存在する。ProcessStartInfoクラスを使用すれば、より詳細に外部アプリケーションを制御できる。
例えば、CreateNoWindowsプロパティ、UseShellExecuteプロパティを指定するとpingのプロンプトは表示されない。

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.FileName = "ping";
info.Arguments = "localhost";

info.CreateNoWindow = true;
info.UseShellExecute = false;

System.Diagnostics.Process p = System.Diagnostics.Process.Start(info);
p.WaitForExit();

ProcessクラスのStandardOutputプロパティから外部アプリケーションの標準出力を取得できる

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.FileName = "ping";
info.Arguments = "localhost";

info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardOutput = true;

System.Diagnostics.Process p = System.Diagnostics.Process.Start(info);

while (!p.HasExited)
{
    Console.WriteLine(p.StandardOutput.ReadLine());
}
p.WaitForExit();

0 件のコメント:

コメントを投稿