前回は、Windows Updateの失敗の対策として、コンポーネントストアを修復する方法について説明しました。今回は同じ方法なのですが、Windows Updateサーバーにつなげない場合でも修復する方法の紹介です。
ファイルソースとしてWindows Imageファイルを使う場合の修復
前回に紹介したコンポーネントストアの修復方法は、Windows Imageファイル(isoファイル)を利用してDISMを使う以下の方法でした。
dism /Online /Cleanup-Image /RestoreHealth /LimitAccess /Source:wim:M:\sources\install.wim:3
Windowsのインストールイメージ(isoファイル)がMドライブにマウントされている場合の例となります。
引き続き修復が失敗する場合
ただし、指定したisoイメージに、修復に必要なファイル名とバージョンのファイルが存在しなければ、引き続き以下の結果となり、修復ができません。
C:\>dism /Online /Cleanup-Image /RestoreHealth /LimitAccess /Source:wim:M:\sources\install.wim:3 展開イメージのサービスと管理ツール バージョン: 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:\>
今回は、この場合の対処方法についての投稿です。
DISMのログ ファイルを確認する
エラーの詳細を調べるために、DISMのログファイルを確認します。ログファイルの場所は、エラーが発生したときのメッセージに記載されています。
DISM ログ ファイルは C:\WINDOWS\Logs\DISM\dism.log にあります
このファイルの中で、Errorの文字があるところを抽出すると以下となります。
2022-07-31 00:55:43, Info DISM DISM Package Manager: PID=13512 TID=26704 Error in operation: source for package or file not found, ResolveSource() unsuccessful. (CBS HRESULT=0x800f081f) - CCbsConUIHandler::Error 2022-07-31 00:55:43, Error DISM DISM Package Manager: PID=13512 TID=24568 Failed finalizing changes. - CDISMPackageManager::Internal_Finalize(hr:0x800f081f) 2022-07-31 00:55:43, Error DISM DISM Package Manager: PID=13512 TID=24568 The source files could not be found; their location must be specified using the /source option to restore the feature. - GetCbsErrorMsg 2022-07-31 00:55:43, Error DISM DISM Package Manager: PID=13512 TID=24568 Failed processing package changes with session option CbsSessionOptionRepairStoreCorruption - CDISMPackageManager::RestoreHealth(hr:0x800f081f) 2022-07-31 00:55:43, Error DISM DISM Package Manager: PID=13512 TID=24568 The source files could not be found; their location must be specified using the /source option to restore the feature. - GetCbsErrorMsg 2022-07-31 00:55:43, Error DISM DISM Package Manager: PID=13512 TID=24568 Failed to restore the image health. - CPackageManagerCLIHandler::ProcessCmdLine_CleanupImage(hr:0x800f081f) 2022-07-31 00:55:43, Error DISM DISM Package Manager: PID=13512 TID=24568 Failed while processing command cleanup-image. - CPackageManagerCLIHandler::ExecuteCmdLine(hr:0x800f081f) 2022-07-31 00:55:43, Info DISM DISM Package Manager: PID=13512 TID=24568 Further logs for online package and feature related operations can be found at %WINDIR%\logs\CBS\cbs.log - CPackageManagerCLIHandler::ExecuteCmdLine
一行目にエラーコードが 0x800f081f と記録されており、コマンドを実行したときに表示されたエラーコード(エラー: 0x800f081f)と一致します。ログファイルからこの抽出した部分が該当のエラーであることがわかります。
エラーログからは、CCbsConUIHandler / GetCbsErrorMsg / CbsSessionOptionRepairStoreCorruption のようにCbsという文字が読み取れます。Cbsに関連するエラーのようです。
さらなるエラーの詳細は、%WINDIR%\logs\CBS\cbs.log
にありそうであることが読み取れます。
問題となっているファイルを特定する
そこで、%WINDIR%\logs\CBS\cbs.log
ファイルを確認します。
このファイルの中で、Errorの文字があるところを抽出すると以下となります。
2022-07-31 00:55:07, Info CBS Appl:LCU package and revision compare set to explicit 2022-07-31 00:55:07, Info CBS Package Format: PSFX 2022-07-31 00:55:07, Info CBS Repr: Staged package check completes 2022-07-31 00:55:07, Info CBS Failed to GetFile from WIM sandbox process [HRESULT = 0x80070003 - ERROR_PATH_NOT_FOUND] 2022-07-31 00:55:07, Error CBS Failed to look for file WinSxS\wow64_microsoft-windows-ncryptprov-dll_31bf3856ad364e35_10.0.19041.1202_none_9d8aa8357dab8196\r\ncryptprov.dll in some alternate sources [HRESULT = 0x80070003 - ERROR_PATH_NOT_FOUND] 2022-07-31 00:55:07, Info CBS Repr: Not able to find replacement file for component wow64_microsoft-windows-ncryptprov-dll_31bf3856ad364e35_10.0.19041.1202_none_9d8aa8357dab8196, file r\ncryptprov.dll from any local source
必要としているファイルは、コンポーネント wow64_microsoft-windows-ncryptprov-dll_31bf3856ad364e35_10.0.19041.1202_none_9d8aa8357dab8196
の ncryptprov.dll
であることがわかります。
このファイルを含むWindowsイメージのisoファイルがあれば修復できることになります。
必要としているファイルのisoファイルの特定
必要としているファイルは、コンポーネント wow64_microsoft-windows-ncryptprov-dll_31bf3856ad364e35_10.0.19041.1202_none_9d8aa8357dab8196
の ncryptprov.dll
であることがわかりました。
ここから、必要とするWindows イメージのisoファイルを特定していきます。
ファイル名にWindowsのビルドバージョンである10.0.19041.1202
が含まれています。
そこで、19041.1202 をWEB検索します。すると、マイクロソフトがリリースした、このバージョンの更新プログラムを見つけることができます。
2021 年 9 月 1 日 — KB5005101 (OS ビルド 19041.1202、19042.1202、および 19043.1202)
21年9月1日にリリースされているので、最低限、この更新が反映されたWindowsのisoイメージである必要があります。
Visual Studio Subscription (旧MSDN Subscription)
Visual Studio Subscription (旧MSDN Subscription) に加入していると、開発時・検証時に開発環境・検証環境の作成に必要となる、Windowsのisoイメージ、Visual Studioなどが以下のマイクロソフトのサイトからダウンロードできます。
https://my.visualstudio.com/Downloads/Featured
Visual Studio Subscriptionには、個人の開発者だと加入していることは少ないかもしれません。しかし、業務でWindowsのソフトウェアを開発している開発者の場合は、開発の作業効率が上がるため、加入していることが多いと思います。
このサイトからはWindows のisoイメージをダウンロードすることができます。それも、Windows が製品化されたときの初版だけではありません。このサイトには毎月のセキュリティ更新を反映したWindowsのisoイメージが、毎月追加されており、それらもダウンロードできます。
例えば、Windows 10 21H1 のWindowsのisoイメージであれば、2022年9月3日時点で以下のisoイメージが用意されています。
- Windows 10 (consumer editions), version 21H1
- Windows 10 (consumer editions), version 21H1 (updated May 2021)
- Windows 10 (consumer editions), version 21H1 (updated Jun 2021)
- Windows 10 (consumer editions), version 21H1 (updated July 2021)
- Windows 10 (consumer editions), version 21H1 (updated Aug 2021)
- Windows 10 (consumer editions), version 21H1 (updated Sep 2021)
- Windows 10 (consumer editions), version 21H1 (updated Oct 2021)
- Windows 10 (consumer editions), version 21H1 (updated Nov 2021)
- Windows 10 (consumer editions), version 21H1 (updated Dec 2021)
- Windows 10 (consumer editions), version 21H1 (updated Jan 2022)
- Windows 10 (consumer editions), version 21H1 (updated Feb 2022)
- Windows 10 (consumer editions), version 21H1 (updated March 2022)
- Windows 10 (consumer editions), version 21H1 (updated April 2022)
- Windows 10 (consumer editions), version 21H1 (updated May 2022)
- Windows 10 (consumer editions), version 21H1 (updated June 2022)
- Windows 10 (consumer editions), version 21H1 (updated July 2022)
- Windows 10 (consumer editions), version 21H1 (updated Aug 2022)
Windows Updateでは、毎月の第2火曜日(米国時間)に、セキュリティ更新を含む「品質更新プログラム」がリリースされます。それを反映したisoイメージが、毎月リリースされているのがわかると思います。
上記の修復エラーの例では、19041.1202 の品質更新プログラムが2021年9月にりりーすされていました。そのため修復では2021年9月1日直後のWindows 10 21H1(19043) のイメージである「2021年9月更新版」、もしくは、「2021年10月更新版」のisoイメージを使います。最新の「2022年8月更新」を使わないことには理由があります。最新のisoファイルを使うと、その中に含まれているファイルは、バージョンがさらに新しく、修復に必要なファイルと異なってしまう可能性がるからです。
使用するisoファイルが決まれは、あとは修復を実行するのみです。前回と同様にコマンドを実行すれば、今度は修復が完了します。
dism /Online /Cleanup-Image /RestoreHealth /LimitAccess /Source:wim:M:\sources\install.wim:3
上記は、Windowsのインストールイメージ(isoファイル)がMドライブにマウントされている場合の例となります。
また、二つのisoファイルのどちらに必要なファイルが入っているかわからない場合は、以下のようにSource
を二つ指定することもできます。
dism /Online /Cleanup-Image /RestoreHealth /LimitAccess /Source:wim:M:\sources\install.wim:3 /Source:wim:N:\sources\install.wim:3
上記は、二つのWindowsのインストールイメージ(isoファイル)がMドライブとNドライブにマウントされている場合の例となります。二つ指定した場合は、どちらかのisoファイルに必要なファイルが存在すれば修復は成功します。
私が遭遇した、Windows Updateに接続できないPCでは、上記の方法で使用すべきWindowsイメージのisoファイルを特定し、それを使って修復することができました。
コンポーネントストアの修復が成功した後は、月例のセキュリティ更新プログラムも問題なく適用できるようになりました。
今回は、マイクロソフトのWindows Updateを使ってコンポーネントストアを修復できないPC環境で、過去のOSイメージを使ってコンポーネントストアを修復する方法に関する投稿でした。