.NET TIPS

ほかのアプリケーションを実行してその終了を待つには?

デジタルアドバンテージ 一色 政彦
2005/02/25

 「TIPS:ほかのアプリケーションを実行するには?」では、.NETプログラム内からほかのアプリケーションを実行する方法を紹介している。この方法では、Processクラス(System.Diagnostics名前空間)のStartメソッドを呼び出して、アプリケーションを実行している。Startメソッドの動作仕様では、アプリケーションが実際に起動すれば、すぐにそのメソッド呼び出しは完了し、呼び出し側での処理が継続する。つまり、アプリケーションの終了を待たずに次の処理に進めるわけである。

 しかし場合によっては、起動したアプリケーションの処理が完全に終わるまで次の処理に進ませたくないことがある。例えば、

  1. 圧縮ファイルの解凍を行うアプリケーション
  2. 解凍されたファイルを解析して別フォーマットで再保存するアプリケーション

という2つの外部アプリケーションを順番に呼び出すとき、1が完了するのを待たなければ(つまりファイルが解凍されなければ)、2は実行できない。

 このような場合に対処するには、Startメソッドによって実行されたアプリケーションが実際に終了するのを待機する必要がある。本稿ではその方法を紹介する。

WaitForExitメソッドによる待機

 ほかのアプリケーションを実行し、その実行終了を待つ場合には、プログラムの流れは次のようになる。

(1)Processクラスのオブジェクトを生成する。

(2)ProcessオブジェクトのStartInfoプロパティに起動するアプリケーション(プロセス)に関する情報(詳細後述)を設定する。

(3)ProcessオブジェクトのStartメソッドを呼び出す(このメソッドは、前掲のTIPSで利用している静的メソッドではなく、インスタンス・メソッドである)。これによりアプリケーションが起動するが、前掲のTIPS同様、呼び出しはすぐに完了する。

(4)ProcessオブジェクトのWaitForExitメソッドを呼び出す。このWaitForExitメソッドが、起動したアプリケーションが終了するまで待機してくれる(つまりWaitForExitメソッドを呼び出したプログラムの実行はここで停止する)。

 (2)のProcessオブジェクトのStartInfoプロパティの値はProcessStartInfoクラス(System.Diagnostics名前空間)のオブジェクトである。ProcessStartInfoクラスのメンバには、起動するアプリケーションを指定するためのFileNameプロパティや、そのアプリケーションに対するコマンドライン引数をセットするためのArgumentsプロパティなどがある。(3)のProcessオブジェクトのStartメソッドを呼び出すためには、これらのプロパティのうち、最低限FileNameプロパティを指定しておかなければならない。このFileNameプロパティには、前述のとおり、Startメソッドにより起動するアプリケーションのファイル名を指定する。

 次のサンプル・プログラムは、以上のプログラムの流れを実際に実装したものだ。

using System.Diagnostics;

public class ProcessStart {
  static void Main() {
    Process proc = new Process();             // (1)
    proc.StartInfo.FileName= "notepad.exe";   // (2)
    proc.Start();                             // (3)
    proc.WaitForExit();                    // (4)
    Console.WriteLine("メモ帳、終了!");
  }
}
アプリケーションの実行終了を待機するサンプル・プログラム(C#)
 
Imports System.Diagnostics

Public Class ProcessStart
  Shared  Sub Main()
    Dim proc As New Process()                 ' (1)
    proc.StartInfo.FileName= "notepad.exe"    ' (2)
    proc.Start()                              ' (3)
    proc.WaitForExit()                     ' (4)
    Console.WriteLine("メモ帳、終了!")
  End Sub
End Class
アプリケーションの実行終了を待機するサンプル・プログラム(VB.NET)

 このサンプル・プログラムを実行すると、WaitForExitメソッドの個所(上記コードの太字部分)で、「メモ帳」が終了されるまで実行が停止し、「メモ帳」が終了されるとプログラムの実行が再開し、最後に「メモ帳、終了!」というメッセージをコンソールに出力する。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
関連TIPS:ほかのアプリケーションを実行するには?
 
この記事と関連性の高い別の.NET TIPS
ほかのアプリを実行して終了コードを得るには?
ほかのアプリケーションを実行するには?
ほかのアプリケーションを起動して入力可能になるまで待つには?
コンソール・アプリケーションを途中で終了するには?
コンソール・アプリケーションで終了コードを返すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

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

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

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

@IT Sepcial
ソリューションFLASH