无忧启动论坛

标题: 分享一个删除非必需的APPX(包括Defender)的简单办法 [打印本页]

作者: hlowld    时间: 前天 17:40
标题: 分享一个删除非必需的APPX(包括Defender)的简单办法
本帖最后由 hlowld 于 2025-7-2 18:01 编辑

对离线镜像(假设在z:)执行以下代码,安装后,所有用户都不会有白名单以外的APPX(包括Defender等NonRemovable为True的系统应用)
偶然发现插入代码好像要吃字符,导致脚本无效,改为直接发文本。

刚才用此办法安装了一次19044.2728,发现删除HKLM\sof\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\InboxApplications下白名单以外的项,疑似会导致AppXSvc服务高CPU内存占用,而安装19045.5965则不会。
看来此办法对低版本系统不适合。

:removeproappx
powershell -NoProfile -Command ^
"Get-ProvisionedAppxPackage -Path 'z:' |" ^
"Where-Object { " ^
"  $_.DisplayName -notmatch 'ShellExperienceHost|StartMenuExperienceHost|Client\.CBS|immersivecontrolpanel|PrintDialog|VCLibs'" ^
"} |" ^
"Remove-ProvisionedAppxPackage -Path 'z:'" >nul 2>nul


reg load HKLM\sof z:\Windows\System32\config\software >nul 2>nul || goto :eof
set "exclude_list=ShellExperienceHost StartMenuExperienceHost Client.CBS immersivecontrolpanel PrintDialog VCLibs"
for /f "tokens=9 delims=\" %%a in ('reg query "HKLM\sof\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\InboxApplications"') do (
    set "should_delete=1"
    for %%# in (%exclude_list%) do (echo %%a | findstr /i "%%#" >nul && set "should_delete=0")
    if "!should_delete!" equ "1" reg delete "HKLM\sof\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\InboxApplications\%%a" /f >nul 2>nul
)
reg unload HKLM\sof >nul 2>nul
goto :eof


对于Edge,在线系统用老版本安装包执行卸载,暂时没找到简单好用的离线卸载方法。不太愿意用删除注册表和文件的方案,感觉容易出错,对系统版本的兼容性也不高。
:removeedge
if exist "%~dp0edgesetup.exe" (
for /f "tokens=1 delims=\" %%i in ('dir /B /A:D "%ProgramFiles(x86)%\Microsoft\Edge\Application" 2^>nul ^| find "."') do set "edge_chromium_package_version=%%i"
if defined edge_chromium_package_version (
  taskkill /f /im msedge.exe >nul 2>nul
  taskkill /f /im MicrosoftEdgeUpdate.exe >nul 2>nul
  %~dp0edgesetup.exe --uninstall --force-uninstall --msedge --system-level --verbose-logging
)
)
del /f /q "%USERPROFILE%\Desktop\Microsoft Edge.lnk" >nul 2>nul
del /f /q "%ProgramData%\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk" >nul 2>nul
del /f /q "%appdata%\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk" >nul 2>nul
goto :eof


作者: 小灰兔    时间: 前天 17:48
感谢分享
作者: wang1126    时间: 前天 18:00
谢谢楼主分享
作者: wn168cn@163.com    时间: 前天 18:56
感谢分享 !!
作者: cksuperxlh    时间: 前天 19:02
白名单怎么设置
作者: 天使说请安静    时间: 前天 19:48
正找这个,牛逼

作者: http88    时间: 前天 19:53
有更新了就去试用一下,支持、感谢分享!
作者: 燕飞龙    时间: 前天 19:56
谢谢分享
作者: hlowld    时间: 前天 20:53
cksuperxlh 发表于 2025-7-1 19:02
白名单怎么设置

系统必需的6个白名单ShellExperienceHost|StartMenuExperienceHost|Client.CBS|immersivecontrolpanel|PrintDialog|VCLibs,已经写在脚本中了,可以将自己想要保留的appx加入进来
作者: 印第安老斑鸠    时间: 前天 21:04
移除defender会不会报错?
作者: chsh02    时间: 前天 21:06
这个很好
作者: hlowld    时间: 前天 21:12
本帖最后由 hlowld 于 2025-7-1 21:18 编辑
印第安老斑鸠 发表于 2025-7-1 21:04
移除defender会不会报错?

