- PR -

VB2005 他アプリケーションの終了 (VB2005初心者)

1
投稿者投稿内容
のぶ
会議室デビュー日: 2009/02/12
投稿数: 5
投稿日時: 2009-02-13 15:56
VB2005にて、他アプリケーションを下記記述にて起動しています。
(起動はどうにかうまくいっています)

Dim prc3D As System.Diagnostics.Process = _
System.Diagnostics.Process.Start(ThreeDSIMULATOR_PATH, strParam)

m_3D_Process = prc3D 'フォームの先頭で宣言 Private m_3D_Process As Process

追加仕様として、先に起動していたアプリケーションが残っていた場合は、
一度終了させた後、起動をかけるようにしたく、下記記述で試してみましたが
うまく動作しませんでした。

m_3D_Process.CloseMainWindow()

どうも m_3D_Process = prc3Dの記述でm_3D_Processに
値が正常に入っていない為だと思うのですが・・よくわかりません。
どのように記述すれば、先に起動したアプリケーションを終了させることができるのでしょうか。
ご教授よろしくお願い致します。

まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2009-02-13 16:41
引用:

のぶさんの書き込み (2009-02-13 15:56) より:
値が正常に入っていない為だと思うのですが・・よくわかりません。


思うと言われても、読む方は判りません。
ステップデバッグ等で確認した結果、そうだったのでしょうか?

他アプリケーションとして、メモ帳を使ったらどうなりますか?
きいぼー
会議室デビュー日: 2004/01/30
投稿数: 7
投稿日時: 2009-02-13 17:43
prc3Dは、今起動したプロセスを保持していますので、
既に起動中の物ではないと言うことでしょうか?

起動中のプロセスを操作する方法として、
http://www.atmarkit.co.jp/fdotnet/dotnettips/151winshow/winshow.html
は参考になりませんか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-02-14 03:02
引用:

のぶさんの書き込み (2009-02-13 15:56) より:

m_3D_Process = prc3D 'フォームの先頭で宣言 Private m_3D_Process As Process


「参照」 を渡しているだけだと理解して、上記のような記述をしていますか?

引用:

追加仕様として、先に起動していたアプリケーションが残っていた場合は、
一度終了させた後、起動をかけるようにしたく、下記記述で試してみましたが
うまく動作しませんでした。

m_3D_Process.CloseMainWindow()


うまく動作しなかったというのは具体的にどうなったのでしょうか? 例外が発生したのでしょうか? たとえば、

引用:

どうも m_3D_Process = prc3Dの記述でm_3D_Processに値が正常に入っていない為だと思うのですが・・よくわかりません。


ここでもし参照が受け取れていないのであれば例外が発生します。 それと "値" と書かれていますが、Process クラスのインスタンスを値と表現するのは適切ではありません。 このあたりから、「参照」 の概念がないような気がします。

引用:

きいぼーさんの書き込み (2009-02-13 17:43) より:

prc3Dは、今起動したプロセスを保持していますので、既に起動中の物ではないと言うことでしょうか?


最初に Process.Start メソッドの戻り値であるインスタンスを prc3D に格納しているので、それはなさそうな気がしましたが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
いとっと
常連さん
会議室デビュー日: 2005/06/10
投稿数: 33
投稿日時: 2009-02-14 10:56
引用:

のぶさんの書き込み (2009-02-13 15:56) より:

追加仕様として、先に起動していたアプリケーションが残っていた場合は、
一度終了させた後、起動をかけるようにしたく、下記記述で試してみましたが
うまく動作しませんでした。

m_3D_Process.CloseMainWindow()



先に起動していたアプリケーションというのをどのように特定していますか?
例えば、自分自身が起動したプロセスであれば、起動した時のProcessクラスのインスタンスを保持していればそれを使えばいいだけですし、そうでない場合もProcess.GetProcesses()とかProcess.GetProcessByName()を使えばそのプロセスを特定出来ます。

あとはうまくいかないという場合にはエラーが出るのか、何も動かないのかというのは記載された方がよいと思います。
1

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