Windows 10 1909から20H2のアップデートに失敗し続けるエラー原因(成功までに行った解決策全部)

Windows 10 1909から20H2に移行するWindows Updateに失敗し続けた結果、「デバイスに重要なセキュリティ修正プログラムと品質修正プログラムがありません。」と表示されるようになり、ついにはパソコンを起動するたびにウザいポップアップで警告するようになった我が家のPC2台。
しょうがないので原因を探りながらあれこれやった結果、なんとか成功しました。
具体的にどれがエラーの発生源だったのかは不明ですが、やったことを全部書いておくので、自己責任で参考にどうぞ。
アップデートそのものに時間がかかるので大変ではありますが、基本的にどれも簡単な作業です。
ちなみにググると「DISMコマンドとシステムファイルチェッカーによるシステムファイルの修復」を勧めてる人が多いですが(「DISM.exe /Online /Cleanup-image /Restorehealth」とか「sfc /scannow」とか)、時間が掛かりそうだったのでやりたくなくて後回しにしてたらやらなくてもアップデート成功しました。あくまでうちのケースですが。

事前準備:Windows10 更新アシスタントとSetupDiagの用意


Windows10 更新アシスタントをダウンロードする

まずは一旦Windows Updateを止めて、「Windows10 更新アシスタント」を使いましょう。
「設定」の「Windows Update」から「更新を7日間一時停止」します。
Microsoft公式のWindows10更新ダウンロードページから「今すぐアップデート」を選択するとUpdate Assistant(更新アシスタント)をダウンロードできます。
これを使うことで、自分の都合のいいタイミングでアップデート掛けられます。「Windows Update」側におまかせだと、いつ更新はじまるかよく分からないので……。
なお更新アシスタントを使うと20H2をすっ飛ばして21H1になります。まぁ、キニシナイキニシナイ。

SetupDiagでエラー内容を確認

SetupDiagとはWindows Updateが失敗した理由を解析して、結果をログファイルで出力してくれる診断ツールです。
Microsoft公式のSetupDiagページにある「Download SetupDiag」ボタンから入手可能。
SetupDiag.exeを実行すると、いろいろコマンドプロンプト上で動いて最終的に同一フォルダに

SetupDiagResults.log
SetupDiag.exe.config
Logs.zip

の3ファイルが作成されます。このうち「SetupDiagResults.log」を開いて「Error」と書かれいている部分を探して読むといいです。

うちのPC2台の場合「Error: SetupDiag reports rollback failure found.」と書かれており、
一つはエラーコード「0xC1900101-0x20017」でどうもドライバが古いと検討をつけました。
もう一つのPCは「0x800F0830-0x20003」で「The new OS image is corrupt and cannot be repaired. 」とか「You must free up at least "8801" MB of space on the System Drive, and try again.」と書かれていたので、空き容量に少し余裕をもたせてみました。

各種ドライバーを更新する

古いドライバが妨げになっている可能性があったので、
・チップセットのドライバー
・グラフィックカードのドライバー
・サウンドカードのドライバー
など、目についた主要なドライバーを更新。
面倒だったので、例えばWiFi関係とかそういう細かいデバイスは無視。かなり大雑把にやったので、ここはあまり関係ないかも……。

BIOSを更新して、Virtualization関連を無効化

BIOSが古い場合も妨げになるらしいので、マザーボードの型番などを確認して更新しました。
うちのPCは二つともASUS。公式ツールを使ってあえて「手動更新」する必要がありました。詳しくは下記記事をどうぞ。
ASUS製マザーボートのBIOSアップデート方法(AI suite 3/EZ アップデート/Asus Business Manager使用)
さらにBIOSで「仮想化支援機能」を有効化しているとエラーになるという情報をみつけたので、ついでに無効化しました。
Virtual BoxとかHyper-VとかBlueStacksとか仮想マシン関連動かしている人は試してみてください。
ASUSマザーボードの場合は、BIOS画面でAdvancedモードを選択して、CPUの設定から「仮想化支援機能」を無効にします。
ここでちょっと面倒なのが、メーカーや製品によって表記がてんでばらばらなんです。
よくあるケースを列挙しておくので、それっぽいのを自分で探してみてください。

Intel VT
Intel Virtualization Technology
VT-x
VMX

とにかく「Virtualization」や「VT」とつくものが怪しいです。
ただし、BIOSの設定をよく分からずに弄るのは危険です。選んだ項目の説明文が出ると思うので、それもよく読みましょう。

例えば、ググると「USB Legacy SupportをオフにしたらWindows Update成功した」と書いている記事がわんさか出ますが、これよく考えて下さい。
「USB Legacy Support」はWindows起動前にUSBを使えるようにする機能ですよ?
USBキーボードの人がオフにしたら、次からBIOS画面に入れないよ? だってWindows起動するまでキーボード使えないもん……。
最近のパソコンはPS/2ポート無いから、最悪の場合マジで素人には復旧が難しくなるので本当に怖い。
くどいようですが、しっかりリスクを認識したうえで自己責任でお願いしますね。

Microsoft PDF印刷、Microsoft XPSドキュメントライターを無効化

コントロールパネルの「プログラムと機能」から「Windowsの機能の有効化または無効化」を選んで、
・Microsoft PDF印刷
・Microsoft XPSドキュメントライター
の二つのチェックを外します。
さらにC:\$Windows.~BT\Sources\panther\compatscancache.datも削除します。

さてなぜこれらを無効化したかというと、Windows updateの詳しいログが保存されているフォルダからそれっぽい情報を拾ったから。
C:\$Windows.~BT\Sources\panther\
がログが色々保存されているフォルダです。
ここから「CompatData」から始まるXMLファイルをエディタで開いてみると。
Inf="●●.inf" BlockMigration="True"
となっている部分が2カ所ありました。どうもこれがアップデートでブロックされている部分っぽい。
(複数あるので最新のファイルから順にみていくと良い)
C:\Windows\INFやC:\Windows\System32\DriverStore\FileRepositoryで●●.infを探すと、
「Microsoft Print To PDF」と「Microsoft XPS Document Writer」であることが判明したわけです。

とりあえずWindows Update成功

色々やりながらだったので原因ははっきりとは分かりませんでしたが、とりあえず上記全部行ってからWindows10 更新アシスタント走らせたら、無事アップデートできました。
ちなみに私が怪しいとにらんでいるのは「BIOS更新」と「仮想化支援機能無効化」、「Windowsの機能の有効化または無効化」あたりです。

ユーザーがここまでしないとアップデートできず、そのまま勝手にサポート打ち切られるとか本当困ったもんです。
ああ、Windows XP時代が懐かしい……。手間のかかる子だったけどMEも愛嬌のあるポンコツっぷりで嫌いじゃなかったよ。