Windowsアプリケーションからコンソール・アプリケーションやバッチ・ファイルを起動する際、ただProcess.Startメソッドで実行するだけでは、余計なコマンド・プロンプトが開いてしまう。これをProcessStartInfoクラスによって解消する方法を解説する。
Windowsアプリケーションなどから外部のコンソール・アプリケーション(.EXEファイル)やバッチ・ファイル(.BATファイル)を起動する場合、単純にProcessクラス(System.Diagnostics名前空間)のStartメソッド(静的メソッド)を使って実行*1しただけでは、余計なコマンド・プロンプト(正確にはコンソール・ウィンドウ)が開いて実行されてしまう。
*1 これについては「TIPS:ほかのアプリケーションを実行するには?」で解説している。
特に、すぐ実行が完了するようなコンソール・アプリケーションの場合には、コンソール・ウィンドウが一瞬だけ開くことになり、非常に目障りなものとなる。本稿では、コンソール・ウィンドウを開かずに外部のコンソール・アプリケーションを実行する方法について解説する。
先に挙げたProcessクラスのStartメソッドでは、次のようにパラメータに実行ファイルのパスを直接指定することにより、簡単に外部アプリケーションを実行できる。
Process.Start(@"c:\MyApp\ConsoleApp.exe");
Process.Start("c:\MyApp\ConsoleApp.exe")
しかし上述したように、これだけではアプリケーションがコンソール・アプリケーションである場合に、コンソール・ウィンドウが開いてしまう。
コンソール・ウィンドウを開かずにコンソール・アプリケーションを実行するには、ProcessStartInfoクラス(System.Diagnostics名前空間)のオブジェクトによりプロセス起動時の詳細情報を設定しておき、そのオブジェクトをStartメソッドに渡してアプリケーションを起動すればよい。具体的には次のように記述して行う。
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.FileName = @"c:\MyApp\ConsoleApp.exe"; // 実行するファイル
psInfo.CreateNoWindow = true; // コンソール・ウィンドウを開かない
psInfo.UseShellExecute = false; // シェル機能を使用しない
Process.Start(psInfo);
Dim psInfo As New ProcessStartInfo()
psInfo.FileName = "c:\MyApp\ConsoleApp.exe" ' 実行するファイル
psInfo.CreateNoWindow = True ' コンソール・ウィンドウを開かない
psInfo.UseShellExecute = False ' シェル機能を使用しない
Process.Start(psInfo)
ここではProcessStartInfoオブジェクトの3つのプロパティについて値を設定している。順に見ていこう。
FileNameプロパティには実行するアプリケーションのパスを指定する。これはStartメソッドを呼び出すのに最低限必要となるプロパティだ。
続く2つがここでのポイントである。まずCreateNoWindowプロパティにはtrueを設定する。これにより、コンソール・アプリケーションが「コンソール・ウィンドウなし」で実行されるようになる(デフォルトはfalse)*2。
次のUseShellExecuteプロパティは、アプリケーションの実行に際してWindowsのシェル機能を使うかどうかを指定するが、これにはfalseを設定する(デフォルトはtrue)。
このUseShellExecuteプロパティがtrueの場合には、例えばFileNameプロパティに「http://www.atmark.co.jp/」を指定することにより、そのURLのWebページを既定のブラウザで開くことができる。しかしコンソール・アプリケーションの場合には、シェル機能によりコンソール・ウィンドウが開かれてしまう。
*2 Windowsアプリケーションにおいて、.EXEファイルを実行する場合にはCreateNoWindowプロパティの設定は実際には不要(UseShellExecuteプロパティの設定のみでOK)だが、.BATファイルを実行する場合には、これを設定しておかないとコンソール・ウィンドウが開いてしまう。
なお、外部のコンソール・アプリケーションを実行した場合には、結果確認などの目的でその出力が必要になる場合がある。その取得については別稿で解説する予定だ。
カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
使用ライブラリ:ProcessStartInfoクラス(System.Diagnostics名前空間)
Copyright© Digital Advantage Corp. All Rights Reserved.