| | 0

Windows 10 Deployment – In-Place Upgrade

Click here for an overview of the blog serie “Windows 10 und ConfigMgr Deployment Serie”

Why using In-Place Upgrade?

In the past, the migration process of operating systems including user settings and files was performed by using Configuration Manager / MDT and USMT (User State Migration Tools). This wipe and load approach worked very well.

With the release of Windows 10, Microsoft provided a powerful feature called “In-Place Upgrade”. This will upgrade your operating system while the user data will remain untouched.

 

When not to use In-Place Upgrade?

For Enterprise purposes, there is a reason why you would not this upgrade process.

The Windows 10 image must be untouched, so you cannot use a customized image by your organization.

You need to consider the language settings of the running OS and the image, language packs cannot be downloaded by the In-Place upgrade process

 

How does the In-Place Upgrade work?

The upgrade process replaces the operating system. Drivers, applications, user settings and user data will be untouched.

Preferred options (Enterprise):

  • System Center Configuration Manager or MDT
  • Windows 7, 8, 8.1
  • Use the standard Windows 10 image (Windows 10 Setup files)

Important In-Place upgrade LogFiles:

The most important LogFile is the setupact.log which is located here

  • %Systemdrive%\$Windows.~BT\sources\panther (during upgrade process)
  • %Systemdrive%\Windows\panther (after upgrade process and OOBE)
  • %Systemdrive%\Windows\panther\unattendGC (after OOBE and first Logon)

If anything went wrong, the setuperr.log could be helpful, the location is nearby the setupact.log.

 

The four primary upgrade process phases

Down Level phase
  • Current operating system Windows 7 / Windows 8 / Windows 8.1
  • System check for compliance
  • Inventory of applications
  • Inventory of drivers
  • Analyze the operating system components
  • Download updates (not required for upgrade process)
  • Prepare WinRE
Running operating system

The In-Place upgrade process can be performed from Windows 7 / 8 / 8.1

System check for compliance

The first upgrade step checks the current operating system hardware for compliance, this contains the following devices.

  • CPU
  • RAM (at this moment 1 Gigabyte for Windows 10 x86 and 2 Gigabyte for Windows 10 x64)
  • Available Disk Space (for OS installation and recovery), If the disc space is below the actual needed capacity, it could be expanded by using external devices like thumb drives. This is important for Tablets with limited disk space. On ordinary devices the upgrade process tries to compress the file system.
  • Critical Drivers (Storage and network class drivers)
  • UEFI Version (The required UEFI Version is 2.3.1)
  • The current operating system must not be a Windows ToGo Stick or a VHD-Boot Machine

 

The setupact.log (%Systemdrive%\$WINDOWS.~BT\Sources\Panther) describes this process on a very detailed level:

The compliance checks starts at:

1
CONX    Compatibility scan started. Scenario: 3, Categories: 0x00000021

And ends with:

1
CONX    Compatibility scan finished. Scenario: 3, Categories: 0x00000021

The results is stored in an XML File:

1
CONX    Compatibility scan data is saved to D:\$WINDOWS.~BT\Sources\Panther\CompatData_2016_03_22_10_29_24_3_00000021.xml

Content of CompatData_2016_03_22_10_29_24_3_00000021.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    <System X64Capable="True" X64Running="True"/>
    <Hardware>
        <HardwareItem HardwareType="Setup_HostIsBootedFromVHD">
            <CompatibilityInfo BlockingType="None"/>
        </HardwareItem>
        <HardwareItem HardwareType="Setup_HostIsBootedFromPortableWorkspace">
            <CompatibilityInfo BlockingType="None"/>
        </HardwareItem>
        <HardwareItem HardwareType="Setup_HostIsBootedFromAuditMode">
            <CompatibilityInfo BlockingType="None"/>
        </HardwareItem>
        <HardwareItem HardwareType="Setup_HostIsUEFICompliant">
            <CompatibilityInfo BlockingType="None"/>
        </HardwareItem>
        <HardwareItem HardwareType="Setup_SafeMode">
            <CompatibilityInfo BlockingType="None"/>
        </HardwareItem>
        <HardwareItem HardwareType="Setup_HostIsNonStagedBuild">
            <CompatibilityInfo BlockingType="None"/>
        </HardwareItem>
        <HardwareItem HardwareType="Setup_InsufficientDiskSpace">
            <CompatibilityInfo BlockingType="None"/>
        </HardwareItem>
    </Hardware>
    <SystemInfo UplevelEdition="Windows 10" OSMajorVersion="6" OSMinorVersion="1"/>
