- PR -

Process.Start()で起動したプロセスの終了待機について

1
投稿者投稿内容
toc
会議室デビュー日: 2003/10/08
投稿数: 15
投稿日時: 2006-09-25 10:34
よろしくお願いいたします。

VB.NET 2005にて受注に対して添付されたファイル(主に図面)を関連付けされたアプリで起動し、
編集後のファイル内容を元の画面に表示する、というアプリケーションを開発しています。

<以下、サンプルコード>
Dim exePath As String = ファイルに関連付けされたアプリを取得するメソッド()
Dim p As Process = System.Diagnostics.Process.Start(exePath, 開くファイル名)
p.WaitForExit()
'〜再描画の処理〜

上記のように常に新しいプロセスとして起動しプロセスの終了をWaitForExit()で待機しているのですが、
WordやExcel等(おそらくMDIアプリ)の場合、別にWord(or Excel)が起動している状態で上記処理を実行しますとWaitForExit()が有効にならない(終了待機しない)現象が発生しています。

デバッグにてProcessオブジェクトの各種プロパティを調べてみたところ、
・正常に動作する場合(別Word等が起動されていない)
Process.MainWindowTitle などの情報が表示されている。
・別Word等が起動されていて、正常に動作しない場合
Process.MainWindowTitle などに "プロセスは終了しているため、要求された情報は利用できません。" となっている。Process.WaitForExit()にて例外が発生するわけではない。

以上のようなことがわかりました。

何が問題で、こういった現象が発生するのでしょうか?
若しくは、別の実装方法などがございましたらご教示ください。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-09-25 11:25
引用:

何が問題で、こういった現象が発生するのでしょうか?



アプリケーションには、既に同型アプリケーションが起動済みである場合、起動済みのアプリケーションインスタンスに対して処理を移譲して自分自身は終了するものがあるためです。

引用:

若しくは、別の実装方法などがございましたらご教示ください。



基本的に、「起動するアプリケーション」の仕様にあわせて作りこみをするしかありません。

Office シリーズのアプリケーションであれば、オートメーション起動すれば、確実に単独で立ち上がったような気がします。
toc
会議室デビュー日: 2003/10/08
投稿数: 15
投稿日時: 2006-09-25 13:40
ご返答ありがとうございます。

引用:

アプリケーションには、既に同型アプリケーションが起動済みである場合、起動済みのアプリケーションインスタンスに対して処理を移譲して自分自身は終了するものがあるためです。

基本的に、「起動するアプリケーション」の仕様にあわせて作りこみをするしかありません。

Office シリーズのアプリケーションであれば、オートメーション起動すれば、確実に単独で立ち上がったような気がします。



やはりそうせざるを得ないのですね。
今回の案件に関してはユーザーより終了待機できなくともよい(元々WordやExcelはピクチャボックスに表示されないため)との回答があったため、これで解決にしようと思います。

どうもありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-09-25 20:25
クライアント環境をいじって良いなら、
DDE を使わないように設定してもらう、とか。
_________________
1

スキルアップ/キャリアアップ(JOB@IT)