ニコニコチャンネルメニュー

ブロマガ - ニコニコチャンネル

さぴまが

Windows10のWindowsUpdate後の自動再起動をbatで完全に阻止する話

2016/10/08 12:20 投稿

コメント:9

  • タグ:
  • 登録タグはありません
  • タグ:
  • 登録タグはありません
以前きたWindows10のAnniversaryUpdateで、「再起動するように通知する」という設定項目が消えました


そのため、WindowsUpdateした後は特にPCを使っていなければ勝手に再起動されます。
エクセルやらで未保存のデータがあろうが、動画エンコしてようが、とりあえずPCを使ってなければ再起動されます。
多分マウスとかキーボード入力を見て判断してる感じ・・・?です。10分以上触ってないとかそんな感じで。
(最悪動画見てるだけで再起動させられそう)

じゃあゲーム中などにご飯食べたり、トイレ行ったりしたら勝手に再起動されるかもしらんの?ってわけですが、一応回避方法が用意されています。それがアクティブ時間です。


ここでアクティブ時間を設定できます。そこに設定された時間は、たとえPCを放置していても「再起動する?」という通知が来るだけとなります。
じゃあこれを0時~0時にすれば大丈夫やんw かと思いきや
これ、最大12時間しか設定できません。
強制再起動を回避できるのは24時間中12時間だけです。厳選して設定しましょう!!

なんてやってられるか!!!!

と、ここで思うわけです。数時間ごとにこのアクティブ時間を変更してしまえば常にアクティブ時間になるのでは・・・?
ということで試してみましょう。

・アクティブ時間が保存されてる場所を探す
こういうのは大抵レジストリにあるだろw ってことでアクティブ時間を探してみます。
英語名だとActive Hourというらしいので、それで検索を掛けてみるとありました。



場所は「HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsUpdate/UX/Settings」になります。
とりあえずレジストリエディタ側から値を変更。その後に設定の方を覗くと・・・変わってる!!!
つまりここの値をbatなどで変更してあげれば良さそうです。

・batで現在時刻から適切なアクティブ時間を書き込む
流れとしては
1. 現在時刻を取得する
2. ±5などでアクティブ時間の開始、終了時間を出す
3. レジストリの値を更新する
これでなんとかなりそうです。
ということでそれが下のものになります。メモ帳にコピペで動かせるはず。
--------
@echo off
set NOW_HH=%TIME:~0,2%

set /a START_TIME=NOW_HH-5
set /a END_TIME=NOW_HH+5

if %START_TIME% lss 0 (
set /a START_TIME=%START_TIME%+24
)
if %END_TIME% gtr 24 (
set /a END_TIME=%END_TIME%-24
)

reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v ActiveHoursStart /d %START_TIME% /t REG_DWORD /f
reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v ActiveHoursEnd /d %END_TIME% /t REG_DWORD /f
--------
処理内容としては、
1. set NOW_HHに現在の時間を取得(12:34:56.78の形になってる)して、時間部分を抜き出して保存
2. set /a START_TIME, END_TIMEで時間±5を保存
時間によっては開始が-3とか、終了が26とかになるので、24h表記になるようにします(この場合は開始21、終了2)
21時~3時という指定もできるので、このやり方で大丈夫です。
3. reg addで各値をレジストリに書き込みます。

あとはこれをタスクスケジューラーで定期実行させれば良いですが、このままだと一瞬コマンドプロンプトの黒い画面が表示されるので、表示させないようにします。
よくあるのはVBSを使って、VBS内で実行させる方法なので、そちらを採用します。

--------
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c ""C:\nantoka\aa\change_active_time.bat""", vbhide
--------

batと同じく、これをメモ帳に貼り付けて保存。拡張子を *.vbs に変更します。
"cmd /c ""*.bat""" の部分は、batファイルのフルパスを入れてください。
あと、パスにスペースが入るかもなので、"cmd /c ""C:\nantka\aa\wu.bat"""と、batのパス部分だけ2つの「"」で囲っています。(文字列内に「"」を入れるため)
batを実行すると、一瞬黒い画面が出ますが、vbsの方では黒い画面が出ません。

・タスクスケジューラーで定期実行
保存したら、コントロールパネル→管理ツール→タスクスケジューラー を起動します。
操作→基本タスクの作成 でタスクを作成します。
トリガーは一応ログオン時(PC起動時)で作成します。起動時に一応設定しておきたいし。
操作は「プログラムの開始」になります。
参照から、さっきのvbsを選択します。
タスク作成後、そのタスクのプロパティを開くとトリガーを追加できます。
そこに毎日○時で登録します。



ぼくは○時1秒に実行されるようにしましたが、0秒でも問題ないと思います。
±5時間でbatを動かすので、まぁ4時間ごとぐらいでいいんじゃないかなと。

これでタスクが作成できました。
タスクのとこを右クリすると、「実行する」という項目が出てくるので、アクティブ時間を適当な時間に設定してから実行してみましょう。
無事現在時刻±5の時間が設定されたら勝利です。
終わり。


本来ならこんな面倒なことをしなくても、ちゃんと設定できるべきな気がするよね。
まぁセキュリティうんぬん考えたらこうなったんだろうけども・・・
よく寝てる間に放置してPC動かしてたりするので、勝手に再起動されたら困るんだよね。
別にWindowsUpdateをしたくないわけじゃないけど、再起動タイミングは自分でいじらせてくれ。って感じです。
まだこれを動かして間もないですが、以前再起動が要求されるWindowsUpdateを入れてから寝ましたが、再起動されることはありませんでした。
安定稼働するかは保証しませんが、今のところぼくは大丈夫です!!!
ではでは。

コメント

ナベッ
No.7 (2017/01/22 19:19)
(ソフト・ハード等の)何が悪くてこんな奇妙な現象が起きているのかはわかりませんが、対策法を教えていただきありがとうございます。
ナベッ
No.8 (2017/02/05 00:44)
このツールを見つけたのですがどうでしょうか?

Windows10 設定変更ツール
http://www.asahi-net.or.jp/~tz2s-nsmr/WinUpdateSettings.html


さぴるす。 (著者)
No.9 (2017/02/05 02:01)
WindowsUpdateサービスを停止させることはあまりよくありません(セキュリティ的な問題から)
アップデートを強制するならするで、時間ぐらいは自由に選ばせてくれ。というのが今回の目的なので、そもそもサービスを停止するのは少し違うかなと思います。(例えばPCをシャットダウンするタイミングで自動実行、ぐらいが理想でしょうか)

セキュリティ的な問題があるからこそ、Win10Homeでは強制なのかなと思います(Pro以上のユーザーは勝手になんとかするので、手動にする設定が可能かなと)
まぁWindowUpdateに関してたまに変な不具合を発生させるのは、Microsoft頑張ってくれという感じですが!
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事