ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VMware Workstation报错:Hyper-V与Device/Credential Guard关闭指南

VMware Workstation报错:Hyper-V与Device/Credential Guard关闭指南 碰到那个提示的人十有八九都是同一个表情——昨天VMware Workstation还用得好好的今天开机就给我整这出您的主机不满足在启用 Hyper-V 或 Device/Credential Guard 的情况下运行 VMware Workstation。点确定之后虚拟机直接罢工连电源键都是灰的。有人一气之下重装了三次Win10装完VMware照样报错后来才发现根本不是系统坏了是Win10在后台偷偷把虚拟化相关的安全功能拉起来了。这篇文章就把这个问题拆开揉碎讲清楚Hyper-V和Device/Credential Guard到底是怎么影响VMware的有哪些办法能彻底关掉以及关不干净的时候该怎么一步步排查。不管你是刚碰VMware的新手还是已经被这个报错折磨几天了照着下面的顺序走一遍大概率能救回来。1. 问题本质为什么Hyper-V和VMware Workstation水火不容1.1 报错的完整表达和触发场景VMware Workstation这个报错的完整弹窗信息比标题里那段还长大意是检测到主机启用了Hyper-V或Device/Credential Guard然后拒绝了虚拟机的启动。注意它说的是不满足运行条件不是虚拟机文件损坏也不是许可证失效说明VMware检测到的是底层虚拟化资源被占用了。触发这个报错的场景我整理过最常见的有这么几类之前为了用WSL2按照微软官方教程勾选了虚拟机平台和Windows虚拟机监控程序平台装完之后WSL2能用但VMware开始闹脾气。为了跑Docker Desktop装的时候它会在Windows功能里把Hyper-V相关组件一并打开之后VMware就再也起不来虚拟机。电脑是品牌机预装的Win10厂商在系统镜像里默认开启了内核隔离和内存完整性用户自己根本没碰过任何虚拟化设置。系统自己更新到Win10 21H2以上版本部分新安装或重置过的系统默认把基于虚拟化的安全VBS开着。试过Windows沙盒用完忘了关。很多人觉得我又没主动装Hyper-V凭什么报这个错问题就出在Win10把Hypervisor虚拟机监控程序当成了很多安全功能的底座你不装Hyper-V不代表Hypervisor不在后台启动。1.2 Hyper-V为什么会跑到你机器上Hyper-V是微软自家的虚拟机方案以一个Windows可选功能的形式存在。它和VMware Workstation这种桌面级虚拟机软件最大的区别在于Hyper-V是Type 1虚拟机监控程序跑起来之后直接坐在硬件和Windows之间CPU的硬件虚拟化扩展Intel VT-x或AMD-V会被它独占。VMware Workstation是Type 2虚拟机它依赖的操作是让Windows宿主系统能直接调用硬件虚拟化指令。一旦Hypervisor已经先占住那一层VMware再去申请就会碰壁于是干脆弹窗拒绝运行。这个逻辑用大白话讲就是Hypervisor像一个先上车的乘客把车门堵住了VMware只能站在车外干瞪眼。有个很容易被忽略的点Hyper-V未必是你手动开的功能。WSL2、Windows沙盒、Windows安全中心里的内核隔离甚至某些品牌机预装的优化软件都会在系统后台把Hyper-V的底层组件带起来。你打开启用或关闭Windows功能一看咦Hyper-V那个勾是灰的或者根本没勾但Hypervisor已经悄悄在跑了。这也是为什么单纯在功能列表里取消勾选往往解决不了问题。1.3 Device/Credential Guard更隐蔽的隐形开关Device Guard和Credential Guard这对组合微软给它的定位是基于虚拟化的安全VBSVirtualization-Based Security。具体干的事是把Windows的代码完整性校验、LSASS进程隔离这些敏感功能放进一个用Hypervisor隔离出来的安全内存区域里运行。听起来确实很安全但它有一个前提条件必须先把Hypervisor拉起来。也就是说哪怕你在启用或关闭Windows功能里一个虚拟机相关的勾都没打只要VBS开着Hypervisor照样会随系统启动。这就是很多人踩坑的根源——关了半天Hyper-V发现Device/Credential Guard还在后台撑腰VMware照样不认账。还有一个概念叫内存完整性Memory Integrity在Win10安全中心里显示为内核隔离下的一个开关底层就是基于Hypervisor的代码完整性检查HVCI。这个东西在近几年的Win10版本里越来越普及新装机或者重置系统后经常默认开启。它也是导致VMware和Hyper-V不兼容的大户。所以你遇到的报错表面上写着Hyper-V或Device/Credential Guard实际上一张完整的排查清单还要把VBS、HVCI、内核隔离、内存完整性都算进去。2. 第一阶段先关掉能看到的Hyper-V2.1 关闭Windows功能里的Hyper-V全家桶先从最直观的开关下手。按WinR输入optionalfeatures回车打开启用或关闭Windows功能对话框。在这个列表里需要检查的项目不止Hyper-V一项我的习惯是全部过一遍Hyper-V如果勾选了取消。虚拟机平台Virtual Machine Platform取消。Windows虚拟机监控程序平台Windows Hypervisor Platform取消。Windows沙盒Windows Sandbox如果勾选了取消。适用于Linux的Windows子系统如果不用WSL建议一并取消。点确定后系统会进入配置界面提示重启就重启。这个操作的本质是移除Hyper-V的用户态组件也就是Hyper-V管理器、虚拟机监控程序服务、网络虚拟化服务这些对普通用户可见的部分。但注意它未必能干掉Hypervisor本身。很多文章写到这里就结束了实际操作下来你会发现问题远远没完。2.2 禁用三个Hyper-V后台服务重启之后如果你仍然怀疑Hyper-V残留可以打开服务管理器WinR输入services.msc按H键定位到Hyper-V开头的服务。比较常见的几个Hyper-V Host Compute Servicevmms虚拟机的核心管理服务。Hyper-V Virtual Machine Managementvmcompute虚拟机计算服务。Hyper-V Networking Management Service虚拟网络管理服务。Hyper-V Data Exchange Service、Hyper-V Guest Service Interface、Hyper-V Remote Desktop Virtualization Virtual Machine这些属于辅助服务一般随着主功能关闭也会消失但偶尔会有残留。操作方式很简单双击服务启动类型改成禁用如果当前状态是正在运行先点停止然后确定。这里有个经验之谈单纯禁用服务对解决VMware报错的作用非常有限。因为Hypervisor的启动时机比这些服务早得多是Windows引导阶段就决定的事。服务禁用只能防止Hyper-V相关组件被唤醒真正决定Hypervisor是否加载的是下一章要讲的引导项。2.3 已经关了但报错仍在这才是常态如果你按照前面两步操作完满心欢喜打开VMware大概率还是会看到同一个报错。别慌这不是你操作错了而是问题的核心还没动到。从Win10 1607版本开始Microsoft把Hypervisor的启动独立成了一个引导项叫hypervisorlaunchtype。只要这个值不是offWindows在开机时就会尝试把Hypervisor加载进内存。而且这个引导项的开关和启用或关闭Windows功能里的勾选是两套逻辑功能列表里没勾Hyper-V不代表引导项会自动变off反过来引导项开着的状态下即使你看到的Windows功能列表干干净净Hypervisor照样在跑。这也是为什么网上很多教程会说关Hyper-V要用命令而不是只教你勾取消。走到这一步CMD窗口该上场了。3. 第二阶段用命令行彻底断掉Hypervisor3.1 bcdedit关闭hypervisorlaunchtype这是整个关闭流程里最关键的一步。用管理员身份打开命令提示符右键开始菜单选择终端(管理员)或命令提示符(管理员)执行bcdedit /set hypervisorlaunchtype off看到操作成功完成的提示后重启电脑。重启后再看VMware报错通常已经消失。如果之后想恢复Hyper-V或者你还要用WSL2、Docker Desktop把off改回auto即可bcdedit /set hypervisorlaunchtype auto想确认当前值可以用bcdedit /enum {current}在输出信息里找到hypervisorlaunchtype这一行看到Off就是已经关闭Auto就是还在开。我自己的习惯是改完命令后顺手执行一次查看命令确认真的写进去了避免重启之后才发现没生效。这里要提醒一句bcdedit操作的是系统引导配置数据改错有进不去系统的风险。虽然hypervisorlaunchtype这个项非常安全但无论如何操作前把重要资料备份一下总没错。3.2 DISM把Hyper-V组件连根拔掉如果你已经确定以后完全不会再用Hyper-V也不想让它再占用任何系统资源可以用DISM把Hyper-V组件整体卸载掉。管理员CMD里执行dism.exe /Online /Disable-Feature /FeatureName:Microsoft-Hyper-V-All /NoRestart这个命令会一次性把Hyper-V的所有功能组件标记为禁用包括平台、管理工具、PowerShell模块等。加上/NoRestart参数是不想它立刻重启你可以等其他配置都改完再一次性重启。不过说实话DISM这一步对于解决VMware报错来说不是必须的。因为bcdedit把hypervisorlaunchtype设成off之后Hypervisor已经不加载了VMware就能正常工作。DISM更大的意义在于清理磁盘空间、减少系统服务驻留、让启用或关闭Windows功能里不再出现Hyper-V的影子。如果你有洁癖或者实在搞不清到底系统里还有多少Hyper-V残留可以执行一次。3.3 两条验证命令看懂当前状态关闭工作做没做到位不能靠感觉要看输出。除了前面说的bcdedit /enum {current}系统里还有两个自带工具可以验证第一条是systeminfo。管理员CMD执行systeminfo在输出末尾找到Hyper-V 要求这一段。正常情况下应该显示已检测到虚拟机监控程序。将不显示 Hyper-V 所需的功能。或者类似信息。还有一种情况是直接提示找不到Hyper-V说明组件已经被彻底移除。同时留意基于虚拟化的安全这一行如果显示正在运行说明VBS还在生效需要进入第四阶段的处理。第二条是msinfo32。直接在运行框里输入msinfo32打开系统信息在系统摘要右侧找基于虚拟化的安全性这一项。如果显示未启用恭喜你最麻烦的那部分已经处理完了如果显示已启用且后面的括号里写着未运行说明策略开了但Hypervisor没在跑这种情况VMware也能正常工作。4. 第三阶段收拾Device/Credential Guard这套隐藏BOSS4.1 组策略关闭基于虚拟化的安全前面提到Device Guard和Credential Guard底层靠VBS支撑所以要治本就得把VBS关掉。Win10专业版、企业版、教育版可以用组策略编辑器操作。WinR输入gpedit.msc回车然后依次展开计算机配置 → 管理模板 → 系统 → Device Guard右侧找到打开基于虚拟化的安全双击打开改成已禁用确定。这一步的作用是告诉Windows不要再启动任何基于虚拟化的安全功能。改完同样需要重启。注意Win10家庭版没有gpedit.msc这个工具双击运行会提示找不到。家庭版用户直接跳过这一节用下一节的注册表方法即可。另外如果你打开组策略后根本没看到Device Guard这个文件夹说明系统组件缺失或版本精简过也走注册表路线。4.2 注册表彻底干掉Device Guard和Credential Guard注册表是最后的手段也是覆盖版本最全的手段。WinR输入regedit回车依次检查以下三个位置。位置一Device Guard的VBS总开关。路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard右侧找EnableVirtualizationBasedSecurity这个DWORD32位值把数值数据改成0。如果没有这个值右键新建 → DWORD32位值命名成EnableVirtualizationBasedSecurity数值填0。位置二内核隔离/HVCI的内存完整性开关。路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity右侧找Enabled这个DWORD值改成0。同样没有就新建。位置三Credential Guard的LSASS隔离开关。路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa右侧找LsaCfgFlags这个DWORD值改成0。没有就新建。这三个地方改完重启系统VBS相关的几大件基本就全关了。我建议在改注册表之前右键对应的键选择导出把原始状态备份成一个.reg文件万一要恢复双击导入就回去了。4.3 Windows安全中心的内存完整性别忘了关注册表改完之后还有一个入口容易被忽略Win10自带的安全中心。打开Windows安全中心 → 设备安全性 → 内核隔离 → 内存完整性。如果这个开关是开着的把它关掉。内存完整性就是HVCI在用户界面层的开关和注册表里那个HypervisorEnforcedCodeIntegrity的Enabled值是对应的。如果你在4.2里已经把注册表值改成0这里通常会显示已关闭但反过来如果只在这里关了开关注册表里的值不一定同步变成0。所以实操时我会两头都检查一遍确保状态一致。Win10 21H2之后的版本很多OEM预装系统或重置后的系统内存完整性默认是开启的。这也是为什么有人全新安装完系统刚装好VMware就报错因为根子就在这。4.4 LTSC这类特殊版本没得选怎么办Win10 LTSC 2021这个版本比较特殊。它是企业长期服务版系统精简掉了不少东西Windows安全中心里的设备安全性页面经常是空的没有内核隔离开关组策略里也可能没有Device Guard条目。遇到这种情况注册表那套方法就是唯一正路。直接按照4.2的三个路径手动建DWORD、改值然后执行一次bcdedit /set hypervisorlaunchtype off重启之后用msinfo32确认基于虚拟化的安全性变成未启用问题就解决了。顺带提一下Win11。如果你是Win11遇到类似的VMware报错思路完全一样Windows功能里关Hyper-V相关项bcdedit关hypervisorlaunchtype安全中心关内存完整性VBS用注册表或组策略关。Win11的内核隔离入口也在Windows安全中心里路径和Win10几乎一致。5. 组合拳实操全过程实测完整的关闭顺序5.1 一份从头到尾的可复制操作清单很多人看完前面的原理动手时容易乱。这里给一份我实测过多次的完整操作顺序按这个顺序来基本不会漏。第一步WinR运行optionalfeatures取消勾选Hyper-V、虚拟机平台、Windows虚拟机监控程序平台、Windows沙盒如果不需要确定后重启一次。第二步用管理员身份打开CMD依次执行bcdedit /set hypervisorlaunchtype off第三步如果确定以后不用Hyper-V再执行dism.exe /Online /Disable-Feature /FeatureName:Microsoft-Hyper-V-All /NoRestart第四步WinR运行gpedit.msc修改打开基于虚拟化的安全为已禁用仅Pro及以上版本。第五步WinR运行regedit把4.2节提到的三个注册表值全部改成0没有就新建。第六步打开Windows安全中心关掉内存完整性开关如果页面里有。第七步如果担心服务残留再进services.msc把Hyper-V相关服务禁用一遍。第八步重启电脑。第九步用systeminfo和msinfo32验证Hypervisor和VBS的状态。第十步打开VMware Workstation启动一台虚拟机测试。这套流程走完99%的报错都能解决。剩下的1%多半是BIOS里还有虚拟化安全选项在捣乱。5.2 重启后怎么验证VMware真的能跑了重启之后先别急着灌系统跑大业务按下面三步验证先用msinfo32确认基于虚拟化的安全性是未启用状态再用systeminfo看一眼Hyper-V要求段落确认没有虚拟机监控程序处于运行状态。这两个都过了基本就稳了。然后打开VMware Workstation随便选一台虚拟机点开启此虚拟机。如果之前卡在报错界面现在应该能正常走启动进度条。我习惯先启动一台轻量级的Linux虚拟机做快速验证能进桌面、响应流畅就算过了。最后在虚拟机里跑一个稍微吃CPU的任务比如系统更新或者编译一点小东西同时开着宿主机任务管理器观察CPU占用。如果宿主机CPU频率能正常提升虚拟机内部运行流畅说明硬件虚拟化资源已经完全归VMware调度。5.3 我踩过的坑最容易翻车的几个环节坑一只关了Windows功能里的Hyper-V没关hypervisorlaunchtype。这是最普遍的情况你以为关了实际上Hypervisor还在跑报错自然还在。坑二关掉了VBS之后Windows Hello、PIN码登录可能失效。这个在重启后会直接遇到提示由于此设备上的安全设置已更改请重新设置PIN。这不是故障是VBS关闭后的正常现象按提示重新设置一次就行。坑三Docker Desktop和WSL2会跟着一起瘫掉。这俩都依赖Hypervisorhypervisorlaunchtype设成off之后WSL2子系统起不来Docker也打不开。如果你日常要用这些要么用VMware Workstation 15.5.5以上版本配合Windows Hypervisor Platform共存运行要么就别关Hyper-V二选一。坑四某些主板BIOS里有与虚拟化安全相关的选项比如Intel的VT-d、Trusted Execution Technology或者一些品牌机特有的Virtualization Based Security选项。软件层面全关了但BIOS还强制开启会导致状态不确定。必要时候进BIOS把这些选项也关掉。坑五Windows大版本更新偶尔会把hypervisorlaunchtype悄悄改回auto。遇到过几次系统更新完VMware突然又报错一查bcdedit果然被改回去了。所以更新系统后如果VMware异常先把引导项检查一遍。6. 常见问题与排查技巧实录6.1 高频问题速查表把这些年遇到的典型情况整理成一张表方便你按症状快速定位症状可能原因优先处理方法关闭Windows功能后VMware仍然报错hypervisorlaunchtype还是autobcdedit /set hypervisorlaunchtype offmsinfo32显示基于虚拟化的安全性已启用VBS策略或注册表仍开启组策略禁用VBS注册表三件套改0安全中心里没有内存完整性选项LTSC/精简版系统界面缺失直接改注册表HypervisorEnforcedCodeIntegrity关完Hyper-V后WSL2/Docker无法使用两者依赖Hypervisor二选一或升级VMware用WHP共存公司电脑改了注册表重启又被改回来域策略强制下发VBS配置联系IT管理员别硬刚注册表虚拟机启动后宿主机CPU占用异常高Hypervisor残留VMware嵌套调度确认bcdedit为off重启后再测6.2 排查思路还是报错就往这几个方向查如果你把前面所有能关的都关了重启之后VMware依然报错按下面这个顺序继续深挖。第一步重新打开msinfo32看基于虚拟化的安全性这一行。如果还是已启用说明有东西强制拉起了VBS直接跳到注册表三个键值逐一确认一个都别漏。第二步用PowerShell执行Get-CimInstance -ClassName Win32_DeviceGuard看输出里的SecurityServicesRunning字段。如果里面有值说明VBS相关的安全服务在运行如果值是0或者空基本就是关了。第三步查看事件查看器。WinR输入eventvwr.msc展开Windows日志 → 系统过滤Hyper-V和Hypervisor关键字看有没有相关的错误或信息事件。有时候能直接看到是哪个组件触发了Hypervisor启动。第四步检查Windows功能列表重新打开optionalfeatures看看有没有什么不该勾的东西自己勾上了。尤其是Windows沙盒和虚拟机平台这两个经常被其他软件自动打开。第五步如果以上都查了还是没结果进BIOS清一次安全启动和虚拟化设置。办法是把Intel VT-x/AMD-V关闭保存重启进系统再关机进BIOS重新打开。这个操作本质是让CPU的虚拟化状态重置一遍偶尔能解决一些顽固残留。6.3 什么情况下其实不该关Hyper-V不是所有报错都适合用关闭Hyper-V来解决。如果你日常依赖这些东西关掉之前先想清楚WSL2。Linux子系统重度用户基本离不开它的第二代架构就是跑在Hypervisor上的。Docker Desktop。Windows版Docker Desktop默认用的是WSL2后端同样依赖Hypervisor。Windows 沙盒。一个临时桌面环境功能上和虚拟机没区别底层还是Hyper-V。一些SDK自带的模拟器比如某些嵌入式、移动开发环境会直接调用Hyper-V的API。如果你离不开这些又必须用VMware Workstation还有一条折中路升级到VMware Workstation 15.5.5以上版本然后在VMware里开启使用Windows Hypervisor Platform的兼容选项软件设置里可以勾选。这会让VMware跑在微软Hypervisor之上代价是性能和嵌套虚拟化能力打折但至少能启动虚拟机。我的个人建议是如果你主力是VMware同时WSL2只是偶尔用用那就关掉Hyper-VWSL2临时要用的时候再开回来虽然麻烦点但VMware的完整性能和兼容性都能保住。如果你每天WSL2和Docker不离手那不如把VMware的虚拟机迁移到Hyper-V里省得两边打架。最后再分享一个实测小技巧改完所有配置后不要急着关机走人先在CMD里跑一遍systeminfo确认Hyper-V要求那一段没有红色警告再去启动VMware。有一次我改完注册表忘了确认引导项结果重启后报错还在一查是bcdedit命令没以管理员身份运行根本没写进去。所以每一步做完都验证一下比最后一次性排查省事得多。
返回列表