2014-02-13 2 views
1

Я получаю некоторые ошибки, которые я действительно не понимаю. Я надеюсь, что кто-то может мне помочь.WMI Query - System.Management.ManagementException

Первое исключение, которое я получаю, это System.Management.ManagementException на 'in' в моем foreach.

Следующий - это индекс за пределами диапазона на «устройстве». Меня действительно смущает то, что это сработало, когда оно не принимало переданные в него переменные. Когда я пересчитал его, чтобы сделать его более гибким, он сломался.

Может кто-нибудь указать мне в правильном направлении?

собственности и win32Class передаются в из основной программы в этот класс

Вот что и как я передаю

static void Main(string[] args) 
    { 
     GatherSystemINfoWMI.GetPropertyValue("name", "Win32_CDROMDrive"); 
    } 

// Вот что я передаю его

 public static void GetPropertyValue(string property, string win32Class) 
    { 

     ManagementObjectSearcher searcher = 
     new ManagementObjectSearcher("Select " + property + "from " + win32Class); 
     foreach (ManagementObject device in searcher.Get()) 
     { 
      Console.WriteLine("Name: {0} ", 
          device.GetPropertyValue("Name")); 
      Console.WriteLine(device.GetPropertyValue(property) + "\n"); 
      Console.ReadKey(); 
     } 
+0

Не совсем уверен в этом вопросе, что вы конкретно имеете, но я могу видеть, что ваша конкатенация это неверно. В частности, где у вас есть «Выбрать» + свойство + «от» + win32Class. Попробуйте изменить «from» на «from». Теперь у вас есть это свойство, которое приведет к объединению свойства непосредственно в строковый литерал без пробела, разделяющего два. –

+0

Разрыв линии там мешает тому, что вы собираетесь, но я понял ваш смысл. Большое спасибо за Вашу помощь. –

ответ

0

Добавить место в «от» часть вашего номера:

Заменить

"Select " + property + "from " + win32Class 

с

"Select " + property + " from " + win32Class 

Или лучше использовать string.Format():

string query = string.Format("Select {0} from {1}", property, win32Class); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 
Смежные вопросы