[技術ネタ]タスクスケジューラでプログラムの実行を自動化(Windows10)

展示系のインスタレーションでは、
運用時間に自動的にプログラムが動くようなスタートアップのバッチを書いたりしますが、
OSのバージョン等によって、バッチが起動しない問題があったりするので、
その対策に関するメモです。
(今回の対象は、Windows10 Professionalのタスクスケジューラをつかった運用を想定しています。)
基本的には、下記のサイトのバッチをつかわせていただいていたのですが、
スリープからの復旧と、その際のプログラムが実行されない問題を解消することができませんでした。
http://izmiz.hateblo.jp/entry/2015/02/18/214646
色々調べてみたところ、下記のsuspend.exeでは復旧できたので、こちらに設定を変更しています。
(ちなみに、hibernate.exeだと復旧はできませんでした。)
https://tipszone.jp/20110517_stop-pc/
■ 想定環境
・イベント時間: 17:00 ~ 24:00
それ以外は眠らせたい。
・PC
- Windows10 Professional 64bit
- アカウントのパスワードは「無し」に
・作成するバッチ
1. イベント用アプリケーションをexitして、眠らせる(goToSleep.bat)
2. 起こして、PC再起動(wakeup.bat)
3. PC起動時にイベント用アプリケーションを立ち上げる(startup.bat)
■ 手順
1. バッチ作成
2. タスクマネージャーに各種バッチを登録
3. 電源周りの設定を変更
■ バッチ作成
1. イベント用アプリケーションをexitして、眠らせる(goToSleep.bat)
rem rem goToSleep.bat rem echo "kill all apps and go to Hibernation" taskkill /im "eventApp.exe" /f timeout /T 10 cd "C:\bat" start suspend.exe
2. 起こして、PC再起動(wakeup.bat)
rem rem wakeFromSleepAndReboot.bat rem echo "wake from sleep and reboot" timeout /T 20 shutdown -r -t 10
3. PC起動時にイベント用アプリケーションを立ち上げる(startup.bat)
rem rem launchApps.bat rem echo "launch apps" cd "C:\bat\" start eventApp.exe exit
4. スリープ用のスクリプトファイルをexeに変換(suspend.exe)
require 'Win32API' # http://msdn.microsoft.com/en-us/library/aa373201(v=vs.85).aspx setSuspendState = Win32API.new('powrprof.dll', 'SetSuspendState', %w(i i i), 'i') setSuspendState.call(0, 0, 0)
※ こちらはexeが下記にあるので、今回はそちらを使ったので実際にコンパイルはしてません。
suspend.exe
■ タスクマネージャーに各種バッチを登録
2. トリガーの設定
goToSleep.batの場合は、イベントの終了時間をセット、
wakeup.batの場合は、イベントの開始の10分前くらいにセットします。
startup.batの場合は、「スタートアップ時」ではなく、「任意のユーザーのログオン時」に設定したほうが安定していました(参考画像)。
3. 実行するプログラム(goToSleep.bat, wakeup.bat, startup.bat)をセット
4. タスクを実行するためにスリープを解除にチェック
これにより、wakeup.batがスリープ中にでも起き上がって実行できるようになります。
その他、詳細はこちらを参照
http://izmiz.hateblo.jp/entry/2015/02/18/214646
■ 電源周りの設定を変更
2. 電源オプションの「詳細な電源設定の変更」から、以下を設定
- ハイブリッドスリープ -> オン
- スリープ解除タイマーの許可 -> 有効
4. 自動的にスリープが解除されるバグ対策
ついでに、win10では自動でスリープ解除される現象があるようで、
調べていくと下記の自動メンテナンスが原因っぽかったので、こちらも停止。
http://diy-ilands.com/2015/08/05/windows-10-sleep-mode/
以上です!