Windows11 対応PCで 22H2 へのアップデート時に失敗する場合の対応策について紹介します。具体的には「 ErrorCode = 0x8007001F, ExCode = 0x50016」という現象です。
1. 現象
アップデート時は以下の順序でインストールします。
(1). アップデートファイルを C ドライブにコピー
(2). PCを自動再起動してアップデート処理
エラーが発生するタイミングは、すべてのコピーが終わり再起動する直前に以下の画面がポンと出て終了です。
これでは、何が原因で失敗したのかさっぱり分かりませんね。そこで Windowsのログを確認します。
C:\Windows\Logs\SetupDiag\SetupDiagResults.xml
実際の例を紹介します。
<?xml version="1.0" encoding="utf-16"?> <SetupDiag xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://docs.microsoft.com/en-us/windows/deployment/upgrade/setupdiag"> <Version>1.6.2203.16005</Version> <ProfileName>FindAbruptDownlevelFailure</ProfileName> <ProfileGuid>55882B1A-DA3E-408A-9076-23B22A0472BD</ProfileGuid> <LogErrorLine>2022-10-12 22:19:23, Error SP Operation failed: Gather data, scope: EVERYTHING. Error: 0x8007001F[gle=0x000000b7]</LogErrorLine> <FailureData>Error: SetupDiag reports abrupt down-level failure.Last Operation: Gather data, scope: EVERYTHINGError: 0x8007001F - 0x50016</FailureData> <FailureData>LogEntry: 2022-10-12 22:19:23, Error SP Operation failed: Gather data, scope: EVERYTHING. Error: 0x8007001F[gle=0x000000b7]</FailureData> <FailureData>Refer to "https://docs.microsoft.com/en-us/windows/desktop/Debug/system-error-codes" for error information.</FailureData> <FailureDetails>ErrorCode = 0x8007001F, ExCode = 0x50016, LastOperation = Gather data, scope: EVERYTHING</FailureDetails> <SetupPhaseInfo> <PhaseName>Finalize</PhaseName> <PhaseStartTime>10/12/2022 22:19:19</PhaseStartTime> <PhaseEndTime>01/01/0001 00:00:00</PhaseEndTime> <PhaseTimeDelta>0:00:00:00.0000000</PhaseTimeDelta> <CompletedSuccessfully>false</CompletedSuccessfully> </SetupPhaseInfo> <SetupOperationInfo> <OperationName>Gather data, scope: EVERYTHING</OperationName> <OperationStartTime>10/12/2022 22:19:19</OperationStartTime> <OperationEndTime>01/01/0001 00:00:00</OperationEndTime> <OperationTimeDelta>0:00:00:00.0000000</OperationTimeDelta> <CompletedSuccessfully>false</CompletedSuccessfully> </SetupOperationInfo> </SetupDiag>
ここから 「ErrorCode = 0x8007001F, ExCode = 0x50016」というエラーコードがわかります。
このエラーは、過去にユーザーを追加したが、正しく削除していないとレジストリにユーザー情報が残っていた場合発生します。(他にも要因はあるかもしれませんが)
3. 対策
Step1. レジストリエディタを起動
スタートボタンを押してメニューを出してから、
regedit と打ち込み、「管理者として実行」をクリックします。
Step2. ProfileList 内のユーザーを確認
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList を開くと、登録ユーザーが並んでいます。以下の例は 1ユーザーのみ登録されています。
Step3. 有効なユーザーのSIDを確認
ターミナルを開き、WMIC useraccount get name,sid を打ち、Enter キーを押します。
ユーザー名の右側に表示されている、英数文字がSIDです。
Step4. 無効なユーザーをレジストリから削除
Step2とStep3の画面見比べて、SID(S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXX) が一致しないユーザーがないか探します。もし、レジストリ上に未使用ユーザーの残骸が残っていれば削除します。 対象のフォルダで右クリックして削除を選択します。
※注意
「S-1-5-18」など短い名称のものは削除してはだめです。
間違って使用しているユーザーを削除すると、、試していませんが、ログインできなくなる可能性もあるので注意してください。