C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 呼び出したプロセスの生死確認


(過去ログ 162 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■93802 / inTopicNo.1)  呼び出したプロセスの生死確認
  
□投稿者/ awazon (1回)-(2020/02/05(Wed) 16:50:36)

分類:[VB.NET/VB2005 以降] 

VB2013・Windows10

WinFormのバックグラウンド処理で、以下のように別プロセスを呼び出すことがあります。

Dim p As Process = Process.Start()
p.WaitForExit()
Dim ret As Integer = p.ExitCode

ただ、呼び出したプロセスが何らかの理由でコケてた場合、
ExitCodeすら返ってこない場合があります。
その場合、p.WaitForExit()の所で処理が止まってしまいます。

おそらく、非同期でプロセスを呼び出せばいいのでしょうけれど、
その場合、プロセスのExit検知はUIスレッド側で受け取ることになるでしょうか?
また、呼び出したプロセスの生死を判断することは可能でしょうか?
(例えばタイマー等で定期的にプロセスの生死状態を確認する、等)

よろしくお願いします。
引用返信 編集キー/
■93803 / inTopicNo.2)  Re[1]: 呼び出したプロセスの生死確認
□投稿者/ 魔界の仮面弁士 (2553回)-(2020/02/05(Wed) 17:02:33)
No93802 (awazon さん) に返信
> ただ、呼び出したプロセスが何らかの理由でコケてた場合、

再現テストはしていないのですが、そのコケる場合において、
Process の変数を WithEvents で宣言しておいたときに
Exited イベントを捕らえることはできますか?

WithEvents なフィールド変数では都合が悪い場合は、
Shared な Start メソッドの代わりに、
インスタンスメンバーの Start メソッドを試してみてください。
https://dobon.net/vb/dotnet/process/openfile.html#exited


> その場合、p.WaitForExit()の所で処理が止まってしまいます。
WaitForExit() の代わりに
WaitForExit(milliseconds) を使ってみるのはどうでしょう。
引用返信 編集キー/
■93807 / inTopicNo.3)  Re[2]: 呼び出したプロセスの生死確認
□投稿者/ ぶなっぷ (217回)-(2020/02/06(Thu) 10:21:32)
2020/02/06(Thu) 10:28:50 編集(投稿者)
> その場合、p.WaitForExit()の所で処理が止まってしまいます。
p.WaitForExit()で止まっているときに、タスクマネージャで見ると、
対象のタスクは消えていますか?
消えていないなら、それが原因です。

以下、その状況だと仮定してのアドバイスです。
プロセスは終了しているように見えているからこその、今回の質問だと思います
ので、プロセスがタスクバーから消えている状態で、プロセスが生き残っている
と思われます。

そんなことが起きる状況ですが、
終了処理の最中、メインウィンドウは非表示となって、例外発生のために、
プロセスが残ってしまったとかはあり得そうな話です。

一度、以下のような方法で例外をキャッチしてみてはどうでしょう?
  https://dobon.net/vb/dotnet/programing/unhandledexception.html

例外の場所をきちんと把握して、処置すれば、プロセスは正常に終了すると思わ
れます。

最悪、処置不能な例外なら、例外ハンドラから、プロセスを終了させてしまえば、
p.WaitForExit() を抜けてくるはずです。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -