wmi: свойство возвращается null

Я пытаюсь создать простое приложение Windows Forms, которое может запрашивать возможности компьютера пользователя с помощью 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"] всегда возвращает ноль. Я подозреваю, что это может быть связано с разрешениями учетной записи, с которой выполняется вызов WMI, поэтому мое включение ConnectionOptions код, который предоставлен Google.

Диспетчер задач сообщает мне, что программа работает от имени моей учетной записи, которая является администратором, поэтому я немного озадачен тем, почему вызовы WMI не возвращают все данные.

Я прав, что звонок managementObject["FreeSpace"] возвращает ноль из-за разрешений? Или это может быть что-то совсем другое?

О, звонок в managementObject["name"] кстати, правильно возвращает букву диска.

1 ответ

Решение

Хорошо, ответ плохой, Google. Запрос фильтруется на DriveType = 5, который является приводом CD-ROM. Я думал, что я фильтрую для жестких дисков.

Часть свободного пространства возвращала ноль, потому что в диске не было диска.

Другие вопросы по тегам