複数ある物理PC・仮想マシンのPCで、一つのみWindows Updateに失敗するWindows PCがありました。今回、その解決を試みました。
WindowsとWindows Update
複数の物理PCや仮想マシンのPCでWindowsを利用しています。Windowsでは、セキュリティ更新や機能更新などのアップデートプログラムがWindows Updateという仕組みで毎月提供されています。
通常であれば、Windows Updateを実行すれば更新は完了します。
私が管理するほとんどのPC(仮想マシンのPCを含む)で、Windows Updateは問題なく実行できていました。しかし、一台のみWindows Updateが失敗するWindows PCがありました。
その問題を調査するための時間的余裕が取れなかったので、しばらく放置していました。Windows 10 22H2がリリースされる時期が近くなり、このままでは、Windows 10 22H2にアップグレードできないことになります。
ようやく、問題を調査し、解決を図ります。
特定のPCでWindows Updateが失敗する
Windows Updateに失敗するWindows PCは、Windows 10 21H1がインストールされています。このPCが、2021年11月くらいからWindows Updateのインストールが失敗するようになりました。ちょうど、Windows 10 21H2へのアップグレードができる時期ではあったのですが、Windows Updateが失敗するため、21H2 へのアップグレードもできない状態です。
Windows Updateが失敗するといっても、すべての更新プログラムが失敗するわけではありません。
- .NET Core
- .NET Framework
- Intel – SoftwareComponent
- Intel – System
- Intel – net
- Intel Corporation – Display
- Intel Corporation – Extension
- Realtek Semiconduct Corp. – MTD
- Microsoft Edge-WebView2 Runtime
- Microsoft Edge
- 悪意のあるソフトウェアの削除ツール
- Windows Subsystem for Linux
などの更新プログラムは正常にインストールできています。
しかし、「Windows 10 Version 21H1 の累積更新プログラム」という名前がつくものが失敗しています。
Windows 10 Version 21H1 の累積更新プログラム(KB5015807)の失敗
実際に失敗する画面を紹介します。
「2022-07 x64 ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム(KB5015807)」がインストールの保留中になっているので、「今すぐインストール」ボタンをクリックします。
すると、状態が「インストール中」に変わります。
しかし、状態が100%になると、エラーが発生したことが通知されます。
メッセージには、「更新プログラムのインストール中に問題が発生しましたが、後で自動的に再試行されます。この問題が引き続き発生し、Web検索やサポートへの問い合わせを通じて情報を集める必要がある場合は、次のエラーコードが役立つ可能性があります:(0x800f0989)」と表示されています。「再試行」ボタンがありますが、再試行しても、同じように失敗します。
特定のPCでWindows Updateで累積更新のみが失敗する
Windows Updateの更新の履歴を確認すると、以下の通りです。
この「更新の履歴」のなかで、失敗している更新プログラムを抜き出すと以下の通りです。
- 2022-07 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5015878)
- 2022-07 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5015807)
- 2022-05 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5013942)
- 2022-04 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5012599)
- 2022-03 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5011487)
- 2022-02 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5010342)
- 2022-01 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5009543)
- 2021-12 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5008212)
- 2021-11 x64ベースシステム用 Windows 10 Version 21H1 の累積更新プログラム (KB5007186)
「Windows 10 Version 21H1 の累積更新プログラム」という名前がつくのはことごとく失敗しています。Windows Updateが失敗し始めた時期以降にリリースされた累積更新プログラムです。
エラーコード
「Windows Updateの更新の履歴」から読み取れる、これらの更新プログラムのエラーコードは、0x800f0989
もしくは0x8024000b
です。
0x8から始まるエラーコードなので、HRESULT
形式のエラーコードと思われます。HRESULT
形式のエラーコードの定義は、Windows SDKのwinerror.h
から抜粋すると以下の通りです。
// Note: There is a slightly modified layout for HRESULT values below,
// after the heading "COM Error Codes".
//
// Search for "**** Available SYSTEM error codes ****" to find where to
// insert new error codes
//
// Values are 32 bit values laid out as follows:
//
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
// +---+-+-+-----------------------+-------------------------------+
// |Sev|C|R| Facility | Code |
// +---+-+-+-----------------------+-------------------------------+
//
// where
//
// Sev - is the severity code
//
// 00 - Success
// 01 - Informational
// 10 - Warning
// 11 - Error
//
// C - is the Customer code flag
//
// R - is a reserved bit
//
// Facility - is the facility code
//
// Code - is the facility's status code
HRESULT
形式のエラーコードの場合、最上位ビットがセットされているとエラーの扱いです。
また、それぞれのFacilityの値は、0x800f0989が0x00f なので10進数で15であり、0x8024000bが0x024 なので10進数で36となります。
Windows SDKのwinerror.h
から該当する定義を抜粋すると以下の通りです。
#define FACILITY_SETUPAPI 15
#define FACILITY_WINDOWSUPDATE 36
0x800f0989は、Setup APIに関するエラーとなります。0x8024000bは、Windows Updateに関するエラーとなります。
後者のWindows Updateに関するエラー(0x8024000b)は、wuerror.h
に定義がありました。
//
// MessageId: WU_E_CALL_CANCELLED
//
// MessageText:
//
// Operation was cancelled.
//
#define WU_E_CALL_CANCELLED _HRESULT_TYPEDEF_(0x8024000BL)
WU_E_CALL_CANCELLED
となっているので、Windows Update中にキャンセルされたことになります。このエラーは、Windows Update中にPCを再起動したか何かで、途中でキャンセルされたものと思われます。この場合は、Windows Updateを再起動後に再実行すれば問題ないので、このエラーは無視してよいです。
前者のSetup APIに関するエラー(0x800f0989)は、Windows SDKのヘッダーファイルには定義を見つけることができませんでした。
原因が不明
エラーコードからは、SetupAPIに関するエラーということはわかりましたが、具体的な原因はわかりませんでした。
その後も、
- Windowsの再起動直後にWindows Updateを実行する
- 該当のKB番号の更新プログラムをローカルにダウンローして、それをローカル実行する
- その他いろいろ
など試しましたが、Windows Updateのエラーは解決しません。
「Windows 10 Version 21H1 の累積更新プログラム」以外の更新プログラムは、問題なくインストールできているので、Windows Updateのサーバー、その経路のネットワーク、PCのネットワーク設定、および、PCのWindows Update関係のサービスプログラムなどの問題ではありません。
いろいろ考えた結果、Windows PC側のファイルが破損していてWindows Updateに失敗しているのではないかと考えました。
そこで、Windows Updateに関連するファイルに破損ファイルがないかを確認することにしました。
Windows Updateに関するファイル(コンポーネントストアのファイル)が破損していないかを確認・修復する方法の情報がマイクロソフトのサイトにあります。
DISM またはシステム更新準備ツールを使用して Windows Update のエラーを解決する – Windows Server | Microsoft Docs
この情報によると、dism.exeを使って、破損ファイルの検索や修復ができるようです。
DISMを使ってコンポーネントストアの破損の確認
DISMを使うには、管理者権限が必要です。まずは、管理者権限でコマンドプロンプト(cmd.exe)やWindows PowerShell (PowerShell.exe)、Windowsターミナル(wt.exe)などのコンソールを起動します。
管理者権限のコンソールから、dismを以下の引数で実行します。
dism /Online /Cleanup-Image /ScanHealth
実行が完了するまで環境によっては1時間以上かかるときもあります。プログレスが100%になるまで待ちます。
コンポーネントストアに破損が見つからなかった場合
コンポーネントストアに問題がなければ、以下のように「コンポーネント ストアが壊れていることは検出されませんでした。」と表示されます。
C:\>dism /Online /Cleanup-Image /ScanHealth 展開イメージのサービスと管理ツール バージョン: 10.0.19041.844 イメージのバージョン: 10.0.19043.1320 [==========================100.0%==========================] コンポーネント ストアが壊れていることは検出されませんでした。 操作は正常に完了しました。 C:\>
この場合、Windows Updateの失敗の原因は、コンポーネントストアのファイルの破損ではありません。この結果の場合は、修復は必要ありません。別の原因となります。この投稿で記載している修復の作業ではWindows Updateの失敗を直すことはできません。
コンポーネントストアに破損が見つかった場合
コンポーネントストアに問題が見つかった場合、以下のように「ンポーネント ストアは修復できます。」と表示されます。
C:\>dism /Online /Cleanup-Image /ScanHealth 展開イメージのサービスと管理ツール バージョン: 10.0.19041.844 イメージのバージョン: 10.0.19043.1320 [==========================100.0%==========================] コンポーネント ストアは修復できます。 操作は正常に完了しました。 C:\>
この場合、Windows Updateの失敗の原因は、コンポーネントストアのファイルの破損が原因の可能性があります。この結果の場合は、修復が必要です。この投稿で記載している修復の作業が必要です。
修復をすることにより、Windows Updateが成功するようになる可能性があります。
DISMを使ってコンポーネントストアの修復
DISMを使うには、管理者権限が必要です。まずは、管理者権限でコマンドプロンプト(cmd.exe)やWindows PowerShell (PowerShell.exe)、Windowsターミナル(wt.exe)などのコンソールを起動します。
コンポーネントストアのファイルの破損が確認できたら、それを修復します。修復するためには、管理者権限のコンソールから、dismを以下の引数で実行します。
dism /Online /Cleanup-Image /RestoreHealth
実行が完了するまで環境によっては1時間以上かかるときもあります。プログレスが100%になるまで待ちます。
上記の引数で実行したとき、修復に必要なファイルはWindows Update経由で取得されます。そのため、Windows Updateにつながる状態(インターネットに接続した状態)で実行する必要があります。
修復が成功した場合
修復が成功すると、以下のように「正常に完了しました。」と表示されます。
C:\>dism /Online /Cleanup-Image /RestoreHealth 展開イメージのサービスと管理ツール バージョン: 10.0.19041.844 イメージのバージョン: 10.0.19043.1320 [==========================100.0%==========================] 復元操作は正常に完了しました。 操作は正常に完了しました。 C:\>
修復が成功した場合は、コンポーネントストアのファイルは正常な状態になっています。これが原因でWindows Updateが失敗していた場合は、次回のWindows Updateから成功するようになります。
Windows Updateを再実行してみましょう。
修復が失敗した場合
修復が失敗すると、プログレスの表示の下にエラーコードが表示されます。
エラーの一例を紹介すると、以下のようなエラーコード 0x800f081fのエラーがあります。
C:\>dism /Online /Cleanup-Image /RestoreHealth 展開イメージのサービスと管理ツール バージョン: 10.0.19041.844 イメージのバージョン: 10.0.19043.1320 [==========================100.0%==========================] エラー: 0x800f081f ソース ファイルが見つかりませんでした。 機能の復元に必要なファイルの場所を指定するには、"Source" オプションを使用してください。ソースの場所の指定方法の詳細については、https://go.microsoft.com/fwlink/?LinkId=243077 を参照してください。 DISM ログ ファイルは C:\WINDOWS\Logs\DISM\dism.log にあります C:\>
このエラーは、修復するために必要なファイルを見つけることができなかったときのエラーです。このエラーが表示されるときは、Windows Update経由で修復用のファイルが取得できなかったときです。考えられる原因としては、
接続しているネットワークがホームネットワークの場合は
- PCがインターネットにつながっていなかった(LANケーブルをつなげていない、WiFiがオフなど)
です。
接続しているネットワークが会社などのネットワークの場合、および、ドメインに参加したPCの場合、上記に加え以下の原因も考えられます
- PCのHTTPプロキシの設定が適切ではない
- PCがグループポリシーでマイクロソフトのWindows Updateサーバーにつながない設定になっている
ネットワーク接続の問題であれば、直して再実行すればよいです。しかし、マイクロソフトのWindows Updateサーバーにつながない設定になっている場合は、別の方法でコンポーネントストアを修復する必要があります。
Windows Update経由で修復用のファイルが取得できない場合であっても、コンポーネントストアを修復する方法は、機会があれば別の投稿で紹介したいと思います。
以上、今回の投稿では、Windows Updateが失敗するときに、コンポーネントストアを修復してみる方法の紹介でした。
この度こちらの情報で助けられた者です。
本当にありがとうございました。
いろいろやってもダメで、半ば諦めかけていた時にこちらにたどり着き、素人なので…何となくわかるところだけ拾い読みして(-_-;)…挑戦しましたが、最初は失敗。ノートンが動いていたので無効にして再挑戦し、やっと修復できて無事にアップデートできました。
重ね重ね助けていただきありがとうございました!