我在99%的机器上使用以下代码没有问题......
var ms = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem");
return (ms.Get()
.Cast<ManagementBaseObject>()
.Select(o => o["Model"])
.Cast<string>()
.Select(s => vmModels.Trim()
.Split(',').Contains(s, StringComparer.OrdinalIgnoreCase))).FirstOrDefault();
然而,在一小部分机器上,这是一个&#34; Not Found&#34;例外:
System.Management.ManagementException: Not found
at System.Management.ThreadDispatch.Start()
at System.Management.ManagementScope.Initialize()
at System.Management.ManagementObjectSearcher.Initialize()
at System.Management.ManagementObjectSearcher.Get()
....
所有计算机都在虚拟环境中运行相同的映像。该代码旨在通过使用Model属性确定VM的Model名称来确定计算机是否在VM中运行。
我不确定问题是暂时的还是持久的,因为我自己无法重新创建问题,而且只看到用户的报告。
操作系统是Windows 7 SP1,根据文档,Model属性是必需的:
http://msdn.microsoft.com/en-us/library/aa394102(v=vs.85).aspx
Model
Data type: string
Access type: Read-only
Product name that a manufacturer gives to a computer.
**This property must have a value.**
我对如何解决这个问题感到茫然。我需要知道这个属性的值,所以仅仅捕获异常并没有帮助。
WMI间歇性地无法解决任何已知问题吗? 为什么强制性财产不可用?
有关更可靠的方式查找此信息的任何建议吗?
修改
另一方面,我发现只有当应用程序与VMware ThinApp打包时才会发生这种情况。它工作正常,即使在大多数机器上都使用ThinApp,但非精简版本在Thinapped版本失败的机器上正常工作。