C#でコンソールアプリケーションを起動し、出力を取得する

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();

ところが、これだけだと実はコマンドプロンプトのウィンドウが一瞬表示されてしまい少々見苦しい事にななります。
そこで対策として以下のように一行追加します。

   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();
   
   string output = consoleApp.StandardOutput.ReadToEnd();
   



コメント

このブログの人気の投稿

TabError: inconsistent use of tabs and spaces in indentation

ディスプレイ ドライバーの応答停止と回復

マクロを含んだ.XLSがExcel2010で開けない