Error 0x8007001F-0x20006 for in-place upgrade WSE 2016 to WSE 2019 (unserviceable image)

mjmeans

Well-known member
Joined
Jun 2, 2023
Posts
92
Back in September 2023 in another thread we worked through most of the Windows Update errors that existed on this server. I never did get the system fully repaired, but it was stable enough that some Windows Updates were able to install, but additional SSUs and LCUs wouldn't. So now I'm wanting to do an in-place upgrade to WSE 2019 (keeping apps and files). This fails with the following error:

Code:
0x8007001F-0x20006
The installation failed in the SAFE_OS phase with an error during Replicate_OC operation

The panther update logs says that the image is unserviceable. Apparently, the same problem that is preventing LSUs and SSUs from installing is also preventing in-place upgrade. I then tried doing an in-place upgrade to of 2016 to 2016 (same version), but that failed as well.

So, I'm back to trying to resolve the remaining issues that are preventing LSUs and SSUs from installing so that I can upgrade this server to WSE 2019.

I tried DISM RestoreHealth specifying different WinSxS instances I created when building the original repairserver and saving each WinSxS and COMPONENTS versions after each years' updates were applied from 2016 to 2022. Then I ran ComponentsScanner. I noticed that some of the missing packages reported now were on the host so I tried the hosts WinSxS folder.

Here are the latest DISM, CBS, and ComponentsScanner logs and the COMPONENTS hive.
 

Attachments

After running DISM /StartComponentCleanup (which failed) I examined the logs and saw it reported some corrupt WinSxS files. I found copies on the host and replaced them. I then ran DISM /RestoreHealth (which also failed, but now failed at 80% instead of 72%). I examined the logs again and found some (f) entries for new mising files. I replaced them as well. I'm now running restore health once more and then a component cleanup and will examine the logs again. Below is the list of files already replaced. I will post another set of ComponentsScanner, CBS and DISM logs tomorrow morning.

Code:
WinSxS\amd64_multipoint-powershell-multipointvdi_31bf3856ad364e35_10.0.14393.6451_none_f3a746c47c318e62
WinSxS\amd64_multipoint-powershell-multipoint_31bf3856ad364e35_10.0.14393.6451_none_7088368f07e4dd93
WinSxS\wow64_microsoft-windows-migrationengine_31bf3856ad364e35_10.0.14393.6522_none_d88ffae26a539131
WinSxS\x86_microsoft-windows-i..er-engine.resources_31bf3856ad364e35_10.0.14393.6611_sr-..-rs_ee09ba57bce95b06
WinSxS\x86_microsoft-windows-msmq-admin_31bf3856ad364e35_10.0.14393.6343_none_d0da689bdfafda4f
WinSxS\amd64_multipoint-powershell-multipointvdi_31bf3856ad364e35_10.0.14393.6451_none_f3a746c47c318e62\MultiPointVdi.psd1
WinSxS\amd64_multipoint-powershell-multipointvdi_31bf3856ad364e35_10.0.14393.6451_none_f3a746c47c318e62\MultiPointVdi.psd1\MultiPointVdi.psd1
WinSxS\amd64_multipoint-powershell-multipoint_31bf3856ad364e35_10.0.14393.6451_none_7088368f07e4dd93\MultiPoint.psd1
WinSxS\amd64_multipoint-powershell-multipoint_31bf3856ad364e35_10.0.14393.6451_none_7088368f07e4dd93\MultiPoint.psd1\MultiPoint.psd1
WinSxS\wow64_microsoft-windows-migrationengine_31bf3856ad364e35_10.0.14393.6522_none_d88ffae26a539131\SFLISTWB.WOA.dat
WinSxS\wow64_microsoft-windows-migrationengine_31bf3856ad364e35_10.0.14393.6522_none_d88ffae26a539131\SFLISTWB.WOA.dat\SFLISTWB.WOA.dat
WinSxS\x86_microsoft-windows-i..er-engine.resources_31bf3856ad364e35_10.0.14393.6611_sr-..-rs_ee09ba57bce95b06\msimsg.dll.mui
WinSxS\x86_microsoft-windows-i..er-engine.resources_31bf3856ad364e35_10.0.14393.6611_sr-..-rs_ee09ba57bce95b06\msimsg.dll.mui\msimsg.dll.mui
WinSxS\x86_microsoft-windows-msmq-admin_31bf3856ad364e35_10.0.14393.6343_none_d0da689bdfafda4f\mqcertui.dll
WinSxS\x86_microsoft-windows-msmq-admin_31bf3856ad364e35_10.0.14393.6343_none_d0da689bdfafda4f\mqcertui.dll\mqcertui.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\appxprovisionpackage.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\appxreg.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\cmifw.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\CntrtextInstaller.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\EventsInstaller.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\FirewallOfflineAPI.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\grouptrusteeai.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\httpai.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\ImplatSetup.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\luainstall.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\NetSetupAI.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\NetSetupApi.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\NetSetupEngine.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\sppinst.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\timezoneai.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\winsockai.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\wmicmiplugin.dll
WinSxS\amd64_microsoft-windows-s..-installers-onecore_31bf3856ad364e35_10.0.14393.4650_none_61484427001e770c\ws2_helper.dll
 
Okay, so I tried to find out which KBs are responsible for the Missing Registry Keys reported by Components Scanner. I exported the key names to a file named Missing_Catalog_Keys.txt.

