【Win11】エラー 0x800f0806で更新がクラッシュする無限ループの解決法!保留中の操作を強制解除する

Windows 11 でシャットダウンや再起動をするたびに更新プログラムのインストールが始まり、必ずクラッシュして元に戻ってしまう……。さらに、DISM コマンドでコンポーネントのクリーンアップ(/startcomponentcleanup)を実行しても、「エラー: 0x800f0806 保留中の操作があるため、この操作を完了できませんでした」と弾かれてしまう。

今回は、そんな「Windows Update の無限クラッシュループ」から抜け出すための、Microsoft 公式の強力なトラブルシューティング手順を解説します。 黒い画面(コマンドプロンプト)での入力ミスを防ぐため、事前に自動実行ファイル(バッチファイル)を作成しておく確実な方法をご紹介します。

目次

エラー「0x800f0806」とクラッシュループの原因

このエラーは、システム内に「再起動して完了させなければならない処理(pending.xml)」が詰まったままロックされている状態です。再起動しても処理に失敗してクラッシュするため、いつまで経っても「保留中」のままになり、新しい操作も受け付けない無限ループに陥っています。

【警告】稼働中のWindowsから無理にアクセス権を変更してはいけない

「保留中の処理が書かれているなら、普通に起動している Windows から C:\Windows\WinSxS フォルダーを開いて直接いじればいいのでは?」と思うかもしれません。 しかし、このフォルダーは「TrustedInstaller」というシステム権限で強力に保護されています。過去に筆者が実験で無理やりアクセス許可を変更したところ、システムが完全にダウンして起動しなくなりました。

▼その時の悲惨な実験記録はこちら

そのため、必ず「Windows 回復環境(WinRE)」から安全にオフライン操作を行ってください。

【準備】コマンド自動実行ファイル(バッチファイル)を作成する

回復環境(WinRE)の黒い画面では、長いコマンドを手打ちする必要があり、さらには作業領域不足で「エラー: 0x800f082f」が発生する罠が潜んでいます。 これを回避するため、通常の Windows が起動している間に、ダブルクリック感覚で実行できる自動プログラムを作っておきます。

1.「メモ帳」を開きます。

2.以下のコードをすべてコピーして、メモ帳に貼り付けます。
(※このコードは、ズレてしまった Windows ドライブを自動で探し出し、エラーを防ぐための作業領域を作った上で修復コマンドを実行するプログラムです)

@echo off
echo 実行中のドライブを取得しています...
set "WinDrive=%~d0"

echo Windowsドライブは [%WinDrive%] です。
echo.
echo スクラッチ領域を作成し、DISMコマンドを実行します...

mkdir %WinDrive%\Scratch
DISM /Image:%WinDrive%\ /Cleanup-Image /RevertPendingActions /ScratchDir:%WinDrive%\Scratch

echo.
echo 処理が完了しました。ウィンドウを閉じてPCを再起動してください。
pause

3.メニューの「ファイル」>「名前を付けて保存」をクリックします。

4.「ファイルの種類」を「すべてのファイル (.)」に変更します。

5.「ファイル名」を repair.bat にします。

6.【重要】保存ボタンの横にある「エンコード」を「ANSI」に変更します。 (※Windows 11 のメモ帳は標準が「UTF-8」になっています。「ANSI」に変更しないと、実行時の黒い画面で日本語が文字化けしてしまいます)

7.まずは分かりやすいように、左側のメニューから「デスクトップ」を選んで保存し、メモ帳を閉じます。

8.デスクトップにできた repair.bat を右クリックして「コピー」します。

9.エクスプローラーを開き、「PC」>「ローカルディスク (C:)」を開きます。

10.Cドライブの何もない空間で右クリックし、「貼り付け」を実行します。

11.「対象のフォルダーへのアクセスは拒否されました」「このフォルダーへコピーするには管理者の権限が必要です」という警告画面が出たら、「続行」をクリックします。

対象のフォルダーへのアクセスは拒否されました
対象のフォルダーへのアクセスは拒否されました

12.これで Cドライブの直下にバッチファイルが配置されました。

回復環境から保留アクションを元に戻す

まずは Microsoft 公式の DISM コマンドを使って、保留になっているタスクを綺麗にロールバック(取り消し)します。

1.Windows のスタートメニューから、キーボードの「Shift」キーを押しながら電源アイコンの「再起動」をクリックします。

2.青い画面(回復環境)が出たら、「トラブルシューティング」>「詳細オプション」>「コマンド プロンプト」を開きます。

①オプションの選択
①オプションの選択
②トラブルシューティング
②トラブルシューティング
③詳細オプション
③詳細オプション

3.黒い画面が開いたら、Windows が入っているドライブの文字(ドライブレター)を探します。

回復環境では「C」からズレることがあるためです。 dir C:\\は半角の円マーク)と入力て Enter を押し、「repair.bat」があればそこが Windows ドライブです。 ※もし「ファイルが見つかりません」と出た場合は、dir D:\dir E:\ と順番に入力して探してください。(ここでは仮に Cドライブにあったとします)

コマンドプロンプト
コマンドプロンプト

4.repair.bat が見つかったドライブ文字を使って、以下のように入力しEnterを押します。

C:\repair.bat

5.「操作は正常に完了しました」と出たらコマンドプロンプトを右上の × ボタンで閉じてください。

コマンドプロンプト
コマンドプロンプト

