プロセスの終了するには?


プロセスの終了  2006-08-25 00:23:16  No: 96425

vbから他のexeを呼び出して待機しているのですが
他のexe待機中に、呼ぶだし側のvbのフォームをunloadすると
呼び出し側のプロセスが残ってしまいます。
回避方を教えて下さい。6.0

'Shell使用
    Dim hProcess As Long

    lret = Shell("c:\windows\calc.exe", vbNormalFocus)
    hProcess = OpenProcess(SYNCHRONIZE, 0, lret)
    lret = WaitForSingleObject(hProcess, INFINITE)
    lret = CloseHandle(hProcess)
    MsgBox "終了しました。"


あん  2006-08-25 01:02:52  No: 96426

フォームのunloadは
画面が終了するだけですから
他の処理が動いてたら
プロセスは終了しません。
Endを入れるとどうなります?


プロセスの終了  2006-08-25 01:14:20  No: 96427

Endなんてあるのですね
初めて知りました。ありがとうございます
終了を、あまりEndと使われてるのを見ない気がするのですが
何かあるのでしょうか?
よかったらEndを使うことの功罪を教えて下さい


あん  2006-08-25 01:30:21  No: 96428

Endは強制終了に近いのであまり使いません。
(Cのexitのようなもの)
今回は、プロセスが残ってしまうVBの不具合かどうかを
確かめるためです。VBの不具合ではないようですね。

WaitForSingleObjectが終了してないため
プロセスが残るのでしょう。


あん  2006-08-25 01:34:09  No: 96429

GetExitCodeProcess
で起動状態を監視したほうがいいかも。


プロセスの終了  2006-08-25 02:07:34  No: 96430

Private Sub ShellEnd(ProcessID As Long)
    Dim hProcess As Long
    Dim EndCode  As Long
    Dim EndRet   As Long
    
    'ハンドルを取得する
     hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, ProcessID)
    
    '終わるまで待つ
    Do
        EndRet = GetExitCodeProcess(hProcess, EndCode)
        DoEvents
    Loop While (EndCode = STILL_ACTIVE)
    
    'ハンドルを閉じる
     EndRet = CloseHandle(hProcess)

End Sub
これを使って電卓起動後、プロセス中かどうかを調べて

この後の処理を分岐させるようにしました。

電卓終了せずフォームをunloadで終了すると
終了したexeのプロセスが残ってしまい。

2重起動エラーにかかってしまいます。
回避するにはやはり
Endしてしまうしかないのでしょうか?


あん  2006-08-25 02:30:03  No: 96431

>    '終わるまで待つ
>    Do
>        EndRet = GetExitCodeProcess(hProcess, EndCode)
>        DoEvents
>    Loop While (EndCode = STILL_ACTIVE)
ここを工夫して、unloadの時もループを抜けるようにすればいいですね。

手っ取り早いのはEndです。。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加