Windows 10 バージョン1803対応で変わった「Windows 10 更新アシスタント」の動作の詳細について説明します。
「Windows 10 更新アシスタント」とは
「Windows 10 更新アシスタント」とは2018年の2月あたりから更新プログラムに紛れ込ましたり、別の目的の更新プログラムを使ってインストールさせたりしている、大型アップデートを適用しないパソコンを強制的に最新バージョンにアップデートさせるプログラムです。
「強制的に」という所以は、Windows 10にはユーザーの作業を妨げないように、いろいろな機能が搭載されています。作業中に再起動しないようにするための「アクティブ時間」や、気が散らないように通知を抑制する「集中モード」などです。
「Windows 10 更新アシスタント」はこのような機能を無視して最新バージョンへのアップデートを最優先で行います。
「Windows 10 更新アシスタント」が表示された時点でアップデート作業は9割がた完了しており、30分のカウントダウンに気付かなければ、そのままアップデートされてしまいます。気付いて止めても、シャットダウンしたり再起動すれば同様です。
「Windows 10 更新アシスタント」の詳細動作
「Windows 10 更新アシスタント」は、Windows 10 バージョン1803対応版では従来と多少動作が変わっているようです。
ここでは2018年8月時点で配信されている「Windows 10 更新アシスタント」について説明します。64ビット版を例としていますが、32ビット版でもほぼ同じです。
1.インストール
現在の「Windows 10 更新アシスタント」は「KB4023814」という更新プログラムとして配信されているようです。
2018-07として配信された64ビット版パッケージは「C:\Windows\SoftwareDistribution\Download\b6375be055b307f0b793e52799af726d」にダウンロードされる「Windows10.0-KB4023814-x64.cab」というファイルで、展開すると「windows10.0-kb4023814-x64.msi」というインストールパッケージとなります。
インストールされた「KB4023814」は履歴に記録されますが、アンインストールはできません。
「KB4023814」すなわち「Windows 10 更新アシスタント」は「C:\Windows\UpdateAssistant」フォルダーにインストールされます。
内容はこのようになっています。
4個のXMLファイルはタスクとして「タスクスケジューラ」の「タスク スケジューラ ライブラリ\Microsoft\Windows\UpdateOrchestrator」に登録されますが、管理者権限でも変更や削除が行えません。
「操作」を見るといろいろなタイミングで「UpdateAssistant.exe」を実行していることが分かります。
2.インストールイメージのダウンロード
タスクによって実行された「UpdateAssistant.exe」は「C:\Windows10Upgrade」フォルダーを作成して、後の作業を「Windows10Upgrade.exe」に引き継ぎます。
「Windows10Upgrade.exe」はMicrosoftのサーバーから最新の大型アップデートのインストールイメージであるESDファイルなどをダウンロードします。数字で始まるファイルがイメージファイルでBuild番号で始まっています。
最終的に「C:\Windows10Upgrade」フォルダーはこの程度のサイズになります。
3.インストールイメージの展開
インストールイメージのダウンロードが終わると展開が始まります。展開は「Windows10Upgrade.exe」ではなく「dismhost.exe」が実行しているようです。その後も多くのプログラムに作業が引き継がれていきます。
場所は従来と同じ「C:\$WINDOWS.~BT」フォルダーです。
従来は「Sources」フォルダーにインストールパッケージを展開するだけだったのですが、現在は「NewOS」フォルダーに新しいバージョンのWindows 10をインストールします。
最終的に「NewOS」フォルダーにはアップデート後に「C:\」に置かれるフォルダーが構築されます。
ユーザーがインストールしたアプリケーションなどは、この時点ではショートカットとして作成されます。
ユーザー環境については、まだ使用中のためコピーされません。
最終的に「C:\$WINDOWS.~BT」フォルダーはこの程度のサイズになります。
ここまでで分かるようにユーザーが気付かないバックグラウンドで、9割がたインストールは完了しています。
残るはユーザー環境のコピーとフォルダーの配置換えだけです。
4.カウントダウン開始
すべて準備が整うと、突然この画面が表示されます。
「後で再起動する」をクリックすると画面は消えますが、
タスクトレイに残っています。
クリックすると、またこの表示となりますがカウントダウンは行われません。
この表示は「アクティブ時間」であっても表示されます。
ムービーでは「アクティブ時間」を7:00AM~1:00AMの18時間に設定していますが、7:36AMにいきなり表示されています。(音は出ません)
この画面が表示されたら、シャットダウンまたは、再起動を行うとバージョンアップが行われます。通常の方法ではアップデートは回避できません。
そして、この画面に気付かず、「後で再起動する」をクリックしなかった場合は「アクティブ時間」でも自動的に再起動されます。(音は出ません)
カウントダウンが始まった時点でのディスクの使用量です。
殆どアプリケーションがインストールされていない状態でも約37GB使用されており、32GBシステムではアップデートできない理由が分かるでしょう。
「C:\$WINDOWS.~BT」フォルダーは一時ファイルに分類されますが正確にはカウントされていません。
また、「C:\Windows10Upgrade」フォルダーはその他に分類されています。
5.BCDストア(ブート構成データストア)の内容
再起動後に立ち上がるのは「Windowsブートローダー」ではなく「Windowsセットアップ」です。
そうなるのはBCDストアが書き換えられるためです。
カウントダウンを始めた時点でのBCDストアの内容はこのようになっています。
実際の動作時は{current}が{default}だったり、GUIDが違ったりしますので、書き換える場合はよく値を確認してください。
Microsoft Windows [Version 10.0.16299.334] (c) 2017 Microsoft Corporation. All rights reserved. C:\Windows\system32>bcdedit Windows ブート マネージャー -------------------------------- identifier {bootmgr} device partition=E: path \EFI\Microsoft\Boot\bootmgfw.efi description Windows Boot Manager locale ja-JP inherit {globalsettings} default {current} resumeobject {1c730825-cbc6-11e7-969a-f65064160ed3} displayorder {7254a080-1510-4e85-ac0f-e7fb3d444736} {current} bootsequence {7254a080-1510-4e85-ac0f-e7fb3d444736} toolsdisplayorder {memdiag} timeout 0 Windows セットアップ -------------------------------- identifier {7254a080-1510-4e85-ac0f-e7fb3d444736} device ramdisk=[C:]\$WINDOWS.~BT\Sources\SafeOS\winre.wim,{1c73082a-cbc6-11e7-969a-f65064160ed3} custom:11000043 partition=C: custom:11000083 partition=C: path \windows\system32\winload.efi locale ja-JP custom:12000044 \$WINDOWS.~BT\Sources\Rollback\WinPE\bootstat.dat inherit {bootloadersettings} osdevice ramdisk=[C:]\$WINDOWS.~BT\Sources\SafeOS\winre.wim,{1c73082a-cbc6-11e7-969a-f65064160ed3} custom:21000152 partition=C: systemroot \windows nx OptIn bootmenupolicy Standard winpe Yes Windows ブート ローダー -------------------------------- identifier {current} device partition=C: path \Windows\system32\winload.efi description Windows 10 locale ja-JP inherit {bootloadersettings} recoverysequence {1c730827-cbc6-11e7-969a-f65064160ed3} displaymessageoverride Recovery recoveryenabled Yes isolatedcontext Yes allowedinmemorysettings 0x15000075 osdevice partition=C: systemroot \Windows resumeobject {1c730825-cbc6-11e7-969a-f65064160ed3} nx OptIn bootmenupolicy Standard C:\Windows\system32>
問題となるのは「bootsequence」です。これは次に起動するときに1回だけ実行され、2回目に実行される場合は自動的に削除される項目です。
この「bootsequence」が示している「{7254a080-1510-4e85-ac0f-e7fb3d444736}」が「Windowsセットアップ」なのでセットアップが始まることになります。
アップデートを阻止するにはセットアップを失敗させるために「C:\$WINDOWS.~BT」を削除するのですが、「Windowsセットアップ」の実行ファイルとして指定されているため、起動に失敗してこのような画面が表示されることになります。
回避するには、管理者権限のコマンドプロンプトから、このコマンドで
- bcdedit /bootsequence {7254a080-1510-4e85-ac0f-e7fb3d444736} /remove
1回だけ実行される動作を削除してしまいます。
また、「displayorder」に記されている複数のエントリーも、このコマンドで
- bcdedit /displayorder {current}
本来の「Windowsブートローダー」だけにしてしまいます。こうすることで「Windowsセットアップ」のエントリーも削除できます。
ただし、この手順は一般ユーザーには難しいため、アップデートを阻止する方法ではエラー画面は表示されますし、BCDストアには「Windowsセットアップ」エントリーも残ったままとしていますが、実害はありません。
アップデート後
アップデートが完了するとフォルダー構成はこのようになります。
「Windows10Upgrade」フォルダーからはインストールイメージは削除されています。
アップデート前のフォルダーは「C:\Windows.old」フォルダーに集められています。
「NewOS」フォルダーは空になっています。
「Program Files」にはユーザーがインストールしたアプリケーションは置かれていません。
「ユーザー」フォルダーにはアップデート前のユーザー環境が保存されています。
旧バージョンのシステムとユーザー環境が保存されているためサイズはこの程度となっています。
旧バージョンの削除
「Windows.old」フォルダーは10日で自動的に削除されて、以前のバージョンに戻せなくなります。戻す必要が無い場合は、手動で「Windows.old」フォルダーなどを削除できます。
「設定」アプリの「システム」をクリックします。
左側で「ストレージ」を選択します。現在の使用サイズを確認できます。
「空き領域を自動的に増やす方法を変更する」をクリックします。
スクロールさせて「今すぐ空き領域を増やす」という項目にある「Windowsの以前のバージョンを削除しますか」にチェックを入れて、「今すぐクリーンアップ」をクリックします。
しばらくすると「今すぐクリーンアップ」の横に「チェック」が表示され、空けることができた領域サイズが表示されます。
ストレージ使用量を確認すると「一時ファイル」がほとんど無くなり、
「Windows.old」が削除されて「Windows10Upgrade」だけが残っていることが分かります。
「Windows10Upgrade」は削除しても構いません。
考察
「Windows 10 更新アシスタント」の動作を見ていると、あることを思いつきます。
新しいバージョンと古いバージョンを切り替えながら使うことは簡単に実現できるということです。
「Windows 10 更新アシスタント」が行っている方法は、Windows 10が稼働している状態で、新たにWindows 10をインストールし、フォルダーの配置を切り替えて、ユーザー環境をコピーすることで、新しいバージョンにアップデートしています。
以前のバージョンに戻す手順はその逆を行っているため非常に早く終わります。
アップデートの方が時間がかかるのは、ユーザー環境(レジストリー)から旧バージョンの情報を削除して新しいバージョンに置き換える作業に時間がかかっているためと思われます。
一度、新しいバージョンでの環境を作ってしまえば、切り替えるのは簡単でしょう。
ただし、Microsoftは以前のバージョンに戻ることは望んでいませんので、技術的には可能でも実装されることはないでしょう。
まとめ
現状の「Windows 10 更新アシスタント」の動作について説明しました。
やっていることが分かれば、対策は容易に立てられます。
コメント