本日の成果:StartDaemon
PCをお使いのみなさんは、便利な常駐ソフト的なツールをいろいろお使いのことと思います。フリーソフトとか、同じような機能のツールでもいろいろ種類があって、聞いてみると皆様それぞれ無駄にこだわりがあるのが面白いところ。
ところでそういうツールが5つも6つも増えてくると、Windowsのスタートメニューのスタートアップフォルダの中身が結構うるさくなってくるんだよね。そして、ログインするとそれらが一斉に、よーいドン! で起動されるから、実行間隔や順序が指定できない。その辺を改善してくれるツールもあるけれど、普通そういうのはバッチファイルを作って対応するよね、昔のAUTOEXEC.BATみたいに。・・・私だけですかそうですか。
というわけで、そのようなログオンスクリプト的なバッチファイルをスタートアップフォルダに入れているのであるが、ひとつ問題があった。このバッチファイル、後々トラブルが発生したときに問題解決に役立つように、自分自身の出力をログファイルにリダイレクトするようにしてある。そうすると、そこから起動されたツールも、子プロセスなので親プロセスの開いているハンドルを引き継ぐのよね。つまりログオン処理が終わってもそこから起動されたツールが終了しない限りログファイルがオープンされたままになってしまうのだ。
あと、起動時のカレントディレクトリも同様に、例えばエクスプローラで、新しいフォルダをつくって、コマンドプロンプトを立ち上げてそこに移動して、なにか適当な常駐ツールを起動したとすると、その後コマンドプロンプトを閉じても、さっき起動した常駐ツールを終了させない限り、最初に作った新しいフォルダを削除できないのだ。(ツールがカレントディレクトリを掴んでいるため)
分をわきまえた(笑)ツールなら自ら標準入出力をクローズしたり、自分自身が格納されているディレクトリに移動したりするように作られているものだが、そうでないものも当然あるわけで、そのようなプログラムを、標準入出力をリダイレクト中のバッチファイルから問題なく呼び出すことは、バッチファイルの書き方の工夫だけでは無理だった。
というわけでその辺を改善するツールを作ってみました。その名もStartDaemon。大したことはしてなくて:
- 親プロセスのハンドルを引き継がずに、子プロセスを起動する
- その際、起動するプログラムのあるフォルダに移動する
- プログラムを起動する際、ウィンドウを最小化した状態で起動する
というだけのもの。でもおかげで前述の問題が解決されてスッキリしたよー。(完)
コメントを残す