Windows 10 バージョン1607で自動再起動を止める方法(一般向け)

Windows10-v1607-prevent-restart-18.png
Pocket

Windows 10 バージョン1607からWindows Updateでの更新の適用後、自動再起動を止められなくなりました。

阻止する方法は幾つかあるのですが、ここで紹介するのはシステムへの影響が少なく、一般ユーザーでも比較的簡単に設定できる方法です。

Windows 10 バージョン1607での自動再起動問題

Windows 10からWindows Updateでの更新を拒否できなくなりました。更に、Windows 10 バージョン1607からは適用するタイミングもコントロールできなくなりました。

更新が配布されるとバックグラウンドでインストールされ、準備が完了すると再起動を要求されます。再起動はユーザーが設定したアクティブ時間外で実施されます。

ならば問題無いだろうと思われるかもしれませんが、アクティブ時間として設定できるのは最大12時間(来年のThe Creators Update以降はProおよびEducationのみ18時間に延長)となっており、長時間作業を行ったり、うっかり長時間席を外したりすると、自動で再起動されてしまいます。

しかも、ソフトが稼働中で未保存の状態でもWindows 10は再起動してしまうので、ユーザーデータは失われます。

Microsoftはセキュリティ対策のためという名目でこのような仕様としているようですが、ユーザーにとってはセキュリティよりデータが失われる方が問題です。

まあ、本当の問題は、自分のマシンなのに思うようにコントロールできないことでしょう。

自動再起動対策

自動再起動対策としてまず考えられるのはグループポリシーで制御することです。これは企業で組織的に一括してPCを管理する仕組みなので制御できないと困るのですが、Windows 10ではWindows Updateに関するグループポリシーは殆どが無視されます。完全にコントロールするにはEnterpriseエディションが必要なようです。

次に行われたのがRebootタスクを止めることです。海外のサイトを見ると、いろいろ情報が掲載されています。

自動再起動の犯人がRebootタスクであることは判明しています。問題は、このタスクを無効にしても暫く経つと自動的に有効に戻されてしまうことです。

対策は二つ。

有効に戻されるたびに無効にするタスクを自動で実行させること。もう一つはRebootタスクをWindowsが触れないようにアクセス権を変えてしまうことです。

どちらの方法もシステムに与える影響が大きかったり、タイミングによっては再起動されることもあります。今後のアップデートで問題が発生する可能性があり、一般向ではありません。

もう一つの方法

きよたに 様からこのような方法もあることを教えて頂きました。

確かに根本的な対策ではないので、一蹴する人も多いでしょうが、この方法は下記の利点があります。

  • 人がやることを自動でやっているだけなので、Windowsへの影響が少ない
  • 一般ユーザーでもGUIだけで設定可能
  • Windows 10の大型アップデートがあっても、再登録するだけで再起動を防止できる
  • 止める場合はタスクを無効にするだけ

などなど。

上記サイトの方法ではPCを使う時間が定まっていない場合、タイミングが悪いと自動再起動されてしまう可能性があります。そのためスクリプトとタスクを変更したものが以下となります。

この方法はWindows 10 Pro/Homeなど、どのエディションでも設定可能です。Windows 10 Homeでの動作も確認済みです。

自動再起動を防止する仕組み

Windows 10 バージョン1607からはアクティブ時間内での自動再起動は行われません。

ならば、アクティブ時間を頻繁に設定し直してPCが起動している間はずっとアクティブ時間とすればよいことになります。このアクティブ時間の更新を自動で行う設定です。

パッケージの仕様

今回、作業を単純化するために以下の仕様で固定しています。変更する場合はパッケージ内の該当部分を自分で書き換える必要があります。

  • スクリプトファイルの置き場所は、「C:\PreventRestart」で固定
  • スクリプトファイル名も固定
  • アクティブ時間の更新は任意のユーザーがログオンした時に、その時点から12時間に設定される
  • 以後、6時間ごとにアクティブ時間を後ろに6時間ずらす
  • 更新に失敗した場合は30分間隔で3回まで再試行される

PC起動時に、それから12時間をアクティブ時間とし、半分まで経過したら更に半分延長します。これをPCを起動している限り延々繰り返します。半分まで過ぎたら延長する方法はDHCPアドレスのレンタル期間更新方法を参考にしています。

設定手順

設定は最初に一度だけ行えば以後は何もする必要はありません。

まず、こちらから再起動防止パックをダウンロードしてください。セキュリティソフトなどでマルウェアやウイルスと検知された場合は最後に示す方法で自分でファイルを作成してください。Windows DefenderおよびG Dataでは問題ありませんでした。