6.「オプションの選択」が表示されますので、「続行」を選択します。

オプションの選択
オプションの選択

7.「更新が進行中です。コンピューターの電源を入れたままにしてください。」と表示され、しばらくすると Windows が起動します。

更新が進行中です。コンピューターの電源を入れたままにしてください。
更新が進行中です。コンピューターの電源を入れたままにしてください。

8.他に問題がなければ、「保留中の操作」は取り消され、シャットダウンや再起動をするたびに更新プログラムのインストールが始まる不具合が解決されます。

【解決法2】レジストリとpending.xmlを手動でリセットする(最終手段)

解決法1 でも起動しない(クラッシュする)場合は、Microsoft 公式が案内している最終手段、手動でのフラグ削除とサービス停止を行います。

① pending.xml のリネーム

  1. 再び回復環境のコマンドプロンプトを開き、Windows ドライブ(例:Cドライブ)を確認します。
  2. 以下のコマンドを実行し、保留ファイルの名前を変更して無効化します。
ren C:\Windows\WinSxS\pending.xml pending.old

② レジストリの「保留フラグ」を削除

1.コマンドプロンプトに regedit と入力して Enter を押し、レジストリエディターを開きます。

コマンドプロンプト
コマンドプロンプト

2.左側のツリーから HKEY_LOCAL_MACHINE をクリックして選択状態にします。

レジストリエディター
レジストリエディター

3.メニューの「ファイル」>「ハイブの読み込み」をクリックし、C:\Windows\System32\config\COMPONENTS を開きます。

ハイブの読み込み
ハイブの読み込み
C:\Windows\System32\config\COMPONENTS を選択
C:\Windows\System32\config\COMPONENTSを選択

4.キー名を聞かれるので「Test」と入力し、OK をクリックします。

キー名の入力
キー名の入力

5.HKEY_LOCAL_MACHINE\Test を展開し、右側に pendingxmlidentifier という値があれば右クリックして「削除」します。

HKEY_LOCAL_MACHINE\Test を展開
HKEY_LOCAL_MACHINE\Test を展開

6.HKEY_LOCAL_MACHINE\Testを選択した状態で、メニューの「ファイル」>「ハイブのアンロード」をクリックして Test を閉じます。

ハイブのアンロード
ハイブのアンロード

7.「このキーとサブキーをすべてアンロードしますか?」と聞かれたら、「はい」をクリックします。

③ TrustedInstaller の自動起動を無効化

1.左側のツリーから HKEY_LOCAL_MACHINE をクリックして選択状態にします。

2.「ファイル」>「ハイブの読み込み」をクリックし、今度は C:\Windows\System32\config\SYSTEM を開きます。

3.キー名に再び「Test」と入力します。

4.HKEY_LOCAL_MACHINE\Test\ControlSet001\Services\TrustedInstaller まで展開します。

5.右側にある Start という値をダブルクリックし、値のデータを「4」(無効)に変更して OK を押します。

HKEY_LOCAL_MACHINE\Test\ControlSet001\Services\TrustedInstaller まで展開
HKEY_LOCAL_MACHINE\Test\ControlSet001\Services\TrustedInstaller まで展開
DWORD (32ビット) 値の編集
DWORD (32ビット) 値の編集
値のデータが「4」(無効)に変更された
値のデータが「4」(無効)に変更された

6.HKEY_LOCAL_MACHINE\Testを選択した状態で、メニューの「ファイル」>「ハイブのアンロード」をクリックして Test を閉じます。

7.「このキーとサブキーをすべてアンロードしますか?」と聞かれたら、「はい」をクリックします。

8.レジストリエディターとコマンドプロンプトを閉じると「オプションの選択」が表示されますので、「続行」を選択します。

ループを抜け出した後の事後処理

Windows が起動し、シャットダウンや再起動をするたびに更新プログラムのインストールが始まる不具合が解決されたら、一時的に止めていた「TrustedInstaller」サービス(Windows Modules Installer)を元に戻す必要があります。

  1. キーボードの「Windowsキー + R」を押し、services.msc と入力して実行します。
  2. サービス一覧から「Windows Modules Installer」を探します。
  3. 「スタートアップの種類」を確認し、もし「無効」になっていたらダブルクリックで開き、「手動」に変更して「OK」を押します。(すでに「手動」に戻っていれば、何もせず画面を閉じて大丈夫です)
  4. エラーの再発を防ぐために、念のため更新キャッシュの削除とコンポーネントのリセットを行うことをおすすめします。
この記事が「役立った!」と思ったら、ぜひSNSでシェアをお願いします。
  • URLをコピーしました!

この記事を書いた人

日々の PC 操作から生まれた疑問や、「もっとこうしたい」という想いを原動力に、2008年頃から現在に至るまで Windows の知識を独学で追求してきました。試行錯誤を重ねて見つけた「なるほど!」な技や、困った時の解決策を、皆さんの PC ライフに役立ててほしい一心で発信しています。

プロフィールを見る

コメント

コメントする

【投稿について】
記事の内容に関するご質問や情報提供は大歓迎です。
ただし、記事の趣旨と無関係な内容、特定の人物・団体への批判、攻撃的な表現、不適切な語句を含むコメントは、管理人の判断で予告なく削除・非公開とさせていただく場合があります。
また、スパム対策機能により自動的に削除される場合もありますのでご了承ください。

CAPTCHA


目次