自分が作っているアプリケーションとは別の、外部アプリケーションを起動するには、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();
コメント
コメントを投稿