ダウンロードしたら、ファイルを右クリックして表示されたメニューから「プロパティ」をクリックします。

「全般」タブの下部の「ブロックの解除」にチェックを入れ「適用」をクリックします。

Windows10-v1607-prevent-restart-14

「セキュリティ」の説明が消えたことを確認して「OK」をクリックして「プロパティ」を閉じます。

Windows10-v1607-prevent-restart-15

ダウンロードしたファイルを解凍します。

解凍すると「PreventRestart」というフォルダーがありますのでフォルダーごとCドライブの直下にコピーします

コピーしたらダウンロードしたファイルと解凍したファイルは削除してかまいません。

Windows10-v1607-prevent-restart-12

コピーしたフォルダーを開くと3個のファイルがあります。

Windows10-v1607-prevent-restart-13

次に、タスクを登録するためにタスクスケジューラを起動します。

Cortanaで「タスク」と入力すると「タスクスケジューラ」が表示されるのでクリックします。

Windows10-v1607-prevent-restart-02

「タスクスケジューラ」の左側で「タスクスケジューラライブラリ」を選択し、右側の「タスクのインポート」をクリックします。

Windows10-v1607-prevent-restart-03

先ほどコピーした「C:\PreventRestart」フォルダーを開き、「PreventRestart.xml」を選択して「開く」をクリックします。

Windows10-v1607-prevent-restart-04

「タスクの作成」が表示されるので「OK」をクリックして閉じます。

このダイアログで細かい設定を変更できますが、必要ならば後で「プロパティ」から再度開くことができます。

Windows10-v1607-prevent-restart-05

「PreventRestart」タスクが登録されます。

登録直後は「無効」になっているので、右下の部分の「有効化」をクリックします。

Windows10-v1607-prevent-restart-10

有効になると表示は「準備完了」となります。

なお、アクティブ時間の自動更新をやめる場合は、「PreventRestart」タスクを選択して「無効」にするか「削除」してください。

Windows10-v1607-prevent-restart-11

これでアクティブ時間の自動更新の準備ができましたのでPCを再起動してください

動作を確認するには「設定」アプリを開き、「更新とセキュリティ」をクリックして、

Windows10-v1607-prevent-restart-16

左側の「Windows Update」を選択し、右側の「アクティブ時間の変更」をクリックします。

Windows10-v1607-prevent-restart-17

「開始時刻」がPCを起動した時刻の00分、例えばAM5:30に起動したならAM5:00に、終了時刻がその12時間後に設定されていれば正しく機能しています。「キャンセル」をクリックして閉じます。

6時間以上経ってから再度確認してアクティブ時間が変わっていれば更新も正しく行われています。

Windows10-v1607-prevent-restart-18

ウイルス対策ソフトにブロックされる場合

スクリプト内でレジストリーを操作しているためウイルス対策ソフトによっては実行をブロックされる可能性があります。

その場合は、「C:\PreventRestart」フォルダーを除外登録してみてください。

また、スクリプトパックをダウンロードできない場合は、下記の手順でファイルを作成してください。

ファイル名は必ず同じ名前にしてください。変更する場合は各ファイル内の該当する部分を書き換える必要があります。

ファイル名:PreventRestart.bat

@echo off

set /a ACTIVE_HOURS_START=%TIME:~0,2%
set /a ACTIVE_HOURS_END=(%ACTIVE_HOURS_START% + 12) %% 24

reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v ActiveHoursStart /t REG_DWORD /d %ACTIVE_HOURS_START% /f
reg add "HKLM\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" /v ActiveHoursEnd /t REG_DWORD /d %ACTIVE_HOURS_END% /f

ファイル名:PreventRestart.vbs

CreateObject("WScript.Shell").Run "cmd /c ""c:\PreventRestart\PreventRestart.bat""", 0

ファイル名:PreventRestart.xml

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<URI>\Prevent Restart</URI>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<Repetition>
<Interval>PT6H</Interval>
<StopAtDurationEnd>false</StopAtDurationEnd>
</Repetition>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>false</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
<RestartOnFailure>
<Interval>PT30M</Interval>
<Count>3</Count>
</RestartOnFailure>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Windows\System32\wscript.exe</Command>
<Arguments>"c:\PreventRestart\PreventRestart.vbs"</Arguments>
</Exec>
</Actions>
</Task>

まとめ

とても単純ですが比較的簡単に設定できるため、自動再起動に困っている場合は設定してみてはいかがでしょうか。

簡単な操作なので常駐型のソフトを誰かが作ってくれればよいのですが。

関連記事:

Amazonで見る
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*