トップ回答者
外部プロセスの終了要求をコンソールアプリで検知するには?

質問
回答
-
taskkill でプロセスが強制終了される場合、強制終了される側のプロセスで終了要求を検出することはできないと思います。
参考
https://teratail.com/questions/87709強制終了する側のアプリがご自身作成のアプリの場合は、taskkillを使う前に、終了の信号を送る方法(GenerateConsoleCtrlEvent関数、SetConsoleCtrlHandler関数等)は使えないでしょうか。
- 編集済み kenjinoteMVP 2018年8月7日 10:57
- 回答としてマーク yokohamaUser 2018年8月8日 5:58
-
taskkillは/fオプションを付けない場合、対象のプロセスに対してWM_QUITメッセージを送信し、メッセージループを終了させます。
一般的なコンソールアプリの場合メッセージループを持っていないので、WM_QUITも受け取れず終了しません。
コンソールアプリでも、ワーカースレッドでメインの処理を動かしておき、メインスレッドではSystem.Windows.Forms.Application.Runさせておけば、Application.Runから復帰することでtaskkill(/fなし)を検知できます。(System.Windows.Forms.dllの参照追加が必要)
- 回答としてマーク yokohamaUser 2018年8月8日 0:48
すべての返信
-
taskkill でプロセスが強制終了される場合、強制終了される側のプロセスで終了要求を検出することはできないと思います。
参考
https://teratail.com/questions/87709強制終了する側のアプリがご自身作成のアプリの場合は、taskkillを使う前に、終了の信号を送る方法(GenerateConsoleCtrlEvent関数、SetConsoleCtrlHandler関数等)は使えないでしょうか。
- 編集済み kenjinoteMVP 2018年8月7日 10:57
- 回答としてマーク yokohamaUser 2018年8月8日 5:58
-
taskkillは/fオプションを付けない場合、対象のプロセスに対してWM_QUITメッセージを送信し、メッセージループを終了させます。
一般的なコンソールアプリの場合メッセージループを持っていないので、WM_QUITも受け取れず終了しません。
コンソールアプリでも、ワーカースレッドでメインの処理を動かしておき、メインスレッドではSystem.Windows.Forms.Application.Runさせておけば、Application.Runから復帰することでtaskkill(/fなし)を検知できます。(System.Windows.Forms.dllの参照追加が必要)
- 回答としてマーク yokohamaUser 2018年8月8日 0:48
-