Windowsで特定のプログラムを自動停止


趣旨

具体的にはKeePassとかを,うっかり落とし忘れて放置してしまい,別のマシンで共有しているファイルを更新してしまうとファイルコンフリクトを起こしてバージョニングがぐちゃぐちゃになってしまうので,うっかり落とし忘れているKeePassを自動で落としたい.
特にWindowsでやってしまいがち.
なのでWindowsについてのみ書く.もしLinuxでもやりたいならkillall keepass2をcronで回せば良いと思う.

方法

落とし方

特定のプログラムを停止させるには,次のコマンドで良い.

taskkill /IM KeePass.exe

このコマンドをcmd.exeのコマンドラインオプションで実行させることを,タスクスケジューラに登録すれば完成.

cmd.exe /C taskkill /IM keepass.exe

/Cと/Rと/Kとあるが,/Cか/Rが良いと思う.

タスクスケジューラへの登録

  • 管理ツールのタスクスケジューラを起動
  • タスクスケジューラライブラリ内で「新しいタスクの作成」
    • トリガの設定
      アイドル時に実行することした.web情報によれば,15分のアイドルにより判定されるらしい.
      タスクスケジューラのアイドル時間の判定 - マイクロソフト コミュニティ
    • 操作の設定
    • タスク名の設定
      全般タブでタスクに名前をつけないと保存できないので忘れることはないと思うけど,まぁ何かつける.close keepassとか分かりやすいのがいいんじゃないだろうか.

他の設定はまぁ適当に.

確認

最後に,keepassを起動した状態で作成したタスクを右クリックし「実行する」で動作確認すれば完了.

おまけ

keepassを起動しないでいると該当のIM名が存在しないというエラーを起こす.
私は気にしないことにしているが,もし気になる場合はbatchファイルでtasklistを実行し,findで絞り込んだあと,ERRORLEVELを参照して存在確認する.
多分,こんな感じ.

このbatファイルをプログラム/スクリプトの欄に指定すればOK.

tasklist | find /I "keepass.exe" > nul
if not a%errorlevel%==a1  (
    taskkill /IM keepass.exe
)