【ITニュース解説】0x800F0922 CBS_E_INSTALLERS_FAILED When Installing Windows Updates
2026年10月24日に「Dev.to」が公開したITニュース「0x800F0922 CBS_E_INSTALLERS_FAILED When Installing Windows Updates」について初心者にもわかりやすく解説しています。
ITニュース概要
Windowsアップデート失敗時のエラー0x800F0922は、インストーラー処理失敗が原因だ。イベントログやCBS.logで失敗したインストーラーを特定し、破損したタスクの削除、コンポーネントストア修復、Tempファイル整理などで問題を解決できる。
ITニュース解説
Windows Updateの際に「0x800F0922 CBS_E_INSTALLERS_FAILED」というエラーに遭遇することがある。このエラーは、システムエンジニアを目指す上で知っておくと役立つ、Windowsの重要なコンポーネントに関連する問題を示唆している。具体的には、Windowsの更新プログラムのインストールが失敗したり、Windows Serverで特定の役割や機能を追加したり削除したりする際に問題が発生した場合に表示される。
このエラーコード「0x800F0922」は、Component-Based Servicing、略してCBSと呼ばれるWindowsのサービスが「CBS_E_INSTALLERS_FAILED」という内部エラーを報告していることを意味する。これは、更新プログラムのインストールプロセス中に、特定のインストーラーが正常に動作しなかったことを示している。Windows Updateの履歴を確認したり、システムのイベントログ(特に「Microsoft-Windows-WindowsUpdateClient」プロバイダーのイベントID 20)を参照したりすると、「インストール失敗:Windowsは以下の更新プログラムをエラーコードとともにインストールできませんでした」というメッセージと共にこのエラーが記録されているのが見つかるだろう。もしWindows Server環境で役割や機能を削除しようとしてこのエラーが出た場合は、「CBS_E_INSTALLERS_FAILED Processing advanced installers and generic commands failed」という別のメッセージが表示されることもある。
では、なぜこのようなエラーが起こるのか。Windowsの更新プログラムは、単にファイルを置き換えるだけでなく、システムに新しい機能を追加したり、既存の機能を更新したりするために、様々な「高度なインストーラー」を実行する。例えば、新しいスケジュールされたタスクを登録したり、システムの特定のレジストリ設定を変更したりするといった処理が含まれる。これらのインストーラーのうち、どれか一つでも失敗すると、Windowsは全体の更新プロセスが正常に完了できないと判断し、安全のために更新プログラムのインストール全体をロールバック(元に戻す)する。エラーはシステム起動時などにログに記録され、その後ロールバックが実行されることが多い。
このエラーの原因を特定するには、いくつかのステップを踏む必要がある。まず、どの更新プログラムがいつ失敗したのかを確認することから始める。これは、管理者権限で実行したPowerShellプロンプトでGet-WinEvent -FilterHashtable @{ LogName = 'System'; ProviderName = 'Microsoft-Windows-WindowsUpdateClient'; Id = 20 } -MaxEvents 10 | Select-Object TimeCreated, Message | Format-Listというコマンドを実行することで、直近の更新失敗イベントを一覧表示できる。
次に、具体的なインストーラーの失敗箇所を特定する。WindowsのログファイルであるC:\Windows\Logs\CBS\CBS.logに詳細な情報が記録されている。このファイルを直接開いて探すのは大変なので、再びPowerShellを使ってSelect-String -Path C:\Windows\Logs\CBS\CBS.log -Pattern 'Failed execution of queue item Installer' -SimpleMatch | Select-Object -First 5というコマンドで、「Failed execution of queue item Installer」という文字列を含む行を検索する。この行には、失敗したインストーラーの名前と、そのインストーラーが返したエラーコード(HRESULT)が記されている。この行の数行上には、「Begin executing advanced installer phase」というブロックがあり、ここで現在インストール中のコンポーネントとインストーラーの名前がリストアップされているので、どのコンポーネントのどのインストーラーが問題を引き起こしているのかを把握できる。もし複数のマシンで同じエラーが発生している場合は、複数のマシンで同様のログを調べ、共通して失敗しているインストーラーやコンポーネントがないかを確認すると、問題の根源を特定しやすくなるだろう。
原因が特定できたら、それに応じた解決策を適用する。
例えば、インストーラーが「Task Scheduler」で、コンポーネントが「Microsoft-OneCore-SecureBootEncodeUEFI-Task」となっている場合がある。これは、「SecureBootEncodeUEFI」というスケジュールされたタスクが破損していることを意味する可能性が高い。この場合、タスクスケジューラーのオペレーションログ(Microsoft-Windows-TaskScheduler/Operational)にイベントID 146(サービス起動時にタスクのロードに失敗したという内容)が記録されていることもある。この問題を解決するには、まずシステムにステージングされている(インストール準備がされているがまだ適用されていない)更新パッケージを削除する必要がある。これは、Dism /english /online /get-packages /format:table | findstr /i "Staged"でステージングされているパッケージを特定し、Dism /online /remove-package /PackageName:<staged package name>で削除する。次に、問題のタスク(SecureBootEncodeUEFI)の固有の識別子(GUID)をレジストリから取得する。これはreg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\PI\SecureBootEncodeUEFI" /v IDというコマンドで取得できる。最後に、取得したGUIDと関連するレジストリエントリを削除してタスクスケジューラの破損したエントリをクリアする。具体的には、reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Maintenance\{GUID}" /f、reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Plain\{GUID}" /f、reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{GUID}" /f、そしてreg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\PI\SecureBootEncodeUEFI" /fを実行する。これらの操作を終えてから、もう一度更新プログラムのインストールを試す。
インストーラーが上記とは異なる場合でも、基本的な考え方は同じだ。ログから特定された失敗したコンポーネントに対して、最近どのような変更があったかを確認する。例えば、特定のサービスが無効化されていないか、重要なスケジュールされたタスクが削除されていないかなどを調査し、もし異常があれば元の状態に戻してから更新プログラムを再試行する。
また、インストーラー名の後に表示されるHRESULTが、コンポーネントストアの破損を示すエラーコード(例えば0x80070002)である場合もある。この場合は、Windowsのシステムファイルを修復する一般的な手順を実行する。DISM.exe /Online /Cleanup-Image /RestoreHealthというコマンドでコンポーネントストアを修復し、続けてsfc /scannowでシステムファイルのスキャンと修復を行う。これらのツールを実行してから、更新プログラムの再インストールを試みるとよい。
Windows Serverで役割や機能を削除しようとして0x800F0922エラーが発生した場合は、C:\Windows\Tempフォルダの内容を確認する。このフォルダに65,000以上のファイルが蓄積されていると、問題が発生することがある。その場合、C:\Windows\Tempフォルダ内のファイルをすべて削除してから、再度役割や機能の削除を試してみよう。
これらのエラー解決の過程では、関連する他のイベントやエラーコードも手がかりとなる。例えば、WindowsUpdateClientのイベントID 20は更新失敗の記録であり、TaskSchedulerのイベントID 146はタスクのロード失敗を示す。また、SecureBootEncodeUEFIのケースでTask Schedulerインストーラーが返すことのあるHRESULT「0x80070002」は、「ERROR_FILE_NOT_FOUND」(ファイルが見つからない)ということを意味し、問題の性質を理解する上で役立つ。
システム管理ツールの中には、このような複雑な更新管理を効率的に行うためのものも存在する。例えば、ET DuckyのようなRMM(Remote Monitoring and Management)ツールは、Windows Update Agentと直接連携して更新プログラムをKB番号でインストールし、カーネルイベントを監視してサービスがクラッシュループなく復旧したことを確認することで、パッチの成功を判定する。特定の更新プログラムを段階的に(例えば、少数のマシンから始めて問題がなければ次のグループに展開するといった「リングベース」の展開)適用したり、問題が発生した際に展開を一時停止したりする機能を持つものもある。さらに、ブラウザから直接、離れた場所にあるマシンのログファイル(CBS.logなど)を検索・確認できる機能は、トラブルシューティングの際に非常に有効だ。
システムエンジニアとしてこれらのエラーに直面したとき、エラーコードの意味を理解し、適切なログを調べて原因を特定し、体系的な手順で解決策を適用する能力は非常に重要となる。この0x800F0922エラーのトラブルシューティングは、Windowsシステムの深い理解と問題解決のプロセスを学ぶ良い機会となるだろう。