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. Я думал, что я фильтрую для жестких дисков.
Часть свободного пространства возвращала ноль, потому что в диске не было диска.