========================= 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
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.
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]
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.
That’s really a bit of a mystery. Some apps always complain. For my part, I always enable net35, just to be safe.
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...
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.
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.
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
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...
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 ) ) )