【问题标题】:wmi: Property is returning nullwmi:属性返回 null
【发布时间】:2012-04-29 07:38:06
【问题描述】:

我正在尝试构建一个简单的 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"]的调用顺便正确返回了驱动器号。

【问题讨论】:

  • DriveType 5 用于 CD。如果您确定您的意思不是“从 Win32_LogicalDisk WHERE DriveType != 5 中选择 *”>
  • 天哪,你们很快!两者都对!抱歉,应该归咎于我对 Google 的滥用。谢谢。

标签: c# wmi wmi-query


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2019-07-17
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多