这个办法其实并没有移除任何组件,原理是:
1、每个新用户首次登录时,AppReadiness服务会自动为用户安装预配的应用(即Windows Apps)。该办法将白名单外的应用解除预配,让其不被自动安装。
2、每个新用户首次登录时,AppReadiness服务会自动为用户安装HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\InboxApplications下的系统应用(即System Apps,存储路径在Windows\SystemApps下)。该办法将该注册表下白名单外的项删除,让其不被自动安装。
所以理论上,该办法其实对系统改动小,应该是较为稳定的。
作者: handsome_xiang    时间: 前天 21:27
感谢分享!
作者: arkuon    时间: 前天 21:32

谢谢分享
作者: hmaaaa    时间: 前天 22:57
謝謝大大用心分享,感恩喔~~! ^^ 辛苦了!
作者: valen21    时间: 前天 23:06
如何获取z:盘镜像的appx名单,再自定义白名单?
作者: kevinying16    时间: 前天 23:22
感谢分享
作者: jjhtya    时间: 前天 23:24
谢谢分享
作者: vaf    时间: 昨天 00:37
极好
作者: chibuzhu    时间: 昨天 00:48
感谢分享
作者: 蘭蘭    时间: 昨天 07:49
谢谢分享!
作者: xuxiaojie120    时间: 昨天 08:03
谢谢分享!!!
作者: 201012121135    时间: 昨天 08:18
谢谢分享
作者: ruanfen    时间: 昨天 08:46
感谢分享,学习了
作者: ynb168c    时间: 昨天 08:59

谢谢楼主分享
作者: 小龙飞    时间: 昨天 09:05
感谢您的分享!下载收藏啦!
作者: sulong    时间: 昨天 09:10
谢谢楼主分享
作者: 爱恋一生    时间: 昨天 09:11
谢谢楼主分享
作者: jho    时间: 昨天 09:23
谢谢分享
作者: lomey    时间: 昨天 09:43
谢谢分享
作者: makoto23    时间: 昨天 10:52
感谢分享
作者: sjp060305    时间: 昨天 11:06
Mark,看反馈情况再说。。。
作者: guong    时间: 昨天 12:41
谢谢分享
作者: 2010hook    时间: 昨天 12:51
本帖最后由 2010hook 于 2025-7-2 13:07 编辑

改进了一下,更严谨简洁:
  1. powershell -ExecutionPolicy Bypass -NoProfile -Command "Get-ProvisionedAppxPackage -Path 'z:' | Where-Object { $_.PackageName -notmatch '(?:ShellExperienceHost|StartMenuExperienceHost|Client\.CBS|ImmersiveControlPanel|PrintDialog|VCLibs)' } | ForEach-Object { Remove-ProvisionedAppxPackage -Path 'z:' -PackageName $_.PackageName -ErrorAction Continue }"
复制代码
  1. for /f "tokens=9* delims=" %%a in ('reg query "HKLM\SOFTWARE_Tmp\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\InboxApplications" ^| findstr /ive "ShellExperienceHost StartMenuExperienceHost Client.CBS immersivecontrolpanel PrintDialog VCLibs" 2>nul') do (
  2.     reg delete "HKLM\SOFTWARE_Tmp\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\InboxApplications\%%~a" /f >nul 2>nul
  3. )
复制代码

作者: 进士小站    时间: 昨天 12:51
好是好
就怕把系统搞倒了又要重来
作者: dksoft    时间: 昨天 13:54
感谢分享
作者: zhentaojun    时间: 昨天 15:45
谢谢分享
作者: yzydys    时间: 昨天 17:08
谢谢谢分享。
作者: 印第安老斑鸠    时间: 昨天 20:27
hlowld 发表于 2025-7-1 21:12
这个办法其实并没有移除任何组件,原理是:
1、每个新用户首次登录时,AppReadiness服务会自动为用户安 ...

好的,谢谢,你这么一说我懂了,这种方法很安全




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3