VMWare 15.0.2 VM 与 Device/Credential Guard 不兼容的解决过程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/HermitSun/article/details/101521804

为了用React Native,装上Android Studio和AVD之后,启动VMWare,结果提示VM 与 Device/Credential Guard 不兼容……猜测是AVD的某些设置影响了虚拟化。但是总不能为了保住VMWare就放弃Android吧,所以还是得寻找解决方案。

首先按照网上的说法,处理Device/Credential Guard的问题:

  1. 在“设置”里找到“内核隔离”并关闭

  2. 在“Windows功能”里关闭Hyper-V

  3. 在组策略里禁用“基于虚拟化的安全设置”

    (本地计算机策略 > 计算机配置 > 管理模板>系统 > Device Guard)

  4. 进入PowerShell(管理员),彻底关闭Hyper-V:

    bcdedit /set hypervisorlaunchtype off
    
  5. 重启电脑

重启之后,VMWare是能打开了,但是虚拟机一启动就会卡死,并且无法关闭,只能重启电脑。后来在网上找到了一个解决方案:

删除虚拟机的根目录下的*.lck文件,然后重启电脑。

说起来很诡异,但是确实有效。可是,为什么呢?

后来看到一个解释,说得蛮有道理的:

我们打开任务管理器,会发现vmware.exe和vmware-vmx.exe两个重要的进程。其中vmware-vmx.exe是主程序,虚拟机在这个进程下运行;VMware.exe是外壳程序,负责显示vmware-vmx.exe中运行的虚拟系统并解释传送各种命令和操作,是我们最常用的 VMware用户界面,该程序可重入即同时打开多个。

因为VMware Workstation是可重入的,为了避免同一个虚拟系统同时被多个VMware.exe打开操作,造成错误,所以每个VMware打开相应的虚拟机选项卡时都会先检查该虚拟机根目录下是否有*.vmx.lck的文件夹并验证其中的文件,如果该文件中包含合法生成的uuid(通用唯一识别码),那么将无法打开该虚拟机的选项卡.

如果没有相应的合法文件,就会在该虚拟机根目录下生成*.vmx.lck文件夹,并在该文件夹下生成一个包含uuid的*.lck文件,打开虚拟机选项卡,并从主程序接收显示信息。

这个*.lck文件可以用记事本编辑。里面是uuid={一串字母数字},uuid是通用唯一识别码 (Universally Unique Identifier),它的特点就是唯一性。为的是同时只有一个vmware.exe能接受主程序的显示,并对虚拟机操作。lck是lock的缩写,即对请求资源的锁定。

VMware 虚拟机在运行时会在相应的虚拟机目录下生成三个文件*.vmx.lck,.vmdk.lck,.vmem.lck文件夹,里面包含以*.lck命名的文件。 其中的*.vmx.lck是伴随vmware.exe中选项卡的打开时生成的;另外两个是关于虚拟磁盘和内存的使用的,它们伴随着虚拟系统的运行而产生。如果关闭VMware.exe让虚拟机在后台运行,*.vmx.lck文件夹会消失另外两个则不会。

在VMware.exe中打开某个虚拟机选项卡时,会短暂生成*.vmsd.lck的文件夹,估计这个是在最初传送数据(send data)时生成的,防止多个外壳程序同时请求打开虚拟机。

所以,为什么会看到这几个文件?这几个文件是VMWare用来标识虚拟机正在运行的,如果正常退出,这几个文件应该消失;但因为没有正常退出,这几个文件就一直留着,给VMWare一种虚拟机正在运行的错觉。删掉就好了。

参考资料

  1. win10系统1903版 VMware Workstation 与 Device/Credential Guard 不兼容.在禁用 Device/Credenti
  2. VMware系统启动假死,一直处于“繁忙”状态
  3. VMware虚拟机断电或强制退出后无法启动解决

猜你喜欢

转载自blog.csdn.net/HermitSun/article/details/101521804