i.e. this section of ComponentsScanner results:
Code:
== Missing Registry Keys ==
CanonicalData\Catalogs\00006083976b624ebaa7f1c37436d11aa4a22d1a720dbf426e9ecb43b6475d19 (C:\Windows\winsxs\Catalogs\00006083976b624ebaa7f1c37436d11aa4a22d1a720dbf426e9ecb43b6475d19.cat exists but no corresponding CanonicalData\Catalogs key found)
CanonicalData\Catalogs\0000f45ca3205f798f3f64143273bff9998c8d24a4023dce34a3092c74addcc7 (C:\Windows\winsxs\Catalogs\0000f45ca3205f798f3f64143273bff9998c8d24a4023dce34a3092c74addcc7.cat exists but no corresponding CanonicalData\Catalogs key found)
CanonicalData\Catalogs\000250597ff4211dce72eed817c20abfeb95d6e1b1054d1b779de9649c9c00a3 (C:\Windows\winsxs\Catalogs\000250597ff4211dce72eed817c20abfeb95d6e1b1054d1b779de9649c9c00a3.cat exists but no corresponding CanonicalData\Catalogs key found)
...
Was converted to a file containing this:
Code:
00006083976b624ebaa7f1c37436d11aa4a22d1a720dbf426e9ecb43b6475d19
0000f45ca3205f798f3f64143273bff9998c8d24a4023dce34a3092c74addcc7
000250597ff4211dce72eed817c20abfeb95d6e1b1054d1b779de9649c9c00a3
...

I then ran this script 'Find-KbsForMissingCatalogKeys.ps1'
Code:
[CmdletBinding()]
Param(
    [string]$CatalogsFolderPath = "C:\Windows\WinSxS\Catalogs",
    [string]$MissingCatalogKeysFile = "Missing_Catalog_Keys.txt"
)

function Get-HardLinks([string]$path)
{
    (dir $path -force | Where-Object -Property LinkType -eq HardLink | Select-Object -Property Target).Target
}

$file = $MissingCatalogKeysFile
If (!(Test-Path $file -PathType leaf))
{
    throw("FILE_NOT_FOUND: $file'")
}

$kbs = [System.Collections.ArrayList]::new()

$lines = Get-Content $file
$i=0
foreach ($line in $lines)
{
    $i = $i + 1
    $CatalogProgressParameters = @{
        Id               = 0
        Activity         = 'Catalog Keys'
        Status           = "$i/$($lines.count)"
        PercentComplete  = ($i / $lines.Count) * 100
        CurrentOperation = $line
    }
    Write-Progress @CatalogProgressParameters

    $file = Join-Path -Path $CatalogsFolderPath -ChildPath "$($line).cat"   
    If (Test-Path $file -PathType leaf)
    {
        $links = Get-HardLinks($file)
        if ($links)
        {
            $il = 0
            foreach ($link in $links)
            {
                $il++
                $LinkProgressParameters = @{
                    Id               = 1
                    ParentId         = 0
                    Activity         = 'Links'
                    Status           = "$il/$($links.count)"
                    PercentComplete  = ($il / $links.Count) * 100
                    CurrentOperation = $link
                }
                Write-Progress @LinkProgressParameters
 
                if ($link -match 'for_(KB.+?)~')
                {
                    $kb = $matches[1]
                    if (-not $kbs.Contains($kb))
                    {
                        [void]$kbs.Add($kb)
                    }
                }
                Write-Progress -ID 1 -activity 'Links' -Completed
            }
        }
    }   
}
if (Get-Module -ListAvailable -Name kbupdate) {
    foreach ($kb in ($kbs | Sort-Object))
    {
        Get-KbUpdate $kb -Architecture x64 -OperatingSystem 'Windows Server 2016' | Select-Object -Property id, Title
    }
}
else {
    $kbs
}

The following result lists all KBs that the script was able to identify as associated with any of the missing catalog keys:

Code:
     Id Title
     -- -----
4013418 Update for Windows Server 2016 for x64-based Systems (KB4013418)
4023834 2017-06 Update for Windows Server 2016 for x64-based Systems (KB4023834)
4035631 2017-08 Update for Windows Server 2016 for x64-based Systems (KB4035631)
4465659 2018-11 Update for Windows Server 2016 for x64-based Systems (KB4465659)
4485447 2019-02 Servicing Stack Update for Windows Server 2016 for x64-based ...
4498947 2019-05 Servicing Stack Update for Windows Server 2016 for x64-based ...
4503537 2019-06 Servicing Stack Update for Windows Server 2016 for x64-based ...
4509091 2019-07 Servicing Stack Update for Windows Server 2016 for x64-based ...
4512574 2019-09 Servicing Stack Update for Windows Server 2016 for x64-based ...
4520724 2019-11 Servicing Stack Update for Windows Server 2016 for x64-based ...
4521858 2019-10 Servicing Stack Update for Windows Server 2016 for x64-based ...
4530689 2019-12 Cumulative Update for Windows Server 2016 for x64-based Syste...
4534271 2020-01 Cumulative Update for Windows Server 2016 for x64-based Syste...
4540723 2020-03 Servicing Stack Update for Windows Server 2016 for x64-based ...
4550994 2020-04 Servicing Stack Update for Windows Server 2016 for x64-based ...
4565912 2020-07 Servicing Stack Update for Windows Server 2016 for x64-based ...
4576750 2020-09 Servicing Stack Update for Windows Server 2016 for x64-based ...
4589210 2021-01 Update for Windows Server 2016 for x64-based Systems (KB4589210)
5001402 2021-04 Servicing Stack Update for Windows Server 2016 for x64-based ...
5005698 2021-09 Servicing Stack Update for Windows Server 2016 for x64-based ...

So, it seems that not only is the servicing stack chain broken, it's very broken.

Am I on the right track here? Is it likely that SFCFixScriptBuilder can be used to resolve the missing registry keys?
 

Has Sysnative Forums helped you? Please consider donating to help us support the site!

Back
Top