卸载失效的安装程序
前言
对于传统的 Win32 应用,他们的安装程序一般是 .MSI,或是 .EXE 里套 .MSI 安装程序,这便于 Windows 管理所有的应用程序。但是,若在安装缓存丢失或卸载不正确的情况下,会导致新的/旧的安装程序无法继续进行
准备工具
从列表移除
运行 MicrosoftProgram_Install_and_Uninstall.meta.diagcab,并根据需要选择“安装”或“卸载”(不明可以选择“卸载”)

在列表中,找到要卸载的项目,点击“下一步”
最后,选择“是,尝试卸载”,即可启动安装程序,并清理大部分相关项目

如果遇到“未修复”的错误,可能是相关的依赖项未被清理,或正在运行,请尝试使用干净启动,请参阅:《如何在 Windows 中执行干净启动 | Microsoft Support》
卸载完成后,重启 Windows 即可
使用 GUID 移除
运行 MicrosoftProgram_Install_and_Uninstall.meta.diagcab,并根据需要选择“安装”或“卸载”(不明可以选择“卸载”)

在列表中,选择“未列出”,点击“下一步”
请参阅:《注册表查找 GUID》或《安装程序缓存目录查找 GUID》,以获取目标应用程序的 GUID,填入到下方的文本框,并点击“下一步”

最后,选择“是,尝试卸载”,即可启动安装程序,并清理大部分相关项目

如果遇到“未修复”的错误,可能是相关的依赖项未被清理,或正在运行,请尝试使用干净启动,请参阅:《如何在 Windows 中执行干净启动 | Microsoft Support》
卸载完成后,重启 Windows 即可
查找 GUID
注册表查找 GUID
卸载程序的注册表路径如下
所有用户的 64 位应用程序(包括 32 位系统的 32 位应用程序):
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |
64 位系统上所有用户的 64 位应用程序:
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall |
当前登录用户安装的程序:
1 | HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |
Windows Installer(最全,但是不带花括号 {}):
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products |
在注册表条目中,逐一寻找目标安装程序的 GUID(项名称即为 GUID,不包括花括号外的内容)
例如,Microsoft Visual C++ 2022 X64 Additional Runtime - 14.50.35719 的项名称为 {AECD4ED0-8A3B-41E9-92D1-6BEE0374CCAF},则 GUID 则为 {AECD4ED0-8A3B-41E9-92D1-6BEE0374CCAF}
(InstallSource、ModifyPath 和 UninstallString 里花括号的内容也是 GUID)

安装程序缓存目录查找 GUID
安装程序缓存目录:
1 | %ProgramData%\Package Cache |
(一般为 C:\ProgramData\Package Cache)
1 | %SystemRoot%\Installer |
(一般为 C:\Windows\Installer)下也有缓存,但是一般为精简过的安装缓存
在文件夹列表中,逐一寻找目标安装程序的 GUID(文件夹名称即为 GUID,不包括花括号外的内容)
例如,vc_runtimeMinimum_x64.msi 的文件夹名称为 {61B44572-8722-4DAF-8ACF-8E742D30BCC5}v14.50.35719,则 GUID 则为 {61B44572-8722-4DAF-8ACF-8E742D30BCC5}

对于部分安装程序,可能会在其他路径下存放有安装缓存
如 VMware Workstation 25H2u1 及以前的版本就存放于:
1 | %CommonProgramFiles(x86)%\VMware\InstallerCache |
(一般为 C:\Program Files (x86)\Common Files\VMware\InstallerCache)

而 VMware Workstation 26H1 起,存放于
1 | %CommonProgramFiles%\VMware\InstallerCache |