タスクスケジューラでプログラムを自動実行する(トラブル事例①)
前回、タスクスケジューラでプログラムを自動実行する方法を紹介しました。
onsoku-engineer.hatenablog.com
今回は、そんなタスクスケジューラ絡みのトラブルのお話。
自動実行するプログラムについて
自動実行するプログラムは、自作した物で
- 実行ファイル(exe)
- 設定ファイル(ini)
の組み合わせになっており、
プログラム実行時に実行ファイル(exe)と同じ階層にある設定ファイル(ini)を読み込んでから
動作するようになっています。
タスクを作成してテスト実行
前回の手順を参考に、タスクを作成します。
作成が完了したら、正常に動作するかテスト実行します。
プログラム/スクリプト: C:\Users\XXXXX\Documents\Hatena\hoge.exe
なんか動かない、、、
なんだろう、なんか変。
プログラムは実行されるんだけど、肝心の処理が動いてないように見える。
起動は出来るのに動かない、、、ナニソレ汗
試したこと
自作のプログラムだし、適当にログ仕込んで、色々試してみる。
- プログラムを直接実行
- タスクスケジューラからテスト実行
- タスクスケジューラから自動実行
期待通り動いたのは「1」だけ。いやまぁ、そりゃ「1」は動くでしょ。そもそも。
タスクスケジューラが絡むと期待通り動かない、、、
うーん、起動はするんだよな。設定ファイル(ini)が読み込めてないとか?
ズズーっ(珈琲飲む音)。。。
カレントディレクトリ!お前か!!
仕込んだログから、設定ファイル(ini)が読み込めていないのは確定。
設定が無いので肝心の処理が行えずにエラー終了。
では、何故設定ファイル(ini)が読み込めていないのか?
プログラム実行時に実行ファイル(exe)と同じ階層にある設定ファイル(ini)を読み込んでから、動作するようになっています。
ここです、タスクスケジューラが絡むと期待通り動かない理由。
カレントディレクトリ!
作業場所、作業フォルダのことですね。
タスクスケジューラから実行したプログラムの作業フォルダは、デフォルトで「Windowsのシステムフォルダ」になるみたいです。
設定ファイル(ini)は、実行ファイル(exe)と同階層にあるので、これでは読み込むことが出来ませんね、、、
実行方法 | 作業フォルダ |
---|---|
プログラムを直接実行 | 実行ファイルのあるフォルダC:\Users\XXXXX\Documents\Hatena |
タスクスケジューラから実行 | WindowsのシステムフォルダC:\Windows\System32 |
タスクスケジューラで実行するプログラムの作業フォルダを指定する
では、タスクスケジューラで実行するプログラムの作業フォルダを指定しましょう。
- 対象のタスクを選択 > ダブルクリック(または、右クリック > プロパティ) > プロパティを表示
- 「操作」タブ > 開始するプログラムをリストから選択 > ダブルクリック(または、「編集」をクリック)
- 「開始(オプション)」に、作業フォルダを入力
編集が終わったら「OK」をクリックして画面を閉じます。
プログラム/スクリプト: C:\Users\XXXXX\Documents\Hatena\hoge.exe 開始(オプション): C:\Users\XXXXX\Documents\Hatena
タスクを作成してテスト実行(今度こそ)
さぁ、もう一度テスト実行してみましょう。
自分を信じて!
タスクスケジューラを信じて!!
どぉりゃぁぁぁ(・Д・)ノ
はいっ!「1~3」全て期待通り動きました!!
- プログラムを直接実行
- タスクスケジューラからテスト実行
- タスクスケジューラから自動実行
まとめ
- タスクスケジューラでプログラムを実行するときは、「作業フォルダ」を指定する
- 指定しない場合、「Windowsのシステムフォルダ」になる
続いてトラブル事例②へ。
タスクスケジューラって罠がいっぱい、、、