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

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 Defenderの更新は再起動を止めている間も行われる
  • 人がやることを自動でやっているだけなので、Windowsへの影響が少ない
  • 一般ユーザーでもGUIだけで設定可能
  • Windows 10の大型アップデートがあっても、再登録するだけで再起動を防止できる
  • 元の動作に戻すには登録したタスクを削除するだけ

などなど。

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

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

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

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

ならば、アクティブ時間を一定間隔で再設定してPCが起動している間はずっとアクティブ時間にすればよいことになります。このアクティブ時間の再設定を自動で行うタスクを登録します。

設定するとどうなるか

以下で説明する設定を行うと、今までと同様に再起動が必要な更新が配布されるとバックグラウンドでインストールされ再起動待機状態になります。

再起動待機状態なので、新しい更新が配布されてもインストールされないと思われるかもしれませんが、インストール可能な更新は追加でインストールされていきます。Windows Defenderの定義ファイルなど再起動が不要なものは逐次新しいものがインストールされます。

「設定」アプリの「Windows Update」を見るとアクティブ時間外で再起動する旨表示されています。この表示は時間が経つとアクティブ時間の表示がずれていき再起動は自動では行われません。なお、この時点では「アクティブ時間の変更」という項目が表示されており手動でも変更可能な状態です。

Windows10-v1607-prevent-restart-19

この状態で1週間以上経過するとこのような表示に変わります。強制的に再起動しようとしていますがアクティブ時間内のため再起動に失敗しています。この状態になると「アクティブ時間の変更」という項目が消えて手動では変更できなくなっています。

Windows10-v1607-prevent-restart-20

この時点での経過時間はイベントログを見ると電源ONから790,043秒、即ち9日以上再起動していないことが分かります。

Windows10-v1607-prevent-restart-21

また、この状態で再起動予定の時刻にが近くなると通常の通知ではなく、作業を邪魔するように通知が表示されます。

「閉じる」をクリックしないと何もできませんが、閉じれば通常通り作業は続けられます。また、表示だけなので動作しているソフトが止められることはありません。

この状態で2週間以上、自動で再起動されないことを確認しています。

Windows10-v1607-prevent-restart-27

これは極端な例で、自動再起動を止める目的は、作業を自分のペースで継続させパソコンの都合で邪魔されることを防ぐことです。

作業の区切りがついたらできるだけ早く再起動させてください

「電源」の2つの選択の違い

再起動が必要な状態で電源を切ろうとすると、このように表示されます。

Windows10-v1607-prevent-restart-22

「更新してシャットダウン」と「更新して再起動」のどちらを選ぶかですが、更新をどこまで完了させるかの違いです。

更新は、以下の3段階で行われます。

  1. 更新のダウンロードとユーザーの作業に影響の無い範囲での更新
  2. ユーザーの作業に影響のある範囲での更新
  3. 再起動しないと更新できないファイルの更新

「更新してシャットダウン」を選択した場合は2.まで、「更新して再起動」を選択した場合は3.まで行われます。

「更新して再起動」を選び立ち上がった後でシャットダウンした方が、次に電源を入れた時の立ち上がりは速くなります。

なお、最近は多くの更新プログラムをまとめて更新するので、更新に時間がかかります。

事務所の電源を落として帰宅する場合、「更新してシャットダウン」を選択するとパソコンがシャットダウンするまでに時間がかかり終電に間に合わない可能性もでてきます。「更新して再起動」を選択すると更に時間がかかります。

このような場合は、何もプログラムが動作していない状態で、電源を長押しして電源を落とします。パソコンが壊れる可能性もありますので、どうしても急いでいる時だけ行ってください。

設定用パッケージの仕様

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

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

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

設定手順

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

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

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

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

Windows10-v1607-prevent-restart-14

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

この操作は必ず解凍前のZIPファイルで行います。そうしないと解凍したファイル全てがブロックされて解除に手間がかかります。

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」タスクが登録されます。

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

Windows10-v1607-prevent-restart-10

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

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時間以上経ってから再度確認してアクティブ時間が変わっていれば更新も正しく行われています。

アクティブ時間が正しく設定されていない場合は、タスクスケジューラを起動して、「PreventRestart」タスクが「無効」ではなく「準備完了」になっていることを確認してください。なっていない場合は右下の部分で「有効化」をクリックしてください。

Windows10-v1607-prevent-restart-18

元に戻す場合

アクティブ時間の自動更新をやめる場合は、「タスクスケジューラ」を起動してから「PreventRestart」タスクを選択して「削除」してください。次に再起動してから「C:\PreventRestart」フォルダーを削除してください。

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

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

その場合は、「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

コメントを残す

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


*