早期,Hyper-V 和 VMWare Workstation/Player 不能共存。如果在启用了 Hyper-V 的 Windows 中强行运行 VMWare Workstation/Player,它会提示“VMWare Workstation/Player and Hyper-V 不兼容,请在运行 VMWare Workstation/Player 之前移除 Hyper-V 角色。”(VMWare Workstation/Player and Hyper-V are not compatible. Remove the Hyper-V role from the system before running VMWare Workstation/Player)
传统的解决方法
以管理员身份打开命令提示符,运行如下两条命令:
bcdedit /copy {default} /d "name"bcdedit /set {ID-Number} HyperVisorLaunchType OFF
命令详解:
第一条命令中name
参数支持自定义。
如果第一条命令成功的话,就会有一串很长的 ID 出现,复制它,第二条命令中需要用到,即 ID-Number
参数,要把它复制到{}
这个符号中间。
比如我执行的命令:
bcdedit /copy {default} /d "Windows Server 2012 Without Hyper-V"bcdedit /set {ce54aea7-ad33-11e9-9022-f8edf66e1542} HyperVisorLaunchType OFF
执行成功后可以在cmd里面执行 msconfig
验证是否成功创建启动项,并将引导菜单超时时间修改大一些。
然后重启系统,在选择启动项界面选择"Windows Server 2012 Without Hyper-V"就能运行 VMWare 了。
这样比装双系统方便些,而且这两个引导进去的系统是一样的,只是,有一>个只能运行 VMWare,另一个只能运行 Hyper-V。
最简单的做法
直接升级vmware,最新版vmware已经能和Haper-v兼容了,从 VMWare Workstation/Player 15.5.5 版本开始,VMWare 公司重构了 VMM机制,将 VMM 机制调整为在用户级别运行[6],不再直接访问硬件,而是通过利用微软的 Windows Hypervisor Platform (WHP) 的 API 来运行。从而彻底解决了 VMWare Workstation/Player 与 Hyper-V 的冲突问题。
不兼容原因
Hyper-V 是一个type 1 hypervisor,当在 Windows 中启用 Hyper-V 时,Windows 系统在硬件底层与 Windows 应用层之间插入了一层 Hyper-V,而原来的 Windows 应用层则变成了一个运行在 Hyper-V 上的虚拟机。
而 VMWare Workstation/Player 使用一种被称为虚拟机监视器(Virtual Machine Monitor,VMM)的机制,直接访问 CPU 内建的虚拟化功能,因此,它们本身不能在虚拟机环境中运行,换句话说,不支持嵌套虚拟化(nested virtualization)。
当 Windows 启用 Hyper-V 时,原来的 Windows 变成了虚拟机环境,偏偏 VMWare Workstation/Player 不能在虚拟机环境中运行,因此,运行VMWare Workstation/Player 时会报错。