是否可以使用 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# 检查是否启用了硬件虚拟化?的主要内容,如果未能解决你的问题,请参考以下文章