.NET TIPS

コマンド・プロンプトを表示せずにコンソール・アプリケーションを実行するには?[C#、VB]

デジタルアドバンテージ 遠藤 孝信
2007/10/04

 Windowsアプリケーションなどから外部のコンソール・アプリケーション(.EXEファイル)やバッチ・ファイル(.BATファイル)を起動する場合、単純にProcessクラス(System.Diagnostics名前空間)のStartメソッド(静的メソッド)を使って実行*1しただけでは、余計なコマンド・プロンプト(正確にはコンソール・ウィンドウ)が開いて実行されてしまう。

*1 これについては「TIPS:ほかのアプリケーションを実行するには?」で解説している。

 特に、すぐ実行が完了するようなコンソール・アプリケーションの場合には、コンソール・ウィンドウが一瞬だけ開くことになり、非常に目障りなものとなる。本稿では、コンソール・ウィンドウを開かずに外部のコンソール・アプリケーションを実行する方法について解説する。

CreateNoWindowプロパティとUseShellExecuteプロパティの設定

 先に挙げたProcessクラスのStartメソッドでは、次のようにパラメータに実行ファイルのパスを直接指定することにより、簡単に外部アプリケーションを実行できる。

Process.Start(@"c:\MyApp\ConsoleApp.exe");
Process.Start("c:\MyApp\ConsoleApp.exe")
Process.Startメソッドによる外部アプリケーションの実行(上:C#、下:VB)
アプリケーションにコマンド引数を与える場合には、第2パラメータで指定する。このコードを記述する場合にはSystem.Diagnostics名前空間をインポートしている必要がある。

 しかし上述したように、これだけではアプリケーションがコンソール・アプリケーションである場合に、コンソール・ウィンドウが開いてしまう。

 コンソール・ウィンドウを開かずにコンソール・アプリケーションを実行するには、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)
コンソール・ウィンドウを開かずにコンソール・アプリケーションを実行(上:C#、下:VB)
CreateNoWindowプロパティをtrueに、UseShellExecuteプロパティをfalseに設定したProcessStartInfoオブジェクトをProcess.Startメソッドに渡して実行する。アプリケーションにコマンド引数を与える場合には、Argumentsプロパティで指定する。このコードを記述する場合にはSystem.Diagnostics名前空間をインポートしている必要がある。

 ここでは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ファイルを実行する場合には、これを設定しておかないとコンソール・ウィンドウが開いてしまう。

 なお、外部のコンソール・アプリケーションを実行した場合には、結果確認などの目的でその出力が必要になる場合がある。その取得については別稿で解説する予定だ。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
使用ライブラリ:ProcessStartInfoクラス(System.Diagnostics名前空間)

この記事と関連性の高い別の.NET TIPS
コンソール・アプリケーションの出力を取り込むには?
コマンド・プロンプトを表示しないコンソール・アプリケーションを作成するには?
ほかのアプリケーションを実行するには?
コンソール・アプリケーションで[閉じる]ボタンを無効にするには?
別のユーザーでほかのアプリケーションを実行するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH