Windowsアプリケーションから既存のコンソールアプリケーションを起動し、結果を受け取りたい場合があります。(コンソールアプリケーションをGUI対応に書き換えればいい話ですが、ソースコードが使用できないケースやメンテナンス上の問題で書き換えたくないなど諸般の事情でそのまま使いたいことがしばしばあります)
こんなときVisual Studio 2005の「スニペットの挿入」を使うと非常に簡単に実装することが出来ます。
まずはじめにMicrosoft社のサイトからコンソールアプリケーションの起動に必要なスニペット(Application Code Snippets)を入手してインストールする。
これには複数のスニペットが含まれていますが、今回の作業では「Capture Output from a Console Application」さえインストールしてあればOK.
スニペットのインストール方法について詳しくはこちら を参照。
Visual Studio 2005で「スニペットの挿入」で「Capture Output from a Console Application」を挿入すると以下のようなコードが展開されます。
ここでConsoleApplication.exeの部分を目的のコンソールアプリケーションに書き換える。
System.Diagnostics.Process consoleApp = new System.Diagnostics.Process();
consoleApp.StartInfo.UseShellExecute = false;
consoleApp.StartInfo.RedirectStandardOutput = true;
consoleApp.StartInfo.FileName = “ConsoleApplication.exe”;
consoleApp.Start();
consoleApp.WaitForExit();
string output = consoleApp.StandardOutput.ReadToEnd();
consoleApp.StartInfo.UseShellExecute = false;
consoleApp.StartInfo.RedirectStandardOutput = true;
consoleApp.StartInfo.FileName = “ConsoleApplication.exe”;
consoleApp.Start();
consoleApp.WaitForExit();
string output = consoleApp.StandardOutput.ReadToEnd();
ところが、これだけだと実はコマンドプロンプトのウィンドウが一瞬表示されてしまい少々見苦しい事にななります。
そこで対策として以下のように一行追加します。
System.Diagnostics.Process consoleApp = new System.Diagnostics.Process();
consoleApp.StartInfo.UseShellExecute = false;
consoleApp.StartInfo.RedirectStandardOutput = true;
consoleApp.StartInfo.CreateNoWindow = true;
consoleApp.StartInfo.FileName = “ipconfig.exe”;
consoleApp.Start();
consoleApp.WaitForExit();
consoleApp.StartInfo.UseShellExecute = false;
consoleApp.StartInfo.RedirectStandardOutput = true;
consoleApp.StartInfo.CreateNoWindow = true;
consoleApp.StartInfo.FileName = “ipconfig.exe”;
consoleApp.Start();
consoleApp.WaitForExit();
string output = consoleApp.StandardOutput.ReadToEnd();