Hi, Quick update regarding our implementation yesterday. After running a complete deployment test, it turns out the modifications we made were unfortunately insufficient to preserve the modern WebView2 engine. 1. WebView2 Missing Status Upon checking the installed live system, the modern runtime directory "\Program Files (x86)\Microsoft\EdgeWebView\" was completely stripped from the image. Only the legacy WebView stub is visible via NTLite. The deeper cleanup logic in the main script or NTLite's own component removal is still aggressively catching and wiping out the modern runtime files despite our registry bypasses. 2. DISM Error 15610 & Loop Failure To resolve the annoying Error 15610 during the AppX removal phase, I attempted to refactor the logic into a dynamic loop that queries provisioned packages and filters them through an exclusion array (NoRemUWPapps). Here is the snippet I tested: Code: ============================================================ set "NoRemUWPapps=" if "%ISOSelected%"=="CLIENTBUSINESS" ( set "NoRemUWPapps=Microsoft.SecHealthUI,Microsoft.DesktopAppInstaller,Microsoft.HEIFImageExtension,Microsoft.HEVCVideoExtension,Microsoft.VP9VideoExtensions,Microsoft.WebMediaExtensions,Microsoft.WebpImageExtension,Microsoft.WindowsStore" ) "%DISM%" /English /Image:"%~dp0mount" /Get-ProvisionedAppxPackages > "%temp%\appx_list.txt" for /f "tokens=2 delims=: " %%a in ('find "PackageName" ^< "%temp%\appx_list.txt"') do ( set "RemoveUWPapp=%%a" for %%u in (%NoRemUWPapps%) do ( echo %%a | findstr /l /i /c:"%%u" >nul 2>&1 && set RemoveUWPapp= ) if not "!RemoveUWPapp!"=="" ( ECHO !RemoveUWPapp! "%DISM%" /English /quiet /Image:"%~dp0mount" /Remove-ProvisionedAppxPackage /PackageName:"!RemoveUWPapp!" || ( echo [WARNING] !RemoveUWPapp! It could not be removed or had already been deleted. ) ) ) del /q "%temp%\appx_list.txt" >nul 2>&1 ============================================================ Unfortunately, this approach also failed. Error 15610 persists. I just wanted to share the test results.
I'd just clarify the comments a bit so that in six months or a year it's immediately clear why they're disabled. For example: :: --- Prevents MicrosoftEdgeUpdate.exe from running. :: --- Commented out to preserve WebView2 and Microsoft.MicrosoftEdge.Stable recovery. rem reg add "HKLM\TK_NTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun" /v "2" /t REG_SZ /d "MicrosoftEdgeUpdate.exe" /f :: --- Remove Microsoft.MicrosoftEdge.Stable AppX registration. :: --- Commented out to preserve Microsoft Store compatibility and WebView2 platform. rem for /f %%i in ('reg query "HKLM\TK_SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications" 2^>NUL ^| findstr /i /C:"Microsoft.MicrosoftEdge.Stable"') do ( rem reg delete "%%i" /f >nul ) Why exactly this is so Now you know that these two lines affect completely different things: DisallowRun prevents MicrosoftEdgeUpdate.exe from running, thereby potentially preventing WebView2 and the platform from being restored. Deleting Microsoft.MicrosoftEdge.Stable removes the AppX platform registration, because of this, the Microsoft Store can no longer install apps that depend on it. Now you have: The Edge browser can be uninstalled. Edge Update can be restricted. DevTools can be uninstalled. Tasks and shortcuts can be deleted. WebView2 remains functional. Microsoft.MicrosoftEdge.Stable remains registered. Modern Store apps continue to work. TikTok and Excel don't crash with WebView2 panels. Today, you discovered not just a bug, but an important feature of modern Windows 11. Previously, many integrators believed that Edge was just a browser. Now it's clear that this is no longer the case. There is the Edge browser—a user application; WebView2 Runtime—a runtime environment; Microsoft.MicrosoftEdge.Stable—an AppX platform on which other applications depend. By separating these components in your integrator, you make it much more modern and compatible. This is a truly qualitative improvement in the architecture of your scenario.
I don't think error 15610 is directly related to the AppX removal loop. Changing the loop logic alone does not change how DISM processes packages. If DISM reports error 15610, it is more likely caused by the package state or its dependencies than by the `for` loop itself. I also noticed one possible issue in the posted example: set "NoRemUWPapps=Microsoft.SecHealthUI,Microsoft.DesktopAppInstaller,..." for %%u in (%NoRemUWPapps%) do ( `cmd.exe` splits `for` items by spaces, not commas. Unless the list is processed differently, the entire string may be treated as a single item instead of individual package names. So, in my opinion, error 15610 should be investigated separately.
The first modification has been made, and I ran a test that appears to have gone smoothly, without errors. Since these are tools you use frequently, please download the files and extract them into the `2xH2_Creator` folder. Replace the existing files and run the program as an administrator. I look forward to hearing about the results.
Hi MC, The log file shows some inconsistencies: As expected, Windows Calculator was not removed, so Modern Calculator should be present and working. An error occurred while removing the preinstalled Edge. I am still going to check the code for any errors. An error occurred while unmounting install.wim. There was likely an Explorer folder open during the process. Strangely, the log files were not found at the end of the process; therefore, they were not copied. I suggest you repeat the process, but be sure to clean the registry using your preferred tool and also clear out temporary files. I also always run NTLite to check for any traces of an incomplete unmounting process. If any exist, the program flags them, and we can then complete the unmounting using NTLite itself. Do not leave any File Explorer folders open while the script is running, and do not launch any applications or browsers until the process is complete. I’m going to run another test using your settings to see how it behaves. I’ll post the results here. Best regards, Edit. Add Log file and images from test No errors occurred during the test.
Thank you so much for this in-depth and visionary architectural analysis! You’ve perfectly summarized the essence of the problem and the true logic behind this solution. For a long time, many of us in the modding community viewed Edge as a simple browser that needed to be completely scrapped. But things have changed in modern Windows 11. Separating the browser, the WebView2 runtime, and the Store dependencies with surgical precision is the key to building a true “Lite” system. I’ll add the comment line explanations you suggested to the code exactly as you described. This technical discussion was a real lesson in itself!
Hi @SunLion , I wanted to share the results and feedback from my recent test run using your script on a Windows 11 24H2 Enterprise base image. Overall, the execution was highly successful, and the generated baseline is structurally solid. Here is a detailed breakdown of the test results and observations: Key Successes & Confirmations Ventoy Compatibility: Selecting the Ventoy compatibility option worked flawlessly. The resulting ISO boots seamlessly without any deployment issues. WebView2 Integration: I verified the runtime integration via NTLite post-mount. The WebView2 Runtime (Core and Legacy) is perfectly baked into the component store, displaying a full 400.00 MB footprint. This confirms that all web-reliant applications and trading dashboards will function out-of-the-box without requiring manual post-install runtime setups. Update Servicing: The script successfully handled the update phase. After gracefully passing the 25H2 check, it correctly integrated the 24H2 cumulative update (KB5092430), successfully bumping the operating system build to 26100.8737. Technical Observations & Minor Logs WIM Footprint: The final install.wim size concluded at 5.68 GB. This capacity is entirely expected, as WinRE.wim and critical source directories were properly preserved to maintain strict Ventoy compliance. DISM Provisioning Error (15610): During the provisioned Appx packages cleanup, DISM returned Error: 15610 (No operation was performed) specifically when targeting Microsoft.DesktopAppInstaller (Winget). This is likely due to a hard dependency lock within the 24H2 app stack, which might be worth noting if a total strip of Winget was expected by the script logic. Next Steps With this stable, updated baseline locked in, I am now moving into NTLite to perform deep WinSxS component reductions, remove unnecessary language components, and apply final registry optimizations. Thank you for developing this automated framework—it streamlined the heavy lifting of update servicing and runtime embedding beautifully! Best regards,
To attempt to resolve error 15610, the code below was added to Remove ProvisionedAppxPackages: Download the corrected script and replace it. Run the tests.
Subject / Suggestion: Make WSearch disabling conditional to prevent breaking the Search Icon UI Hi, I noticed that hardcoding WSearch into the disabled services loop completely paralyzes the Windows Search icon and Start Menu search functionality on Windows 11. For users who prefer a lightweight OS but still want to use the local search feature, this causes a broken UI experience. It would be great if we separate WSearch from SysMain and make it conditional based on a user selection (e.g., a %DisableSearch% prompt). Here is a suggested revision for that block: Code: echo. ECHO. ECHO ============================================================ ECHO Disable Services Prefetcher and SysMain ECHO ============================================================ reg add "HKLM\TK_SYSTEM\ControlSet001\Control\WMI\Autologger\ReadyBoot" /v "Start" /t REG_DWORD /d "0" /f reg add "HKLM\TK_SYSTEM\ControlSet001\Control\Session Manager\Memory Management\PrefetchParameters" /v EnableSuperfetch /t REG_DWORD /d "0" /f reg add "HKLM\TK_SYSTEM\ControlSet001\Control\Session Manager\Memory Management\PrefetchParameters" /v EnablePrefetcher /t REG_DWORD /d "0" /f reg add "HKLM\TK_SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "PrefClean" /t REG_SZ /d "cmd /c del /f /s /q \"%%SystemRoot%%\Prefetch\*.*\"" /f :: SysMain is safe to disable globally for /f "tokens=1 delims=" %%a in ('reg query "HKLM\TK_SYSTEM\ControlSet001\Services" /e /k /f "SysMain" 2^>nul ^| find /i "SysMain"') do ( ECHO Disabling service SysMain reg add "HKLM\TK_SYSTEM\ControlSet001\Services\SysMain" /v "Start" /t REG_DWORD /d "4" /f ) :: WSearch is now conditional based on user preference if "%DisableSearch%"=="1" ( ECHO ============================================================ ECHO Disable Windows Search Service ECHO ============================================================ for /f "tokens=1 delims=" %%a in ('reg query "HKLM\TK_SYSTEM\ControlSet001\Services" /e /k /f "WSearch" 2^>nul ^| find /i "WSearch"') do ( ECHO Disabling service WSearch reg add "HKLM\TK_SYSTEM\ControlSet001\Services\WSearch" /v "Start" /t REG_DWORD /d "4" /f ) ) What do you think? Subject / Question: Where exactly is the native Snipping Tool (ScreenSketch) being removed in the script? Hi, I have a follow-up question regarding the Snipping Tool logic. I noticed that the script copies a standalone SnippingTool_10.0.26100_en-US.exe to the $OEM$ folder if the image is not LTSC. However, when I check the offline image using Get-ProvisionedAppxPackages and Get-Capabilities, the native Windows Microsoft.ScreenSketch (Snipping Tool) is already completely missing/removed from the image before the addon step even runs. I have searched through the script lines but couldn't find the exact command or loop that strips out the native, original Windows Snipping Tool. Could you point out where or how the native package is being removed? Thanks in advance!
The code modification suggested above has been implemented in the script. Microsoft.ScreenSketch is removed in Remove ProvisionedAppxPackages.
Thanks @SunLion I performed a system clean & ensured no stale files were mounted. Re ran the script with same values, this time the build did show the calc app though the app would not open. I installed the the desktop app installer in the VM & ran winget to repair or reinstall. It refused this due to "The server certificate did not match any expected values" I edited the registry to "EnableBypassCertificatePinningForMicrosoftStore" then re ran install with winget. now working as expected. What parameter in the script may cause this?
No, the file contains ModernCalculator.gif, which demonstrates that the Modern Calculator is working without errors. You can open this file with IrfanView and see the animation. Sorry, I forgot to attach the corrected script for testing. Here is the script.
@SunLion Thank you for the updated script, I'm getting there but not yet! With your edited script the desktop app installer is now present though modern calc is not installed. Should I install modern calc it gives this error: 0x8a15005e : The server certificate did not match any of the expected values. If I run this reg below: Code: [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\AppInstaller] "EnableBypassCertificatePinningForMicrosoftStore"=dword:00000001 I can now install modern calc & all is good.
How about adding this tweak to PersonalTweaks\REG? That way, it would be applied by RunOnceEX. It would be a good solution for you. Give it a try and see if it works...
Certainly, no idea why the script is not installing the calc, I ran your edited script & I did not alter this at all?