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

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

使用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(); } 

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

正如您在此链接中所看到的,要检查某些机器处理器是否可以在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(); 

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