ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

VMware卸载残留导致重装失败?注册表与MSI清理完整指南

VMware卸载残留导致重装失败?注册表与MSI清理完整指南 1. 卸载后重装失败先搞清楚报错到底在说什么先说一句不好听的VMware Workstation 12 这个版本在 Windows 10 上卸载后重装失败十有八九不是安装包坏了也不是系统有问题而是卸载的时候根本没卸干净。尤其你只要动过注册表清理工具、或者中途强制结束过卸载进程那基本可以断定是注册表残留惹的祸。我这次遇到的情况是这样的手头一台 Windows 10 机器原来装了 VMware Workstation 12 Pro后来因为想换版本在“控制面板-程序和功能”里点了卸载卸载过程看起来正常进度条走完提示重启我也重启了。结果重新运行安装包时刚点开安装向导还没开始选路径就弹出如下提示安装程序无法继续。VMware Workstation 的安装程序已提前结束。点“确定”后整个安装向导就直接退出连让你选安装目录的机会都不给。当时我第一反应是安装包下载不完整于是重新从官网拖了一遍 ISO解压后再试依旧同样报错。又换了一个早期版本的安装包还是同样的结果。这时候几乎可以确定不是安装包的问题是系统里有什么残留的东西在拦截安装流程。网上搜了一圈类似的问题描述很多但大部分帖子只给了一个笼统的“清理注册表”建议具体清哪里、按什么顺序清、清完怎么验证基本没写清楚。所以这篇文章我不打算只贴几个 reg delete 命令就完事我会把从“报错现象”到“日志分析”再到“注册表逐项清理”最后“重装成功验证”的完整链路都写出来你可以直接照着操作。1.1 最常见的三种报错形态根据我这几年处理 VMware 卸载残留问题的经验win10 删掉 VMware 12 后再装失败报错基本就三种形态你可以先对号入座判断问题的严重程度报错形态典型提示严重程度安装向导直接退出“安装程序无法继续。VMware Workstation 的安装程序已提前结束。”中多为 MSI 残留或旧版本未完全卸载安装到一半回滚“安装程序在安装 VMware Workstation 之前被中断。系统未被修改。”高可能涉及服务、驱动、注册表多处残留启动后报错安装成功但打开虚拟机提示“VMware Workstation 无法启动”或“VMX 进程异常退出”低多为服务未注册或授权信息残留我这次遇到的是第一种。但无论哪种形态排查思路都是一样的先看安装日志再查 MSI 残留最后检查注册表和文件残留。1.2 为什么偏偏是注册表在捣鬼这里要简单说下原理。VMware Workstation 从很早的版本开始就是用 Windows InstallerMSI技术来做安装和卸载的。MSI 有一个特点卸载时它会读取一个叫“产品数据库”的注册表位置把所有注册的组件、服务、驱动逐项删除。这个机制正常情况下没问题问题出在两个地方第一VMware 12 年代的产品卸载程序本身对 Windows 10 兼容性并不完美。Win10 的 UAC 权限模型比 Win7 严格卸载时如果某些子进程没有以管理员权限运行就会静默跳过部分清理步骤但卸载界面依然显示成功。第二很多人在卸载过程中会弹出一个“是否要移除所有虚拟网络适配器”的窗口如果当时点了“否”那么 vmnetbridge、vmnetadapter、vmnetdhcp 这些虚拟网卡驱动会继续留在系统里而这些驱动在注册表中是有一整套关联键值的。于是当你再次运行安装程序时安装向导检测到“系统已存在 VMware 相关服务或驱动”但又无法确认它们的版本和完整性就会直接终止安装以保护现有系统不被搞乱。所以解决问题的核心思路不是“修安装包”而是“把系统恢复到 VMware 从未存在过的状态”也就是把注册表、服务、驱动、文件四样东西全部清干净。2. 排查链路从安装日志到注册表残留的完整定位过程很多人一上来就用 CCleaner 之类的工具扫注册表扫完再装发现没用然后就开始怀疑人生。这里我要说一句可能会得罪某些工具厂商的话对于 VMware 这种大型 MSI 程序的残留通用型注册表清理工具基本没用它们根本不知道 VMware 在注册表里注册了哪些项目最多帮你删几个无用的 ActiveX 键。正确的排查顺序应该是这样。2.1 第一步翻安装日志Windows Installer 有个特性每次安装或卸载操作都会在%temp%目录下生成一份详细的日志文件。前提是你用了命令行参数启动安装程序或者在注册表里启用了 Installer 日志记录。我先教你一个不需要重装就能拿到日志的方法。在开始菜单搜索“事件查看器”打开后定位到应用程序和服务日志 - Microsoft - Windows - MsiInstaller - Operational右侧按时间筛选找到你最近一次尝试安装 VMware 的时间点双击条目看详细信息里的“常规”标签页。里面通常会写清楚安装失败时卡在哪一步比如Product: VMware Workstation -- Error 1603. 安装过程中出现致命错误。1603 这个错误码很经典它翻译成人话就是Windows Installer 在安装过程中遇到了拒绝访问或者资源冲突但具体原因不会在错误弹窗里告诉你。最关键的线索其实在日志的Return value 3位置那个 3 对应的含义是ERROR_INSTALL_FAILURE。不过事件查看器里的信息还是太少更靠谱的方式是直接从命令行跑一次安装手动生成完整日志。等安装包文件解压出来后在解压目录下按住 Shift 键右键空白处选择“在此处打开 PowerShell 窗口”然后执行.\VMware-workstation-full-12.5.9-7535481.exe /log C:\temp\vmware_install.log等待安装失败退出后用记事本打开C:\temp\vmware_install.log按CtrlF搜索Installation failed或Return value 3向上翻几屏你会看到类似这样的关键行MSI (s) (B4:2C) [16:30:11:482]: Note: 1: 2203 2: VMware Workstation.msi 3: -21472870352203这个错误码表示 Installer 无法访问数据库文件而-2147287035转成十六进制是0x80070005也就是访问被拒绝。出现这个组合基本就是注册表残留锁定了 MSI 数据库路径。2.2 第二步确认 MSI 安装状态拿到日志后接下来要查系统里到底还有没有 VMware 的 MSI 残留信息。使用 Windows Installer 安装的程序会在注册表的一个统一位置留下“产品码”信息即使程序文件已经删掉这个位置也可能还留着记录。以管理员身份打开命令提示符执行reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Product /s /f VMware /k如果输出结果里能看到类似VMware Workstation的字样说明 MSI 数据库里确实还有记录。这一步的返回值很重要它直接决定了你是走“修复式清理”还是“全手动清理”。实际操作中我发现很多机器上执行完这条命令后输出一堆十六进制文件夹名比如HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Product\2F5A8E401E1D60D46A57FF2D9B4B5C12这个以Product开头的路径下的子键每个都对应一个已注册的 MSI 产品。你可以逐个键击查看里面的ProductName值找到名字为VMware Workstation的那个记下它的完整键路径后面清理时要用。2.3 第三步定位注册表残留的精确位置除了 MSI 产品数据库VMware 还在多个注册表位置散落着键值。我用一句话总结 VMware 12 在 Win10 上的注册表分布特点它不像某些国产软件那样只在一个目录下建键而是把配置、服务、驱动、授权信息分别放在不同层次的地方。以下是 VMware 12 在 win10 系统中最常残留的注册表区域建议用注册表编辑器regedit逐一定位查看HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc. HKEY_CURRENT_USER\SOFTWARE\VMware, Inc. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application其中Services下要重点看这几个名字VMnetDHCP、VMware NAT Service、VMnetAdapter、VMwareHostOpenProcess、VMware Authorization Service服务名也叫VMwareAuth或vmware-hostd。只要这些服务键还在安装程序运行时的自检阶段就会认为“VMware 组件尚未清理干净”然后直接中断。3. 实操清理 VMware 12 注册表残留的完整步骤到这一步该看的日志都看了该确认的残留位置也确认了接下来就是动手清理。我按“服务 - MSI 数据 - 注册表键值 - 文件系统”四个维度给出完整操作清单。3.1 系统准备关闭服务与恢复安全模式清理注册表之前先做两件安全操作避免清理过程中 VMware 相关服务还在后台运行导致文件被占用打开“服务”管理窗口services.msc找到名字里带 VMware 或 VMnet 的服务右键停止。在设备管理器中找到“网络适配器”下所有带 VMnet 的虚拟网卡右键卸载设备弹出的勾选框里勾选“删除此设备的驱动程序软件”。这两步做完后建议再打开一次“已安装的更新”页面控制面板 - 程序 - 查看已安装的更新确认没有 VMware 相关的更新补丁残留。如果列表里还有 VMware 的条目优先在这里先卸载。实际处理过程中我发现有些服务即便点了停止过几秒又会自动重启。这是因为它们设置了Start2自动并依赖其他服务触发。如果遇到这种情况直接进注册表把服务键的Start值改成 4禁用重启系统后再进行后续清理。如果以上操作都做了仍然在清理注册表时遇到“拒绝访问”错误我建议重启电脑开机时按 F8 或 Shift 重启进入安全模式在安全模式下执行注册表清理。安全模式下第三方服务和驱动都不会加载注册表键被占用的概率极低。3.2 使用微软 msizap 工具处理 MSI 残留对于 2.2 节中查到的 MSI 产品残留最干净的处理方式是使用微软官方的msizap.exe工具而不是手动去删 Product 键。这个工具的下载地址现在已经不太好找因为微软把它打包进了 Windows SDK你可以直接搜索“Windows SDK”安装后到安装目录下找。msizap的使用方式很直接管理员身份运行命令提示符执行msizap T {产品码}其中{产品码}是你要清除的 VMware 产品的 GUID 格式代码比如msizap T {5A854B87-5F2E-4C1B-8D1E-1B1B0C2A0F11}这条命令的含义是删除产品数据库中关于该产品码的所有注册信息包括 Add/Remove Programs 条目、Installer 配置数据、文件定位信息等。执行成功后可以再用reg query验证确认 VMware 相关产品码在Installer\Product下已经查不到。这里有个经验msizap T参数后面的产品码必须是大写括号包裹的 GUID 格式如果复制时漏了括号命令会直接报错。另外msizap 只对“已知产品”有效如果卸载不完全导致产品码信息本身已经损坏它也可能提示找不到产品这种情况下就需要手动清理注册表了。3.3 手工清理注册表必删的键值位置现在进入大家最关心的手工清理环节。在 regedit 中逐项查看并删除以下键值位置。删除前务必先导出备份以免误删系统关键配置。第一处VMware 主配置目录HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc. HKEY_CURRENT_USER\SOFTWARE\VMware, Inc.这两处是整个 VMware 配置信息的中枢里面保存了安装路径、功能开关、 License 信息等。卸载过程中如果 UAC 权限不足这两个主键下会有大量子键残留。建议直接把整个VMware, Inc.键删除。第二处卸载信息列表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall在这个键下逐个查看子项找到DisplayName为VMware Workstation或类似名称的子键右键删除。注意这里经常会有两个子键对应同一个产品一个是当前用户安装版本一个是系统级安装版本都要删。第三处Installer 产品数据库残留HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products这个键下子键名称是十六进制 GUID不能一眼看出哪个是 VMware。你需要逐个选中子键查看右侧的ProductName值找到 VMware Workstation 相关的删除整个子键。注意还要同步查看HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products这里的 GUID 结构与 Classes 下的对应如果前面删了 1 这里的也要同步删。实际上 S-1-5-18 是 LocalSystem 用户的 SIDVMware 作为系统级安装程序其 MSI 数据主要存在这里。在这个键下搜索VMware关键字能搜到更精确的残留项。第四处服务项注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMnetDHCP HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMware NAT Service HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMnetAdapter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMwareHostOpenProcess HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMwareAuth HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vmware-hostd HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMwareUIAuth这些以 VMware 或 VMnet 开头的服务键是重装失败的主要拦截源。安装向导在启动时会枚举系统服务如果发现这些服务存在但状态异常就会直接判定为“已有旧版本需要先卸载”。删服务键时注意CurrentControlSet与ControlSet001、ControlSet002是相互链接的关系一般情况下只需处理CurrentControlSet系统会自动同步。第五处事件日志注册HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application展开 Application 后搜索名字中带VMware的子键删掉。这些是 VMware 写入的事件日志来源注册不删除也不影响重装但留着会让下一次卸载时再次出现“拒绝访问”的提示。第六处已安装软件类关联HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Features HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products这里的逻辑与前面类似都是通过 GUID 关联产品功能的。如果你在 Products 里已经删过 VMware 项Features 里的同名 GUID 也可能自动失效建议一并检查。删除时如果不确定某个 GUID 是否属于 VMware可以右键点击子键查看“权限”或其他属性来辅助判断但更直接的办法是搜索 VMware 关键字让系统帮你筛选。这些键位置清理完后还要检查一个很容易被忽略的地方HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VMware, Inc.64 位系统上32 位版本的 VMware 组件会往这个路径写注册表。如果之前装的是 32 位版本或 64 位安装包里有 32 位模块这里也可能残留键值。建议直接搜索注册表中的VMware关键词逐条查看路径凡是在上述几个大范围内的都可以删。3.4 清理遗留文件和文件夹注册表清理干净后还有文件和文件夹需要同步处理。VMware 12 安装到系统盘后主要文件分布在三四个位置第一处是安装目录默认位于C:\Program Files (x86)\VMware\VMware Workstation如果该目录还存在先尝试删除。删除时如果提示某个文件被占用有可能是vmware.exe或vmware-vmx.exe还在后台运行先用任务管理器结束所有 VMware 相关进程。第二处是公共数据目录C:\ProgramData\VMware这个目录保存了虚拟网络配置、DHCP 配置文件、NAT 配置文件等。注意这里面的文件不一定被占用但如果你不删重装后新版本的配置会和旧文件冲突。尤其是netmap.conf和vmnetdhcp.conf这种配置文件残留后会导致新版本创建的虚拟网络名称错乱。第三处是用户目录下的配置C:\Users\你的用户名\AppData\Local\VMware C:\Users\你的用户名\AppData\Roaming\VMware这里保存了每个用户各自的界面偏好、软件许可缓存等。一般不会导致安装失败但不删的话重装后打开软件可能提示“界面配置已损坏”。对于不放心自己手动删文件的人来说这里有个小技巧直接用安全模式登录系统后再删文件你会发现基本什么都能删掉不用跟文件占用较劲。3.5 周边依赖组件的连带清理很多人清理完主程序后兴冲冲地重新安装结果还是失败然后才发现原来是周边组件在捣乱。VMware Workstation 12 会安装几个外围组件卸载不干净时同样会造成重装失败这里单独列出来说明。视觉组件方面Unity 功能依赖一个名为VMware Unity Helper的组件它会在系统里注册一个 shell 扩展路径在注册表ShellIconOverlayIdentifiers以及ContextMenuHandlers下都有残留。虽然少见但确实遇到过因为冲突导致右键菜单崩溃的情况。虚拟打印机方面VMware 12 会安装一个 32 位的VMware Virtual Printer驱动位置在HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors下。这个项目如果残留会造成重装时打印机监控程序启动失败但错误提示却指向主安装程序。虽然不常见还是建议检查一下。网络桥接组件方面VMware Bridge Protocol会在注册表和网络适配器配置中建立键值。如果你在系统准备的步骤里已经卸载了虚拟网卡那这一项通常也会被同步删除。但注意有些情况下网络适配器的Bindings值会被系统锁定需要在“网络连接 - 适配器属性 - 客户端和服务”里手动取消勾选 VMware Bridge Protocol 后再去注册表清理。4. 重装验证与后续加固别再让二次失败发生清理工作全部完成后不要急着立刻安装。先按以下顺序验证清理是否彻底再正式安装。4.1 安装前的三项验证验证一确认服务列表干净。打开services.msc在服务列表里按 V 键快速跳转确认没有任何以 VM 开头的服务。验证二确认注册表搜索无关键残留。在 regedit 中按CtrlF搜索VMware. Inc注意用短词避免全称超长匹配重点看是否还有HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.这个主键。如果还存在说明前面某一步没删干净。验证三确认文件目录已清理。检查C:\Program Files (x86)\VMware、C:\ProgramData\VMware两个目录是否存在不存在或为空即可。这三项验证都通过后你就可以重新运行安装程序了。这里有个小建议安装时右键安装包选择“以管理员身份运行”不要双击直接运行。双击方式在 UAC 权限提升时会多一层 Shell 调用增加安装失败风险。4.2 断网安装 vs 联网安装的选择安装 VMware 12 时有一个容易被忽略的坑如果电脑联网安装程序会自动检查新版本并提示你是否下载更新。有时候这个在线检查会引发安装进程假死但实际上并没有真正影响安装。我的建议是安装时拔掉网线或断开 Wi-Fi。原因是 VMware Workstation 12 的年代里在线检查模块在 win10 上有已知 bug检查超时后会中断安装向导。断网安装不仅能避免这个问题还能加快安装进度因为少了网络请求等待时间。安装完成后第一次启动 VMware Workstation 时软件会弹出授权窗口。如果你有许可证密钥直接输入即可如果没有也可以先选择“试用”试用期内不影响功能。但要注意如果清理注册表时误删了许可证相关的键值首次启动时可能会提示“输入有效的许可证密钥”这是正常的不代表安装有问题。4.3 安装完成后要做的三项验证安装成功不等于彻底正常。我见过很多用户安装完成但打开虚拟机时才发现虚拟网卡服务没有注册成功然后又要从头排查。为了避免这种二次折腾安装完成后建议按以下顺序验证第一验证虚拟网络服务。在服务管理器中确认VMware NAT Service、VMnetDHCP这两个服务是否处于“正在运行”状态启动类型是否为“自动”。这两项是虚拟机上网的基础。第二验证虚拟网卡。打开设备管理器展开“网络适配器”确认能否看到VMnet1和VMnet8两个虚拟网卡且状态图标上没有黄色感叹号。如果感叹号存在右键“更新驱动程序”选择“自动搜索”让系统重新绑定一次驱动。如果仍然不行打开 VMware 的菜单“编辑 - 虚拟网络编辑器”点击左下角“更改设置”在弹出的窗口里点击“恢复默认设置”通常能自动修复虚拟网卡。第三验证虚拟机硬件加速。创建一台最小配置的虚拟机1 核 CPU、1GB 内存、不装操作系统启动时如果能进入 BIOS 自检界面说明 CPU 虚拟化VT-x/AMD-V已经正常透传安装过程没有把虚拟化支持模块搞坏。如果提示“此主机支持 Intel VT-x但 Intel VT-x 处于禁用状态”那不是 VMware 的问题是 BIOS 设置问题需要重启进 BIOS 开启虚拟化技术。4.4 给 VMware 套上“防卸载残留”的组合拳这次折腾完我总结了一套防止 VMware 卸载残留的预防思路简单有效分享出来给各位参考。第一不要在控制面板的“卸载”界面里点完卸载就完事。卸载过程中如果弹窗询问“是否同时移除所有虚拟网络适配器”务必选择“是”不要想留着下次用。虚拟网卡驱动残留是重装失败的头号原因。第二卸载完成后立即重启系统并在重启后手动检查一遍C:\Program Files (x86)\VMware和C:\ProgramData\VMware这两个目录。如果目录还在或还有残留文件先删掉再安装新版本。这一步能拦截掉 80% 的潜在问题。第三如果没有特殊理由建议优先使用官方维护的 VMware Workstation 最新版本而不是停留在 12 这种老版本。老版本在 win10 上本身就有各种兼容性问题比如网络桥接在部分 win10 版本上无法绑定、图形加速在几款显卡驱动上花屏等。重装失败这类问题在新版本上很少出现。第四如果你是一个喜欢折腾系统的人经常在不同虚拟机软件之间切换那建议每次卸载完 VMware 后用 系统自带的“磁盘清理”工具清一次临时文件再顺手删掉C:\Windows\Temp及C:\Users\你的用户名\AppData\Local\Temp下的 MSI 日志文件。这些日志文件虽然不会直接导致安装失败但会占用磁盘空间而且对后续排查错误产生干扰。第五有条件的话在第一次安装 VMware 成功后用 Windows 自带的系统还原功能创建一个还原点。以后如果再遇到卸载后重装失败的情况直接还原到这个还原点省去手动清理注册表的时间。5. 从这次修复中总结出的几点经验把整个修复过程复盘一遍有几点经验值得写下来不一定在任何一篇官方文档里看得见。第一Windows Installer 的日志文件是排查安装失败的头号线索比搜索引擎管用得多。很多人遇到安装失败第一反应是搜索错误码但 MSI 的错误码粒度太粗同一个 1603 可能对应完全不同的原因。正确做法是先拿到日志文件搜索日志里的具体错误明细再针对性地排查。第二注册表清理工具在 MSI 残留面前基本无能为力。这不是说那些工具没用而是它们的清理逻辑基于“失效软件”的扫描模型对于“虽然已卸载但注册信息还在”的半残留状态它们不会判断为失效因此不会处理。手动清理虽然麻烦但针对性强。第三清理 VMware 注册表时最容易漏掉的是Installer\UserData下的 GUID 残留而不是SOFTWARE\VMware, Inc.。很多教程只写了后者导致用户清理完之后仍然失败。上面的步骤里我把UserData单列出来的原因就在这里。第四安全模式是清理注册表和文件残留的利器。很多文件在普通模式下被占用无法删除重启进安全模式后几秒钟就删掉了。如果你的机器在清理时频繁遇到“文件被占用”或“拒绝访问”直接在安全模式里完成全部清理操作效率最高。第五装完 VMware 后如果发现虚拟网络有问题先检查服务状态再检查虚拟网卡最后才考虑防火墙和杀毒软件拦截。虚拟网络服务启动失败和注册表残留有很强的关系如果服务没起来多半是你之前清理注册表时把服务对应的事件日志项也删多了触发了服务的自我保护机制这时候去服务里手动把启动类型改成“自动”即可。这次处理完花了差不多四十分钟搞定比第一次在 win10 上手动清理另一款虚拟化软件时少了一半时间。希望这篇文章能帮你少走一段弯路。如果你在清理过程中遇到和我这里描述不太一样的报错多拍几张日志截图按 2.1 的操作把 MSI 日志翻出来基本都能顺藤摸瓜找到根因。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进