Vistaの電源管理
XPならタスクマネージャからシャットダウンできたが、
Vistaはできないので調べてみた。
マザーボードのBIOSの設定はS3にしてある。
S3でないとスリープの時にファンが落ちないため。
REM 終了、電源を切る、シャットダウン
shutdown.exe -s -t 0REM 再起動、リブート
shutdown.exe -r -f -t 0
ここまでは問題ないが、問題はスリープだ。
スリープとはデスクトップPCの場合、
メモリとディスク両方に保存され、通常はメモリから復帰するが、
電源障害などでメモリから消えた場合はディスクから復帰するというものだ。
という例があったが、これらを実行し電源を入れると、
rundll32.exe PowrProf.dll,SetSuspendState Sleeprundll32.exe PowrProf.dll,SetSuspendState 0,1,0
BIOSから立ち上がり、ディスクから復帰しているようだ。
これではハイバネート(休止状態)だ。
仕方なくプログラムを組むことにした。
PowerState.Suspendとあるが、実際の挙動はスリープそのものだ。
// .NETのコードだが、WinAPIのSetSuspendStateを呼び出しているだけ。
// WinAPIの場合の第1引数はFALSE。
Application.SetSuspendState(PowerState.Suspend, false, false);
コンセントを抜いて放置してから立ち上げると、ディスクから復帰してくれる。
ただし、問題もある。
Vistaのメニューからスリープにした場合もそうだが、WOLが上手くいかない場合がある。
シャットダウン | 成功 |
ハイバネート | 成功 |
スリープでメモリから | 成功 |
スリープでディスクから | 失敗 |
これは設定の問題なのか、Vistaの問題なのか特定が難しいので保留。