- PR -

VB.NET ProcessクラスのHasExited()を使用するとエラーになる

1
投稿者投稿内容
うめ
会議室デビュー日: 2003/07/01
投稿数: 13
お住まい・勤務地: 関西地区
投稿日時: 2004-01-23 11:56
いつも、参考にさせてもらっています。

プロセスが終了しているかを取得するために
PorcessクラスのHasExited()を使用していまが、

そこで以下のエラーが発生してしまいます。
(エラーメッセージ)
このオブジェクトに関連付けられているプロセスはありません。

ソースは以下のようにしています。
ProcessStartInfoのメンバーの値をいろいろ変えたのですが
だめでした。

どうすれば、HasExited()をエラーなく利用できるのでしょうか?
どなたか知っている方がいらっしゃれば、ご教授お願いいたします。

(ソース)
Try
Dim startInfo As New ProcessStartInfo
Dim path As String = "○○.exe"
Dim prcss As Process = New Process


With startInfo
.FileName = path
.Verb = ""
.UseShellExecute = False
.WorkingDirectory = 実行するディレクトリを指定
.RedirectStandardError = True
.RedirectStandardInput = True
.RedirectStandardOutput = True
.Arguments = "param1"
.CreateNoWindow = True
End With
prcss.Start(startInfo)
      
      ’終了確認ループ
Do

エラー箇所→ If (prcss.HasExited() = True) Then Exit Do
Loop

Catch ex As Exception
  エラー処理
    End Try
架空兎
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 78
お住まい・勤務地: さいたま氏
投稿日時: 2004-01-23 13:13
Process#Start(ProcessStartInfo) メソッドはクラスメンバなので、
そのメソッドの戻り値(Process オブジェクト)を受ければ、
そのオブジェクトの HasExited プロパティで値を取得することができます。

また、Process オブジェクトの StartInfo プロパティに ProcessStartInfo オブジェクトを
セットして Process#Start() メソッド(インスタンスメンバ)を実行してもできます。


[ メッセージ編集済み 編集者: 架空兎 編集日時 2004-01-23 13:29 ]
うめ
会議室デビュー日: 2003/07/01
投稿数: 13
お住まい・勤務地: 関西地区
投稿日時: 2004-01-23 13:24
架空兎さま、ご返答ありがとうございます。
問題は解消されました。
本当に助かりました、今後ともよろしくお願いいたします。
架空兎
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 78
お住まい・勤務地: さいたま氏
投稿日時: 2004-01-23 13:40
引用:

うめさんの書き込み (2004-01-23 11:56) より:

コード:

’終了確認ループ
Do
If (prcss.HasExited() = True) Then Exit Do
Loop




ふと気になったのですが、Process#WaitForExit メソッドを使った方が良いのでは?


↓補足ありがとうございます。

[ メッセージ編集済み 編集者: 架空兎 編集日時 2004-01-23 13:40 ]

[ メッセージ編集済み 編集者: 架空兎 編集日時 2004-01-23 17:08 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-23 14:34
補足:
引用:

架空兎さんの書き込み (2004-01-23 13:40) より:
引用:

うめさんの書き込み (2004-01-23 11:56) より:

コード:
’終了確認ループ
Do
    If (prcss.HasExited() = True) Then Exit Do
Loop




ふと気になったのですが、Process#WaitForExit メソッドを使った方が良いのでは?


Do〜Loopの中で、「prcc.HasExited() = True」の判定が休みなく行われる、つまり、CPU使用率が100%に近くなるからです。Process#WaitForExitを使うことで、プロセスを休止状態にし、CPU使用率を0%に近くすることができます。
うめ
会議室デビュー日: 2003/07/01
投稿数: 13
お住まい・勤務地: 関西地区
投稿日時: 2004-01-23 16:26
引用:

Jittaさんの書き込み (2004-01-23 14:34) より:
補足:
引用:

架空兎さんの書き込み (2004-01-23 13:40) より:
引用:

うめさんの書き込み (2004-01-23 11:56) より:

コード:
’終了確認ループ
Do
    If (prcss.HasExited() = True) Then Exit Do
Loop




ふと気になったのですが、Process#WaitForExit メソッドを使った方が良いのでは?


Do〜Loopの中で、「prcc.HasExited() = True」の判定が休みなく行われる、つまり、CPU使用率が100%に近くなるからです。Process#WaitForExitを使うことで、プロセスを休止状態にし、CPU使用率を0%に近くすることができます。



架空兎さん、、Jittaさん、ご指摘ありがとうございました。
ご指摘の通りProcess#WaitForExitを使わせていただきました。

1

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