wmi:属性返回null

时间:2012-04-17 22:28:09

标签: c# wmi wmi-query

我正在尝试构建一个简单的Windows窗体应用程序,它可以使用WMI(从硬盘驱动器开始)查询用户计算机的功能。

到目前为止,我已经做到了这一点(HardDriveCheckResult是我自己的班级):

ConnectionOptions wmiConnOpts = new ConnectionOptions();
wmiConnOpts.Impersonation = ImpersonationLevel.Impersonate;
wmiConnOpts.Authentication = AuthenticationLevel.Default;
wmiConnOpts.EnablePrivileges = true;
ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(@"select * from Win32_LogicalDisk WHERE DriveType = 5");
managementObjectSearcher.Scope.Options = wmiConnOpts;
List<HardDriveCheckResult> hardDriveCheckResults = new List<HardDriveCheckResult>();

foreach (ManagementObject managementObject in managementObjectSearcher.Get())
{
    string hardDriveName = managementObject["name"].ToString();
    object objFreeSpace = managementObject["FreeSpace"];
    double freeSpace = objFreeSpace == null ? 0d : (double)objFreeSpace;
    ... additional code not relevant
}

我遇到的问题是managementObject["FreeSpace"]始终返回null。我怀疑这可能与使用WMI调用的帐户的权限有关,因此我包含了来自Google的ConnectionOptions代码。

任务管理器告诉我程序作为我的帐户运行,这是一个管理员,所以我有点难过为什么WMI调用不会返回所有数据。

我是否更正,因为权限,对managementObject["FreeSpace"]的调用返回null?或者它可能是完全不同的东西?

哦,对managementObject["name"]的调用正确地返回了驱动器号。

1 个答案:

答案 0 :(得分:0)

好的,答案是糟糕的谷歌搜索。该查询在DriveType = 5上过滤,即CD-ROM驱动器。我以为我是在过滤硬盘。

可用空间部分返回null,因为驱动器中没有磁盘。