ManagementObjectSearcher抛出"未找到"强制财产的例外情况

时间:2014-11-29 02:10:27

标签: c# wmi wmi-query

我在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版本失败的机器上正常工作。

0 个答案:

没有答案