Slimdown11 – turn Windows 11 or LTSC 2024 into classic/legacy Windows

Discussion in 'Windows 11' started by SunLion, Mar 2, 2025.

  1. sergey130270

    sergey130270 MDL Senior Member

    May 15, 2014
    358
    620
    10
    #2201 sergey130270, Aug 28, 2026
    Last edited: Sep 15, 2026

    Attached Files:

    • all.txt
      File size:
      1.4 KB
      Views:
      0
  2. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,776
    6,952
    60
    =========================
    2xH2_Creator_17.5
    =========================
    Update to 26x00.9278


    - Added KB5121794-PSFX (Enablement for 26H2)

    - Added the file _HowToUse_2xH2_Creator.chm

    - The GenerateUpdateList.ps1 script (all versions) has been tested multiple times with mixed results:
    a) Sometimes it creates the all.txt file correctly.
    b) At other times, it fails to resolve the URL, resulting in an incomplete all.txt file (missing the LCU2).
    Consequently, it is not yet 100% reliable.
    In light of this, we will not be adopting this script—at least for the time being.
    We will continue to update the all.txt file manually.

    - Some adjustments applied

    Test with:
    - pt-br_windows_11_enterprise_ltsc_2024_x64_dvd_2bb6b75b_2.iso
    - 26100.1742.240909-0928.GE_RELEASE_SVC_REFRESH_CLIENTBUSINESS_VOL_X64FRE_PT-BR.ISO


    https://forums.mydigitallife.net/threads/slimdown11-–-turn-windows-11-or-ltsc-2024-into-classic-legacy-windows.90039/#post-1872013

    Enjoy
     
  3. mooty221

    mooty221 MDL Novice

    Aug 11, 2016
    20
    24
    0
    Hi SunLion, a few small things

    When [20] is set to no desktop icons
    W112xH2+.cmd adds This PC icon back

    When Modern calculator is selected it shows both modern and legacy in start menu can it only show modern instead?
    When EnableMediaPlayer is enabled shouldn't it just use the legacy version? why does the actual app get installed?

    Is there any point of installing .NET Framework 3.5 if you use this reg?

    [HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework]
    "OnlyUseLatestCLR"=dword:00000001

    [HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\.NETFramework]
    "OnlyUseLatestCLR"=dword:00000001

    Thanks for your work and everyone contributing.
     
  4. bendeyar

    bendeyar MDL Senior Member

    Mar 14, 2019
    276
    613
    10
    As with all your work, you've done an outstanding job on this piece as well. Thank you.
     

    Attached Files:

    • 00.png
      00.png
      File size:
      345.7 KB
      Views:
      30
    • 0.PNG
      0.PNG
      File size:
      264 KB
      Views:
      31
  5. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,776
    6,952
    60
    #2206 SunLion, Aug 30, 2026
    Last edited: Aug 30, 2026
    (OP)
    The script doesn't add any shortcuts to the start menu when enabling Classic Calculator.

    But I haven't tested all the possible options either...

    Which edition of Windows did you use?

    To facilitate my research on this.

    As for the other issues:
    You're right. I'll remove that from the W112xH2+.cmd file.
    But I'll keep the display of the ThisPC+Bin icons as the default.

    The script removes all ProvisionedAppxPackages, including MediaPlayer.
    Then, the script integrates the latest Appx packages, including MediaPlayer (if enabled).

    Yes, it makes sense for those using older apps that require .NET 3.5.
    The registry keys won't interfere with those options.[/quote][/quote]
     
  6. mooty221

    mooty221 MDL Novice

    Aug 11, 2016
    20
    24
    0
    en-us_windows_11_enterprise_ltsc_2024_x64_dvd_965cfb00
    [3]Build to create: Enable26H2
    [13]Calculator: Modern


    I only ask because I too needed 3.5 for a older app that would always nag about not having it installed, but ever since those reg keys it never asked for it to be installed again. So I haven't installed 3.5 since. But I wonder if those reg keys won't satisfy every app and you actually need 3.5 installed? This is just a general question if anyone knows.
     
  7. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,776
    6,952
    60
    That’s really a bit of a mystery. Some apps always complain.

    For my part, I always enable net35, just to be safe.
     
  8. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,776
    6,952
    60
    Resolved, for the next update.

    Best regards,
     
  9. sainfo

    sainfo MDL Addicted

    Dec 6, 2021
    760
    1,753
    30
    #2210 sainfo, Sep 6, 2026
    Last edited: Sep 6, 2026
    I’ve also spent a lot of time on this issue, but I’ve hit a dead end so far. Automatic updates are so convenient, but I haven’t been able to get them to work perfectly yet. Maybe I’m overlooking some small detail that’s causing the glitches?
    Here’s the approach I took: First, I ported the entire tool to PowerShell, since it offers more capabilities than a standard tool.
    To solve the problem, I added a context menu to the script before the update block, where I could select what I wanted to get from build 26100:

    1. 26100 — only the update is applied
    2. 26100 to 26200 — the update and migration are applied
    3. 26100 to 26300 — the update and migration are applied

    And that’s where I run into a problem: if I manually place the updates in the UUP folder to transition image 26100.xxxx to 26200.xxxx or 26300.xxxx, everything works perfectly. But if I use automatic updates, the main, large update downloads and installs without any issues, while the transition update, for some reason, refuses to download. As a result, the image is updated, but it still remains at 26100. It’s frustrating, of course, because automatic updates are very convenient. But I’m not giving up—testing continues...
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  10. bendeyar

    bendeyar MDL Senior Member

    Mar 14, 2019
    276
    613
    10
    Try this option too.
    1.Run the script with automatic update download and 2.then the other commands.
     
  11. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,776
    6,952
    60
    That’s what happens here too...

    I’m still testing, but without success so far.

    I suggest keeping the Enablement packages unzipped in separate folders—one for each.
    Use the PowerShell script only for the LCU and net481 updates.

    Until I see a reliable solution, I’ll keep using the manual method.
     
  12. sergey130270

    sergey130270 MDL Senior Member

    May 15, 2014
    358
    620
    10
    Hi @SunLion . We could try slightly changing the approach to update integration in order to eliminate the need to integrate the LCU through W10UI.cmd.

    One of the circumstances that makes this approach possible is the .NET Framework 4.8.1 package (ndp481.msu). Microsoft currently distributes it as a single package for both Windows 11 24H2 and 25H2. Together with the other circumstances described below, this allows to build the script without the need for W10UI.cmd.

    2. The L1 directory containing `windows11.0-kb5043080-x64.msu` has a static structure (logic) that will not be changed going forward. The package itself can be placed in any other directory without creating conflicts during extraction with other update packages.

    The proposed approach keeps the structure simple: L1 is located in its own `UUP\L1` directory, while the other required packages are located in the common `UUP` directory. The processing is performed sequentially. Each required package is first extracted and prepared, after which its contents are used directly during the subsequent integration stage.

    In this way, all necessary update preparation is handled by the script, while LCU integration can be performed without using `W10UI.cmd`.

    In my opinion, this approach would make the process more independent from `W10UI.cmd`, preserve the existing update-processing logic, and at the same time work correctly with the common package structure for Windows 11 24H2 and 25H2.

    If you find this approach worth considering, I would be happy to provide some examples of the extraction and integration process.
     
  13. sergey130270

    sergey130270 MDL Senior Member

    May 15, 2014
    358
    620
    10
    For @SunLion . Here's an unpacking example.
    Code:
    echo.
    echo ------------------------------------------------------------
    echo Extracting Files from MSU L1 Cumulative Update
    echo ------------------------------------------------------------
    
    SET "L1Temp=%~dp0UUP\L1temp"
    
    If EXIST "%L1Temp%" RD /S /Q "%L1Temp%"
    mkdir "%L1Temp%"
    mkdir "%L1Temp%\Temp"
    
    :: Copying PSFExtractor
    Copy /y "%~dp0Tools\%HostArchitecture%\PSFExtractor.exe" "%L1Temp%\"
    
    echo.
    echo Extracting MSU...
    for %%F in ("%~dp0UUP\L1\*.msu") do set "LCUName=%%~nF"
    dism /English /Apply-Image /ImageFile:"%~dp0UUP\L1\%LCUName%.msu" /Index:1 /ApplyDir:"%L1Temp%" /NoAcl:all
    
    echo.
    echo Extracting express.psf.cix.xml
    %_wimlib% extract "%L1Temp%\%LCUName%.wim" 1 express.psf.cix.xml --no-acls --dest-dir="%L1Temp%"
    
    echo.
    echo Extracting UpdateCompression.dll
    If EXIST "%L1Temp%\DesktopDeployment" RD /Q /S "%L1Temp%\DesktopDeployment" >nul
    If EXIST "%L1Temp%\msdelta.dll" DEL /F /Q "%L1Temp%\msdelta.dll" >nul
    "%~dp0Tools\%HostArchitecture%\7z.exe" x -y -o"%L1Temp%\DesktopDeployment" "%L1Temp%\DesktopDeployment.cab" >nul
    If EXIST "%L1Temp%\DesktopDeployment\UpdateCompression.dll" copy /y "%L1Temp%\DesktopDeployment\UpdateCompression.dll" "%L1Temp%"
    If EXIST "%L1Temp%\UpdateCompression.dll" rename "%L1Temp%\UpdateCompression.dll" "msdelta.dll"
    
    echo.
    echo Extracting dpx.dll
    If EXIST "%L1Temp%\DesktopDeployment\dpx.dll" copy /y "%L1Temp%\DesktopDeployment\dpx.dll" "%L1Temp%"
    
    echo.
    echo Extracting PSF files...
    "%L1Temp%\PSFExtractor.exe" -v2 "%L1Temp%\%LCUName%.psf" "%L1Temp%\express.psf.cix.xml" "%L1Temp%\Temp"
    
    echo.
    echo Extracting WIM files...
    %_wimlib% extract "%L1Temp%\%LCUName%.wim" 1 \ --dest-dir="%L1Temp%\Temp" --no-acls --no-attributes
    
    
    echo.
    echo ------------------------------------------------------------
    echo Extracting Files from MSU L2 Cumulative Update
    echo ------------------------------------------------------------
    
    SET "L2Temp=%~dp0UUP\L2temp"
    
    If EXIST "%L2Temp%" RD /S /Q "%L2Temp%"
    mkdir "%L2Temp%"
    mkdir "%L2Temp%\Temp"
    
    :: Copying PSFExtractor
    Copy /y "%~dp0Tools\%HostArchitecture%\PSFExtractor.exe" "%L2Temp%"
    
    echo.
    echo Extracting MSU...
    
    for %%F in ("%~dp0UUP\*.msu") do (
        echo %%~nxF | findstr /I /C:"ndp481.msu" >nul || set "LCUMSU=%%F"
    )
    
    dism /English /Apply-Image /ImageFile:"%LCUMSU%" /Index:1 /ApplyDir:"%L2Temp%" /NoAcl:all
    
    :: Get LCU file name without extension
    for %%F in ("%LCUMSU%") do set "LCUName=%%~nF"
    
    echo.
    echo Extracting express.psf.cix.xml
    %_wimlib% extract "%L2Temp%\%LCUName%.wim" 1 express.psf.cix.xml --no-acls --dest-dir="%L2Temp%"
    
    echo.
    echo Extracting UpdateCompression.dll
    If EXIST "%L2Temp%\DesktopDeployment" RD /Q /S "%L2Temp%\DesktopDeployment" >nul
    If EXIST "%L2Temp%\msdelta.dll" DEL /F /Q "%L2Temp%\msdelta.dll" >nul
    "%~dp0Tools\%HostArchitecture%\7z.exe" x -y -o"%L2Temp%\DesktopDeployment" "%L2Temp%\DesktopDeployment.cab" >nul
    If EXIST "%L2Temp%\DesktopDeployment\UpdateCompression.dll" copy /y "%L2Temp%\DesktopDeployment\UpdateCompression.dll" "%L2Temp%"
    If EXIST "%L2Temp%\UpdateCompression.dll" rename "%L2Temp%\UpdateCompression.dll" "msdelta.dll"
    
    echo.
    echo Extracting dpx.dll
    If EXIST "%L2Temp%\DesktopDeployment\dpx.dll" copy /y "%L2Temp%\DesktopDeployment\dpx.dll" "%L2Temp%"
    
    echo.
    echo Extracting PSF files...
    "%L2Temp%\PSFExtractor.exe" -v2 "%L2Temp%\%LCUName%.psf" "%L2Temp%\express.psf.cix.xml" "%L2Temp%\Temp"
    
    echo.
    echo Extracting WIM files...
    %_wimlib% extract "%L2Temp%\%LCUName%.wim" 1 \ --dest-dir="%L2Temp%\Temp" --no-acls --no-attributes
     
  14. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,776
    6,952
    60
    This might reduce processing time, since there will be only one decompression step—for both the standard integration and the reintegration after enabling netfx35.

    We can run some tests and see how it works...
     
  15. sergey130270

    sergey130270 MDL Senior Member

    May 15, 2014
    358
    620
    10
    #2216 sergey130270, Sep 6, 2026
    Last edited: Sep 7, 2026
    For @SunLion. An example of update integration.
    Code:
    echo.
    echo ------------------------------------------------------------
    echo Installing cumulative update^(s^)...
    echo ------------------------------------------------------------
    echo.
    
    
    echo.
    echo.
    for %%F in ("%~dp0UUP\*ndp481*.msu") do (
    echo Installing: %%~nxF
    "%DISM11%" /English /Image:"%MountDir%" /Add-Package /PackagePath:"%%~fF"
    If errorlevel 1 (
        echo [ERROR] Failed to install: %%~nxF
    ) ELSE (
        echo [OK] Installed: %%~nxF
       )
    )
    
    echo.
    echo.
    echo Installing: LCU1
    "%DISM11%" /English /Image:"%MountDir%" /add-package /packagepath:"%L1Temp%\Temp\update.mum"
    If errorlevel 1 (
        echo [ERROR] Failed to install: LCU1
    ) ELSE (
        echo [OK] Installed: LCU1
    )
    
    echo.
    echo Installing SSU...
    for %%F in ("%L2Temp%\*SSU-26100*.cab") do (
    echo Installing: %%~nxF
    "%DISM11%" /English /Image:"%MountDir%" /Add-Package /PackagePath:"%%~fF"
    If errorlevel 1 (
        echo [ERROR] Failed to install: %%~nxF
    ) ELSE (
        echo [OK] Installed: %%~nxF
       )
    )
    
    echo.
    echo Installing LCU...
    "%DISM11%" /English /Image:"%MountDir%" /Add-Package /PackagePath:"%L2Temp%\Temp\update.mum"
    If errorlevel 1 (
        echo [ERROR] Failed to install: LCU2
    ) ELSE (
        echo [OK] Installed LCU2
    )
    
    
    If /i "%ISOSelected%"=="Business" (
    echo.
    echo ------------------------------------------------------------
    echo Integrating 26H2 EP
    echo ------------------------------------------------------------
    echo.
    
    "%DISM11%" /English /Image:"%MountDir%" /add-package /packagepath:"%~dp0UUP\KB5121794-PSFX\update.mum"
    )
    
    For @SunLion. An example of integration with display of package names and without unpacking.
    Code:
    echo.
    echo ------------------------------------------------------------
    echo Installing cumulative update^(s^)...
    echo ------------------------------------------------------------
    
    echo.
    echo.
    for %%F in ("%~dp0UUP\*ndp481*.msu") do (
        echo Installing: %%~nxF
        "%DISM11%" /English /Image:"%MountDir%" /Add-Package /PackagePath:"%%~fF"
    
    If errorlevel 1 (
        echo [ERROR] Failed to install: %%~nxF
    ) ELSE (
        echo [OK] Installed: %%~nxF
       )
    )
    
    
    echo.
    echo.
    for %%F in ("%~dp0UUP\L1\*.msu") do (
        echo Installing: %%~nxF
        "%DISM11%" /English /Image:"%MountDir%" /Add-Package /PackagePath:"%%~fF"
    
    If errorlevel 1 (
        echo [ERROR] Failed to install: %%~nxF
    ) ELSE (
        echo [OK] Installed: %%~nxF
       )
    )
    
    
    echo.
    echo.
    echo Extracting SSU from msu L2
    SET "L2Temp=%~dp0UUP\L2temp"
    
    If EXIST "%L2Temp%" RD /S /Q "%L2Temp%" >nul 2>&1
    mkdir "%L2Temp%" >nul 2>&1
    
    for %%F in ("%~dp0UUP\*.msu") do (
        echo %%~nxF | findstr /I /C:"ndp481" >nul || "%~dp0Tools\%HostArchitecture%\7z.exe" x -y -o"%~dp0UUP\L2temp" "%%~fF" "*SSU-26100*.cab" >nul 2>&1
    )
    
    for %%F in ("%~dp0UUP\L2temp\*SSU-26100*.cab") do (
        echo Installing: %%~nxF
        "%DISM11%" /English /Image:"%MountDir%" /Add-Package /PackagePath:"%%~fF"
    
    If errorlevel 1 (
        echo [ERROR] Failed to install: %%~nxF
    ) ELSE (
        echo [OK] Installed: %%~nxF
        )
    )
    
    
    echo.
    echo.
    for %%F in ("%~dp0UUP\*.msu") do (
    echo %%~nxF | findstr /i "ndp481" >nul
    
    If errorlevel 1 (
        echo Installing: %%~nxF
        "%DISM11%" /English /Image:"%MountDir%" /Add-Package /PackagePath:"%%~fF"
    
    If errorlevel 1 (
         echo [ERROR] Failed to install: %%~nxF
    ) ELSE (
         echo [OK] Installed: %%~nxF
        )
      )
    )
    
    
    If /i "%ISOSelected%"=="Business" (
    echo.
    echo.
    for %%F in ("%~dp0UUP\KB5121794\*.msu") do (
         echo Installing: %%~nxF
         "%DISM11%" /English /Image:"%MountDir%" /Add-Package /PackagePath:"%%~fF"
    
    If errorlevel 1 (
        echo [ERROR] Failed to install: %%~nxF
    ) ELSE (
        echo [OK] Installed: %%~nxF
        )
      )
    )
    
     
  16. sergey130270

    sergey130270 MDL Senior Member

    May 15, 2014
    358
    620
    10
  17. sevenlin007

    sevenlin007 MDL Novice

    Nov 22, 2017
    34
    34
    0
  18. Mavericks Choice

    Mavericks Choice MDL Guru

    Aug 5, 2015
    4,420
    17,270
    150
    Yes can see edge removal error, though English Please!!
     
  19. SunLion

    SunLion MDL Expert

    May 11, 2011
    1,776
    6,952
    60
    Could you please provide us with the log file?