</CompatReport>

Example of failed compatibility check (mismatched language):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="utf-8" ?>
<System X64Capable="True" X64Running="True" />
    <Hardware>
    <HardwareItem HardwareType="Setup_HostIsNewer">
            <CompatibilityInfo BlockingType="None" />
        </HardwareItem>
        <HardwareItem HardwareType="Setup_NonStandardDirectory">
            <CompatibilityInfo BlockingType="None" />
        </HardwareItem>
        <HardwareItem HardwareType="Setup_HostIsOldPrerelease">
            <CompatibilityInfo BlockingType="None" />
        </HardwareItem>
        <strong><HardwareItem HardwareType="Setup_MismatchedLanguage">
            <CompatibilityInfo BlockingType="Hard" />
                <Action Name="Setup_MismatchedLanguage" ResolveState="Hard" />
        </HardwareItem></strong>
        <HardwareItem HardwareType="Setup_MismatchedBuildType">
            <CompatibilityInfo BlockingType="None" />
        </HardwareItem>
        <HardwareItem HardwareType="Setup_UpgradeDisabled">
            <CompatibilityInfo BlockingType="None" />
        </HardwareItem>
    </Hardware>
</CompatReport>
Inventory of applications

The application inventory contains three basic steps:

Some Windows components will not be migrated, like Windows Media Center, because it’s not available in Windows 10.

During the upgrade process, a database with compatible applications which is stored on the installation media of Windows 10 will be used. If the upgrade process is performed in “online” mode, the latest version of this Database will be downloaded by the process. This list is available here:

https://sysdev.microsoft.com/en-us/hardware/lpl/

The upgrade process shows the application inventory data in a xml File in %Systemdrive%\$WINDOWS.~BT\Sources\Panther\<…>_APPRAISER_ApplicationInventory.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<…>
<Program Name="7-Zip 15.14 (x64 edition)"
         Type="Application"
         Source="Msi"
         Publisher="Igor Pavlov"
         Version="15.14.00.0"
         Language="1033"
         MsiProductCode="{23170F69-40C1-2702-1514-000001000000}"
         MsiPackageCode="{23170F69-40C1-2702-1514-000002000000}"
         InstallDate="03/22/2016 08:15:59"
         RootDirPath="D:\Program Files\7-Zip"
         Id="00001743f7a629a03aff738a3c38d1957afe00000904">
    <Indicators>
        <MsiIndicators>
            <Msi InstallDateMsi="03/22/2016 00:00:00"
                 MsiProductCode="{23170F69-40C1-2702-1514-000001000000}"
                 MsiPackageCode="{23170F69-40C1-2702-1514-000002000000}"/>
        </MsiIndicators>
        <AddRemoveProgramIndicators>
            <AddRemoveProgram    InstallDateArpLastModified="03/22/2016 00:00:00"
                                RegistrySubKey="{23170F69-40C1-2702-1514-000001000000}"
                                UninstallString="MsiExec.exe /I{23170F69-40C1-2702-1514-000001000000}"
