- ベストアンサー
プロセスの強制終了の方法
ウィンドウを持たないプロセスをスケジューラなどで周期的に起動するようなやり方で、二重起動チェック後、二重起動されていたら前回起動されたプロセスを強制終了させるやり方を教えてください。 過去ログを見てもそれらしいものは見当たりませんでした。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
現在動いているProcessを列挙する事はAPIで可能です。CreateToolHelp32SnapShotなどで プロセスを列挙し、OpenProcessでハンドルを取得する事はできます。 またその際PROCESSENTRY32構造体の中の情報からスケジューラが起動したものなのか どうかの判断ができるかもしれません。 無理なら、外部的にスケジューラを監視する必要があります。 その場合はMessageのやりとりなどをおっていくしかありません。
その他の回答 (2)
- sha-girl
- ベストアンサー率52% (430/816)
回答No.2
はあ、、 CreateProcessで起動してハンドルを保持しておけば、前回起動したものかどうか管理できると思いますが。
質問者
お礼
すみません、質問でも記述しているとおり、システムの構成上タスクスケジューラ等から起動され、起動時のハンドル等は残せないのです。 (アプリから起動させればいいのでしょうが、その部分は変更できないのです。) 何かいい方法はないものでしょうか...
- sha-girl
- ベストアンサー率52% (430/816)
回答No.1
TerminateProcessというAPIがあるので調べてみてください。 ただ強制終了させるわけですからメモリリークが発生する可能性が あります。
質問者
お礼
はあ、「TerminateProcess」がカギとは思っていたんですが、前回起動したプロセスかどうかの判断で悩んでいます。
お礼
度々ご回答ありがとうございます。 何やら、面倒なようですね。 とりあえず試してみます。(試験的にTerminateProcessを使ったサンプルを作ってみましたがうまく行きませんでした...) 最悪、できない場合はダミーのフォームを作ってPostMessageで終了させるようにしてみます。 ありがとうございました。