【发布时间】:2012-04-04 21:38:01
【问题描述】:
我正在 Windows 8 消费者预览版中测试现有应用程序,它在启动时崩溃。日志文件表明它是在我对 CPU ID 和网卡详细信息进行一些验证的方法中。
为此,我正在调用
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if (cpuInfo.Length == 0)
{
// only return cpuInfo from first CPU
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
}
(请注意,此应用程序在 Windows 7 及更早版本上运行良好)。
然后我使用相同的语法连接到 Win32_NetworkAdapterConfiguration 并获取 IPEnabled、IPAddress[] 和 MACAddress 属性。
但是这里的某个地方崩溃了。
我已经尝试对此进行研究,发现以下Windows 8 server list of WMI classes and methods 和我正在使用的不在上面。但是,同一个站点也有一个Windows 7 WMI classes and methods 列表,而这些也不在其中! (即使它适用于 Windows 7 也没有问题)。
所以从外观上看,它是不受支持的。
ManagementClass 的 MSDN 指出方法 is still present in .NET 4.5。此外,this Microsoft resource 确实明确列出了 Win32_Processor 和 Win32_NetworkAdapterConfiguration,以及我需要的方法。
所以,从链接中,你可以看到我已经尝试对此进行研究,所以这是我试图解开这个谜团的最后一站。
我的应用程序最初是在 Visual Studio 2005 中创建的 .NET 2.0 解决方案。我已将 Visual Studio 2011 Beta 与最新的 SQL 2012 Express 一起安装到我的 Windows 8 Consumer Preview VM 中。我尝试将我的项目导入到这个 Visual Studio 中,但它没有加载它,告诉我它只支持 Metro 开发。因此,我无法在机器本身上调试此问题。
所以我的问题是这些类是否存在于 Windows 8 中?如果他们这样做了,那我做错了什么?如果他们不这样做,那么我需要找到一种方法来获取这些信息 - 但我想这是一个单独的问题 ;-)
【问题讨论】:
-
我不敢相信他们会删除它们,快速测试的方法;下载 WMICC 并使用它的 GUI 来查看它们是否被列出/你所期望的microsoft.com/download/en/…
-
旁注:Visual Studio 2011?有no such thing,甚至在测试版中也没有。目前有第 11 版测试版可用,但尚未公布最终产品名称。不过它很有可能被命名为 2012 年。
-
嗨,谢谢,我使用了 WMICC,它确实在那里!我认为虽然它可能有所帮助,因为它检索到的处理器 ID 是空白的。也许是因为我在虚拟机中运行?至于 VS 2011/11 的命名,我深表歉意 - 无论您在 www.microsoft.com/express 上获得什么,都适用于 Windows 8 ;-)
标签: c# winapi wmi windows-8 visual-studio-2012