EstimatedSize="0x1383" RegistryKeyPath="HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{23170F69-40C1-2702-1514-000001000000}"
                                DisplayName="7-Zip 15.14 (x64 edition)"
                                CompanyName="Igor Pavlov"
                                ProductVersion="15.14.00.0"
                                Language="1033"
                                VersionMajor="15"
                                VersionMinor="14"/>
        </AddRemoveProgramIndicators>
        <ShellIndicators>
            <Shell ShellName="7-Zip File Manager"
                   TargetFileName="7zFM.exe"
                   TargetPath="D:\Program Files\7-Zip\7zFM.exe"
                   LinkPath="D:\ProgramData\Microsoft\Windows\Start Menu\Programs\7-Zip\7-Zip File Manager.lnk"
                   InstallDateFromLinkFile="03/22/2016 08:16:00"
                   ParentName="7-Zip" Id="0000e65b909be1fb18415c27543f039977d2fbd8b95b"/>
        </ShellIndicators>
    </Indicators>
    <StaticProperties>
        <Files Id="0000da39a3ee5e6b4b0d3255bfef95601890afd80709">
            <File Name="7zFM.exe"
                  Size="0xcca00"
                  SizeOfImage="0xd0000"
                  PeHeaderHash="0101639e4386eda511a4500dd6d061b32992a0e03988"
                  PeChecksum="0x0"
                  LinkDate="12/31/2015 14:16:50"
                  BinaryType="PE64_AMD64"
                  LowerCaseLongPath="d:\program files\7-zip\7zfm.exe"
                  LongPathHash="0000753cdfe935df97f86e4710198a65f801caf3170f"/>
            <File Name="7z.exe"
                  Size="0x6d400"
                  SizeOfImage="0x72000"
                  PeHeaderHash="010126c4bdb01a71844d39ab995996d7709e1c20e5e5"
                  PeChecksum="0x0"
                  LinkDate="12/31/2015 14:15:28"
                  BinaryType="PE64_AMD64"
                  LowerCaseLongPath="d:\program files\7-zip\7z.exe"
                  LongPathHash="00006b4e0c488defd48c170d0080cfac1b22f7e944a0"/>
            <File Name="7zG.exe"
                  Size="0x87800"
                  SizeOfImage="0x8d000"
                  PeHeaderHash="0101b8597c80d8618aaf4a7fbccbe2081d9d7d601065"
                  PeChecksum="0x0"
                  LinkDate="12/31/2015 14:17:11"
                  BinaryType="PE64_AMD64"
                  LowerCaseLongPath="d:\program files\7-zip\7zg.exe"
                  LongPathHash="0000a51d0172cea733c3ee4c3f899303c9c950c2d236"/>
        </Files>
    </StaticProperties>
</Program>
<…>
Inventory of Drivers

Similar to the application inventory process, drivers are also checked regarding their compatibility.

The device driver inventory is stored in a xml file:

%Systemdrive%\$WINDOWS.~BT\Sources\Panther \<…>_APPRAISER_DeviceInventory.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<…>
<Device
    deviceId="{6cab8a67-f0ce-15f7-303b-5bb7c0016575}"
    instanceId="root\rdp_kbd\0000"
    parentId="htree\root\0"
    deviceState="96"
    problemCode="0"
    installState="0"
    description="Terminal Server Keyboard Driver"
    isHidden="1"
    enumerator="root"
    ContainerId="{27db0821-3bf9-f71a-f96f-a53403857690}"
    Excluded="Always"
>
<HWID>
    root\rdp_kbd
</HWID>
<InstalledDriver
    service="termdd"
    matchingID="root\rdp_kbd"
    infPath="machine.inf"
    originalInf="machine.inf"
    driverPackageId="0000df13704fe43482824f92a1bf8d0a6141aca586fb"
    driverPackageStrongName="machine.inf_amd64_neutral_a2f120466549d68b"
    fileName="termdd.sys"
    driverVerVersion="6.1.7601.17514"
    driverIsKernelMode="1"
    driverVerDate="11-20-2010"
    manufacturer="(Standard system devices)"
    class="system"
    classGuid="{4d36e97d-e325-11ce-bfc1-08002be10318}"
    model="Terminal Server Keyboard Driver"
    provider="Microsoft Corporation"
    driverId="0000f7089f6d7bb2b386e932aec5211689ea85fde9cc"
    upperFilters="00007a5a0cd429248f010df2b1369bb906bbf3f6001b"
    driverInBox="1"
    driverSigned="1"
    driverHasBootService="0"
/>
<…>
Analyze the operating system components

The upgrade process scans the system for operating system components. In summary, the process scans over 10 000 components and its manifests.

Download Updates

If the upgrade process is performed in “online” mode, it downloads the latest cumulative updates for Windows 10 from windows update. If you use Configuration Manager or MDT, the updates can be downloaded from the local update server as well.

