是否可以使用 C# 检查是否启用了硬件虚拟化?

Posted

技术标签:

【中文标题】是否可以使用 C# 检查是否启用了硬件虚拟化?【英文标题】:Is it possible using C# to check if hardware virtualization enabled? 【发布时间】:2014-07-19 14:41:24 【问题描述】:

找不到答案,所以我想我自己问问。

使用 C#,如何检查 CPU 是否启用了硬件虚拟化?例如,Hyper-V。它不在Win32_Processor 类中,我连接到MSVM_ComputerSystem 的尝试完全失败了。一直告诉我有一个无效的命名空间。

代码如下。

ManagementObjectSearcher vm = new ManagementObjectSearcher(@"\\.\root\virtualization", "select * from MSVM_Computersystem");
ManagementObjectCollection vmCollection = vm.Get();
foreach (ManagementObject mo in vmCollection)

     cpuVirtual = mo["EnabledState"].ToString();

【问题讨论】:

【参考方案1】:

如果你枚举 Win32_Processor 类中的所有属性,你会看到一个名为“VirtualizationFirmwareEnabled”的属性,我想你说的是这个属性。

正如您在this link 中看到的,要检查某些机器处理器是否可以在 Hyper-V 上运行,它们将 VirtualizationFirmwareEnabled" 与其他属性结合使用:

我编写了这个简单的片段来遍历所有 win32_processor 类值:

ManagementClass managClass = new ManagementClass("win32_processor");
ManagementObjectCollection managCollec = managClass.GetInstances();

foreach (ManagementObject managObj in managCollec)

   foreach (var prop in managObj.Properties)
   
       Console.WriteLine("Property Name: 0 Value: 1",prop.Name,prop.Value);
                  


Console.ReadKey();

【讨论】:

我运行了该代码,但在我的控制台中似乎没有一个 VirtualizationFirmwareEnabled 值。将其插入我的 foreach 循环会导致异常 Not found 您使用的是什么处理器?可能不存在属性 VirtualizationFirmwareEnabled 或存在但值为 false 表示不支持虚拟化。当我在 VStudio 2013 中使用 .NET Framework 4.5 运行代码 sn-p 时,我看到了该属性,我的机器具有带有虚拟化支持的 Intel Core i7,实际上我正在使用 OSX 主机运行 Windows Guess。 我正在运行 i5-3570K,Hyper-V 当前已禁用。该命令在 PowerShell 中也显示为负数。 能否在固件 Bios 或 UEFI 上启用 Hyper-V 并检查代码是否显示属性? 经过研究,我发现了这个code,在这里你会看到我们给你的代码,只适用于Windows 8或更高版本。这就是原因,因为您在 Win32_Processor 类中看不到该属性,如果您查看代码会很有用。【参考方案2】:

仅供参考,“根/虚拟化”命名空间不再存在,从 Windows / Hyper-V Server 2012 R2(也可能是 Windows 8.1)开始。另外,可能是因为您编写了“root\virtualization”(尝试使用正斜杠)。无论如何,您应该使用“root/virtualization/v2”。

【讨论】:

以上是关于是否可以使用 C# 检查是否启用了硬件虚拟化?的主要内容,如果未能解决你的问题,请参考以下文章

域需要 KVM,但它不可用。检查主机 BIOS 中是不是启用了虚拟化

安卓13进光速虚拟机显示异常

如何查看虚拟网卡

虚拟化故障处理思路分享

虚拟机里安装ubuntu一直有一个白杠跳转

虚拟机开了克隆,为啥上了游戏老是掉线?