WMI-запрос ничего не возвращает

Я делаю запрос с WMI для проверки конкретной буквы диска, если она не существует, то я хочу запустить метод, который будет создавать его с конкретными настройками. Теперь проблема, с которой я сталкиваюсь, заключается в том, что когда я отправляю тестовый запрос, чтобы проверить, существует ли буква диска, он возвращается пустым. Нет ошибок или исключений.

Как бы я справился с такой ситуацией?

Спасибо

ManagementObjectSearcher searcher =
                      new ManagementObjectSearcher("root\\cimv2",
                      @"SELECT * FROM Win32_Volume Where DriveLetter = '" + DriveLetter + "'");
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    drives.CurrentDriveLetter = queryObj["DriveLetter"] == null ? "null" : queryObj["DriveLetter"].ToString();
                    drives.CurrentDriveSize = queryObj["Capacity"] == null ? "null" : queryObj["Capacity"].ToString();
                    drives.CurrentDriveName = queryObj["Label"] == null ? "null" : queryObj["Label"].ToString();


                }

1 ответ

После ваших комментариев вам нужно только определить, возвращена ли коллекция ManagementObjectSearcher.Get Метод имеет элементы. Для этого вы можете использовать Count имущество.

Попробуйте этот пример кода

using System;
using System.Collections.Generic;
using System.Management;
using System.Text;

namespace GetWMI_Info
{
    class Program
    {


        static void Main(string[] args)
        {
            try
            {
                ManagementScope Scope;                
                Scope = new ManagementScope(String.Format("\\\\{0}\\root\\CIMV2", "."), null);
                Scope.Connect();
                ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_Volume Where DriveLetter='X:' ");
                ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);
                if (Searcher.Get().Count==0)                
                {
                    Console.WriteLine("Do something, when the collection is empty.");                
                }
                else
                foreach (ManagementObject WmiObject in Searcher.Get())
                {
                    Console.WriteLine("{0} {1}","Name",WmiObject["Name"]);// String

                }
            }
            catch (Exception e)
            {
                Console.WriteLine(String.Format("Exception {0} Trace {1}",e.Message,e.StackTrace));
            }
            Console.WriteLine("Press Enter to exit");
            Console.Read();
        }
    }
}
Другие вопросы по тегам