The setupact.log file describes the process:

The process does not only look for Windows updates, it also searches for driver updates on windows update. If it finds one, it will download the latest version of the device driver at this step.

Prepare WindowsRE

The preparing process for WinRE:

The upgrade process mounts the wim file of WinRE and injects all the necessary drivers which are needed during the WinRE phase. The wimfile is stored under %Systemdrive%\$WINDOWS.~BT\Sources\SafeOS.

During the first phase, nothing is being migrated, the process just gathers data. The migration processes will be performed in the second, third and fourth step of the whole upgrade process.

After preparing the WinRE image, the upgrade process reboots the system and launches WinRE.

 

WinRE phase

The Windows RE phase contains three steps:

  • Backup down-level OS (current OS)
  • Lay down and prepare new OS
  • Prepare new OS

After booting into WinRE this screen appears:

At this moment, neither the old nor the new operating system is online.

Backup down-level OS

The backup process just moves the old operating System and its components to the %Systemdrive%\Windows.old Folder.

The setupact.log describes the process:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Final list of source OS pieces:
2016-03-22 11:18:34, Info                  SP    Name: WINDOWS, Original path: D:\WINDOWS, Current path: D:\WINDOWS (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: PROGRAMS, Original path: D:\Program Files, Current path: D:\Program Files (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: PROGRAMSX86, Original path: D:\Program Files (x86), Current path: D:\Program Files (x86) (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: USERS, Original path: D:\Users, Current path: D:\Users (allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: PROGRAMDATA, Original path: D:\ProgramData, Current path: D:\ProgramData (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: INETPUB, Original path: D:\inetpub, Current path: D:\inetpub (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: SKYDRIVETEMP, Original path: D:\SkyDriveTemp, Current path: D:\SkyDriveTemp (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    Name: RECOVERY, Original path: D:\Recovery, Current path: D:\Recovery (do not allow relocation)
2016-03-22 11:18:34, Info                  SP    No source symblic mappings found
2016-03-22 11:18:34, Info                  SP    Final list of Windows.old roots:
2016-03-22 11:18:34, Info                  SP    D:\
2016-03-22 11:18:34, Info                  SP    Final list of source move exceptions:
2016-03-22 11:18:34, Info                  SP    D:\Recovery\Customizations
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    D:\Recovery\WindowsRE
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    D:\Recovery\DownlevelWindowsRE
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    D:\Recovery\ReAgentOld.xml
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    D:\Recovery\OEM
2016-03-22 11:18:34, Info                  SP    Exception file/folder does not exist, ignoring
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\WINDOWS to D:\Windows.old\WINDOWS
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\WINDOWS has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\WINDOWS to D:\Windows.old\WINDOWS
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\Program Files to D:\Windows.old\Program Files
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\Program Files has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\Program Files to D:\Windows.old\Program Files
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\Program Files (x86) to D:\Windows.old\Program Files (x86)
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\Program Files (x86) has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\Program Files (x86) to D:\Windows.old\Program Files (x86)
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\Users to D:\Windows.old\Users
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\Users has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\Users to D:\Windows.old\Users
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\ProgramData to D:\Windows.old\ProgramData
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\ProgramData has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\ProgramData to D:\Windows.old\ProgramData
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\inetpub to D:\Windows.old\inetpub
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\inetpub has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\inetpub to D:\Windows.old\inetpub
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\SkyDriveTemp to D:\Windows.old\SkyDriveTemp
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\SkyDriveTemp has no exceptions, trying a straight move
2016-03-22 11:18:34, Warning               SP    SPMoveFileWithShortName: Failed to move D:\SkyDriveTemp to D:\Windows.old\SkyDriveTemp, error: 0x00000002
2016-03-22 11:18:34, Info                  SP    CRelocateOS::DoExecute: Moving previous OS piece from D:\Recovery to D:\Windows.old\Recovery
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully created target folder D:\Windows.old\Recovery
2016-03-22 11:18:34, Info                  SP    VERBOSE: Path D:\Recovery\01d91ba6-efbc-11e5-bfa3-001dd8b71fc8 has no exceptions, trying a straight move
2016-03-22 11:18:34, Info                  SP    VERBOSE: Successfully moved D:\Recovery\01d91ba6-efbc-11e5-bfa3-001dd8b71fc8 to D:\Windows.old\Recovery\01d91ba6-efbc-11e5-bfa3-001dd8b71fc8
2016-03-22 11:18:37, Info                  SP    SPCalculateDriveMappings: Assuming implicit mapping from the registry SystemRoot value [x:\Windows] to the offline Windows dir [D:\$WINDOWS.~BT\NewOS\WINDOWS]
2016-03-22 11:18:37, Info                  SP    pCreateSystemRootDriveMapping: SystemRoot implicit mapping is [x:\] -> [D:\$WINDOWS.~BT\NewOS\]
Lay down and prepare new OS
  • The new OS gets applied to %Systemdrive%\$Windows~BT\NewOS.
1
2
3
4
5
6
7
8
9
2016-03-22 11:18:52, Info  SP  Final list of destination OS pieces:
2016-03-22 11:18:52, Info  SP  Name: WINDOWS, Original path: x:\Windows, Current path: D:\$WINDOWS.~BT\NewOS\Windows (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: PROGRAMS, Original path: x:\Program Files, Current path: D:\$WINDOWS.~BT\NewOS\Program Files (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: PROGRAMSX86, Original path: x:\Program Files (x86), Current path: D:\$WINDOWS.~BT\NewOS\Program Files (x86) (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: USERS, Original path: x:\Users, Current path: D:\$WINDOWS.~BT\NewOS\Users (allow relocation)
2016-03-22 11:18:52, Info  SP  Name: PROGRAMDATA, Original path: x:\ProgramData, Current path: D:\$WINDOWS.~BT\NewOS\ProgramData (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: INETPUB, Original path: x:\inetpub, Current path: D:\$WINDOWS.~BT\NewOS\inetpub (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: SKYDRIVETEMP, Original path: x:\SkyDriveTemp, Current path: D:\$WINDOWS.~BT\NewOS\SkyDriveTemp (do not allow relocation)
2016-03-22 11:18:52, Info  SP  Name: RECOVERY, Original path: x:\Recovery, Current path: D:\$WINDOWS.~BT\NewOS\Recovery (do not allow relocation)
  • The inventoried drivers and applications get integrated into the new OS. The migration of applications is similar to the technology that USMT uses.
  • Modern Apps are migrated, if the current operating system has modern apps installed, the progress will check if Windows 10 contains a newer version of these.
  • After that, the NewOS Folder gets redirected to %Systemdrive%.
  • Every folder which conflicts with the folder structure of the Windows 10 WIM File will be copied.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2016-03-22 11:18:52, Info                  SP       CRelocateOS: Moving new OS pieces from D:\$WINDOWS.~BT\NewOS to D:\
2016-03-22 11:18:52, Info                  SP       CRelocateOS: Path D:\$WINDOWS.~BT\NewOS\bootmgr excluded, will not be moved in the final place.
2016-03-22 11:18:52, Info                  SP       Moving D:\$WINDOWS.~BT\NewOS\BOOTNXT to D:\BOOTNXT
2016-03-22 11:18:52, Info                  SP       VERBOSE: Path D:\$WINDOWS.~BT\NewOS\BOOTNXT has no exceptions, trying a straight move
2016-03-22 11:18:52, Info                  SP       VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\BOOTNXT to D:\BOOTNXT
2016-03-22 11:18:52, Info                  SP       CRelocateOS: Path D:\$WINDOWS.~BT\NewOS\$Recycle.Bin excluded, will not be moved in the final place.
2016-03-22 11:18:52, Info                  SP       Moving D:\$WINDOWS.~BT\NewOS\inetpub to D:\inetpub
2016-03-22 11:18:53, Info                  SP       VERBOSE: Path D:\$WINDOWS.~BT\NewOS\inetpub has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP       VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\inetpub to D:\inetpub
2016-03-22 11:18:53, Info                  SP       CRelocateOS: Collision detected for path D:\PerfLogs, which is not an OS piece. Moving out of the way.
2016-03-22 11:18:53, Info                  SP       VERBOSE: Path D:\PerfLogs has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP       VERBOSE: Successfully moved D:\PerfLogs to D:\Windows.old\PerfLogs
2016-03-22 11:18:53, Info                  SP       Moving D:\$WINDOWS.~BT\NewOS\PerfLogs to D:\PerfLogs
2016-03-22 11:18:53, Info                  SP       VERBOSE: Path D:\$WINDOWS.~BT\NewOS\PerfLogs has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP       VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\PerfLogs to D:\PerfLogs
2016-03-22 11:18:53, Info                  SP       Moving D:\$WINDOWS.~BT\NewOS\Program Files to D:\Program Files
2016-03-22 11:18:53, Info                  SP       VERBOSE: Path D:\$WINDOWS.~BT\NewOS\Program Files has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP       VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\Program Files to D:\Program Files
2016-03-22 11:18:53, Info                  SP       Moving D:\$WINDOWS.~BT\NewOS\Program Files (x86) to D:\Program Files (x86)
2016-03-22 11:18:53, Info                  SP       VERBOSE: Path D:\$WINDOWS.~BT\NewOS\Program Files (x86) has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP       VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\Program Files (x86) to D:\Program Files (x86)
2016-03-22 11:18:53, Info                  SP       Moving D:\$WINDOWS.~BT\NewOS\ProgramData to D:\ProgramData
2016-03-22 11:18:53, Info                  SP       VERBOSE: Path D:\$WINDOWS.~BT\NewOS\ProgramData has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP       VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\ProgramData to D:\ProgramData
2016-03-22 11:18:53, Info                  SP       Moving D:\$WINDOWS.~BT\NewOS\Users to D:\Users
2016-03-22 11:18:53, Info                  SP       VERBOSE: Path D:\$WINDOWS.~BT\NewOS\Users has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP       VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\Users to D:\Users
2016-03-22 11:18:53, Info                  SP       Moving D:\$WINDOWS.~BT\NewOS\Windows to D:\Windows
2016-03-22 11:18:53, Info                  SP       VERBOSE: Path D:\$WINDOWS.~BT\NewOS\Windows has no exceptions, trying a straight move
2016-03-22 11:18:53, Info                  SP       VERBOSE: Successfully moved D:\$WINDOWS.~BT\NewOS\Windows to D:\Windows
2016-03-22 11:18:53, Info                  SP       SetupPlatform: Global progress: 25, Phase progress: 86
2016-03-22 11:18:53, Info                  SP       Operation completed successfully: Relocate OS from D:\$WINDOWS.~BT\NewOS to D:\

The Windows.Old is scanned by the process and every file which might be necessary will be “copied” in the running operating system. It’s basically not a copy job, the process just set hard links to the new location.

1
2
3
4
5
2016-03-22 11:39:51, Info  PLATFORMTRACK: DoesObjectExist called for D:\PROGRAM FILES\MICROSOFT POLICY PLATFORM\TGTNS_PRINCIPALBINDING.MOF
2016-03-22 11:39:51, Info  GetNewLocation: Request to D:\Windows.old\PROGRAM FILES\MICROSOFT POLICY PLATFORM\TGTNS_PRINCIPALBINDING.MOF inside moved folder redirected to D:\Program Files\Microsoft Policy Platform\TGTNS_PRINCIPALBINDING.MOF
2016-03-22 11:39:51, Info  GetNewLocation: Request to D:\Windows.old\PROGRAM FILES\MICROSOFT POLICY PLATFORM\POLICYPROCESSORPROVIDER.MOF inside moved folder redirected to D:\Program Files\Microsoft Policy Platform\POLICYPROCESSORPROVIDER.MOF
First Boot to new OS

The location of setupact.log has changed, the new location is %Systemdrive%\Windows\panther.

This phase contains these steps:

  • Set up windows components
  • Install APPX Packages
  • Install Device Drivers
  • Set user settings
Set up windows components

The upgrade process starts to enable the Windows components.

Install APPX Packages

Now the installer activates the APPX packages:

1
2
3
4
5
6
7
8
9
2016-03-22 11:26:00, Info               SYSPRP Successfully pre-registered microsoft.windowscommunicationsapps_2015.6308.42271.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:10, Info               SYSPRP Successfully pre-registered Microsoft.WindowsMaps_4.1509.50911.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:15, Info               SYSPRP Successfully pre-registered Microsoft.WindowsPhone_2015.1009.10.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:18, Info               SYSPRP Successfully pre-registered Microsoft.WindowsSoundRecorder_2015.1012.110.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:22, Info               SYSPRP Successfully pre-registered Microsoft.WindowsStore_2015.1013.14.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:28, Info               SYSPRP Successfully pre-registered Microsoft.XboxApp_2015.930.526.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:36, Info               SYSPRP Successfully pre-registered Microsoft.ZuneMusic_2019.6.13251.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:40, Info               SYSPRP Successfully pre-registered Microsoft.ZuneVideo_2019.6.13251.0_neutral_~_8wekyb3d8bbwe
2016-03-22 11:26:40, Info               SYSPRP Finished AppxPreRegisterPackage for all packages.
Install Device Drivers

The process installs the drivers, if drivers were download from windows update, the upgrade process will install these drivers.

Set user settings

The process sets the user specific settings, such as user specified App settings or Windows settings.

After these four steps, the system reboots again to the fourth Upgrade phase.

Second boot to new OS

The second boot to the new OS contains two small steps:

  • Finalize the upgrade
  • Welcome the user and OOBE

In the fourth phase, the setupact.log is moved to %Systemdrive%\Windows\panther\unattendGC

Finalize the upgrade

The upgrade process is finished.

Welcome the user and OOBE

The User welcome screen appears, which is similar to the screen after an ordinary Windows 10 installation. After the first logon, the user will see the Out of the box experience which performs the customization of windows.

 

How do I know the upgrade was successful?

At first, when Windows 10 boots up and the user was able to logon, the upgrade was basically successful. If any problems appear during the process, the system will be recovered to the old OS.

The System creates a registry key, that’s all.

Of course the setupact.log (%Systemdrive%\Windows\panther\unattendGC) describes the process:

1
[oobeldr.exe] OrchestrateUpdateImageState: Updating image state from [IMAGE_STATE_UNDEPLOYABLE] --> [IMAGE_STATE_COMPLETE]

Recover the system

If “something went wrong” during the upgrade process, the system will be recovered. This recovery can be performed out of any of the four upgrade process phases and beyond the first login.

Recover the system automatically by the process

Let’s see how the recovery process runs out of the four (five) phases:

Down Level

Basically the Down Level phase just gathered data. There is nothing more to do than cleaning up the system. If something causes a “hard block”, the system will be cleaned up.

WinRE

If something went wrong in the WinRE Phase, the upgrade process reboots into the original OS and cleans up the gathered data.

First Boot to new OS

If something went wrong iIn this phase, there is much more to do than just cleaning up, because the new OS is already running. So the process needs to reverse all the changes.

  • Reboot to WinRE
  • Remove the files and folders from the Systemdrive
  • Move the files and folders out of the Windows.Old folder to their original location
  • Cleanup the system
  • Reboot to original OS
Second boot to new OS

Basically in the fourth phase, all recovery steps of phase three will be performed in this phase.

  • Reboot to WinRE
  • Remove the files and folders from the Systemdrive
  • Move the files and folders out of the Windows.Old folder to their original location
  • Cleanup the system
  • Reboot to original OS
First Logon

If the process was fully successful and the user is able to login for the first time. If anything went wrong in this case, the system will reboot and reverse the system to its original state. The process proves that someone actually can login to the new Operating System.

Recover the system manually

It might happen, that the upgrade process completes successful and the user is able to use the new operating system at first glance, but later it turns out that a critical application does not work as expected when running on the new OS.

On order to support these scenarios, Windows 10 lets the user decide to recover the system by himself. For that purpose, the Windows.Old folder remains on the local hard disk for 30 days.

The user can start the recovery out of the system settings:

The recovery process which starts is basically the same as in the last to upgrade phases:

  • Reboot to WinRE
  • Remove the files and folders from the Systemdrive
  • Move the files and folders out of the Windows.Old folder to their original location
  • Cleanup the system
  • Reboot to original OS