掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ShellExecuteEx()関数について (ID:57222)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
子プロセス側がきちんと外部からの終了に対応していない限り 基本的に安全かつ確実に終わらせる方法と言うのはありません。 問題になっている中断と言うのが起動側のアプリの方の話で、 起動先の子プロセスは放置でかまわないのであれば、ワーカースレッド側に 「子プロセスの終了の待ち合わせを中断する」仕組みが必要でしょう。 子プロセスの中断ではない点に注意してください。 単に待ち合わせを止めるだけの話なので子プロセスは放置になります。 例えば、WaitForMultiObjectで待ち合わせるようにしておいて 待ち合わせのハンドルに中断用のイベントハンドルも含めるようにしておけば、 メインスレッド側でイベントをONにすれば、ワーカースレッドは終了すると思います。但し、前述の通り、子プロセスは処理が終わって自力で終了するまで終わりません。 子プロセス側で起動される実行ファイルが二重起動をブロックしていれば、 二度目の実行で起動できずにエラー終了するかもしれませんが、 それに対してどうこうする手立てはないと思います。 素直に前回の処理が実行中なので処理できないというエラーにした方が素直ではないかと思います。 TerminateProcessを使えば、子プロセスを終了させることも出来ると思いますが、 TerminateProcessのHELPの解説でも触れられている通り、安全な終了方法ではありません。 子プロセス側は強制終了される為、本来行うべき終了処理があっても行われずに終了される可能性があります。 いずれにせよ、きちんと外部アプリケーションとの連携を考慮した形の設計でない限り、この辺の制御には限界があります。 子プロセス側で使用する実行ファイルを弄る事が出来ないのであれば、 仕様と言うことで納得するしかないと思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.