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

是否可以使用C#检查是否启用了硬件虚拟化?,c#,namespaces,virtualization,visual-studio-express,C#,Namespaces,Virtualization,Visual Studio Express,找不到答案,所以我想我自问 使用C#,如何检查CPU是否启用了硬件虚拟化?例如,Hyper-V。它不在Win32\u处理器类中,我尝试连接到MSVM\u计算机系统时遇到了完全失败。一直告诉我有一个无效的命名空间 代码如下 ManagementObjectSearcher vm = new ManagementObjectSearcher(@"\\.\root\virtualization", "select * from MSVM_Computersystem"); ManagementObje

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

使用C#,如何检查CPU是否启用了硬件虚拟化?例如,Hyper-V。它不在
Win32\u处理器
类中,我尝试连接到
MSVM\u计算机系统
时遇到了完全失败。一直告诉我有一个无效的命名空间

代码如下

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

我编写了这个简单的sniped来迭代所有win32_处理器类值:

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();

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

我运行了该代码,但在我的控制台中似乎没有任何虚拟化固件启用值。将其插入my
foreach
循环会导致异常找不到您正在使用的处理器?可能不存在属性VirtualizationFirmwareEnabled或存在但值为false表示不支持虚拟化。当我在VStudio 2013中使用.NET Framework 4.5运行代码段时,我看到了这样一个属性:我的机器具有支持虚拟化的intel Core i7,事实上我正在使用OSX主机运行Windows Guess。我正在运行当前禁用Hyper-V的i5-3570K。该命令在PowerShell中也显示为负数。您能否在固件BIOS或UEFI上启用Hyper-V,并检查代码是否显示属性?经过研究,我发现了这一点,在这里您将看到我们向您介绍的代码,仅适用于Windows 8或更高版本。这就是原因,因为您在Win32_Processor类中看不到该属性,如果您查看代码,该属性可能会很有用。