Visual Studio使用Hyper-V来运行Windows Phone模拟器。 Hyper-V也与VMware不兼容,因为Hyper-V以永久虚拟化模式启动Windows,而VMware在运行时也需要VT-x。
Hyper-V可以作为Windows角色安装和卸载。这还将激活和停用永久Windows虚拟化并允许VMware运行。但当然,Visual Studio模拟器停止工作。
可以将Hyper-V配置为活动或非活动状态,而无需卸载Windows角色。这涉及使用bcdedit.exe编辑引导配置。执行此更改后,需要重新启动才能实际应用配置并使用或不使用Hyper-V。设置后可以读取此BCD设置,但不知道系统是否已重新启动以实际应用它。因此,此设置仅指示重新启动后将发生的情况,而不是虚拟化当前是否正在运行。
有些人说你可以看看Windows服务" vmms"。不幸的是,这没有帮助,因为该服务与Hyper-V角色一起安装,并且无论虚拟化是否真正活跃,它始终在运行。 WMI信息也没有帮助,因为它总是说Hyper-V会运行,即使它不是。
显然必须有一种方法来确定虚拟化的实际当前状态,因为VMware会在您尝试启动64位计算机时告诉您。
那怎么能在代码中完成呢?特别是从.NET应用程序?管理员权限已经可用,因为bcdedit.exe也需要它。
这是否需要本机汇编程序代码,是否可以以某种方式从C#/ .NET运行它?
更新
我制作了一个简单的工具,将一键式GUI放在bcdedit程序上:Hyper-V Switch。您可以尝试一下,亲眼看看您是否发现任何可靠的Hyper-V指示器实际上正在执行,而不仅仅是配置为在下次启动时运行。启用或禁用Hyper-V但保持应用程序处于打开状态以防止重新启动。然后 Hyper-V Switch 将告诉您配置的状态,而不是实际的状态。
最后,我想将此状态测试合并到应用程序中,以便每个人都可以使用它。