2013-03-14 3 views
2

Я пытаюсь заполнить несколько текстовых полей в форме окна, используя значения, хранящиеся в свойствах Win32_OperatingSystem. Я использую окна 7.Доступ к свойствам Win32_OperatingSystem

Ниже приведен код, я использую

ArrayList prName = new ArrayList(); 
     ArrayList prValue = new ArrayList(); 
     int i = 0; 
     ManagementClass msClassOS = new ManagementClass("Win32_OperatingSystem"); 
     msClassOS.Options.UseAmendedQualifiers = true; 
     PropertyDataCollection properties = msClassOS.Properties; 
     foreach (PropertyData property in properties) 
     { 
      prName.Add(property.Name); 
     } 

     foreach (PropertyData property in properties) 
     { 
      prValue.Add(new string[] { msClassOS.GetPropertyValue("Value").ToString() }); 
     } 

Ниже исключение я получаю -

System.Management.ManagementException: Not found 
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 
at System.Management.PropertyData.RefreshPropertyInfo() 
at System.Management.PropertyDataCollection.get_Item(String propertyName) 
at System.Management.ManagementBaseObject.GetPropertyValue(String propertyName) 
at NetworkMonitoringSoftware.Form1.tabControl1_Selected(Object sender, TabControlEventArgs e) in C:\Users\OWNER\Documents\Visual Studio 2010\Projects\NetworkMonitoringSoftware\NetworkMonitoringSoftware\Form1.cs:line 

Можете ли вы сказать мне, что исключение и как я могу его преодолеть?

Заранее спасибо.

+0

Когда я создаю свойство и писать, как - «собственность. «Запросы .NET со списком, содержащим значение, имя, квалификатор и т. Д. – user657592

+0

проверить мой ответ ниже – Arshad

ответ

4

вы можете попробовать ниже код:

using System; 
using System.Management; 
namespace WMISample 
{ 
    public class MyWMIQuery 
    { 
     public static void Main() 
     {    
      try 
      { 
       ManagementClass osClass = new ManagementClass("Win32_OperatingSystem"); 
       foreach (ManagementObject queryObj in osClass.GetInstances()) 
       { 
        foreach (PropertyData prop in queryObj.Properties) 
        { 
         //add these to your arraylist or dictionary 
         Console.WriteLine("{0}: {1}", prop.Name, prop.Value); 
        }      
       } 
      } 
      catch (ManagementException e) 
      { 
       //MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); 
      } 
     } 
    } 
} 
1

вы не используете свойство получить значение в цикле Еогеасп . Имейте в виду, что property.Value может быть пустым. property.Value - объект, который может быть строкой или массивом. Это выдержка из кода, который я сделал, что может помочь вам:

mo //ManagementObject 
    .Properties 
    .OfType<PropertyData>() 
    .ToList() 
    .ForEach(p => 
    { 
     String str = String.Empty; 
     if (p.Value != null) 
      if (p.Value.GetType().BaseType == typeof(Array)) // Value is a array, special string creation 
      { 
       Array list = (p.Value as Array); 
       foreach (object o in list) 
         str += o.ToString() + "-"; 
       if (list.Length > 0) 
         str = str.Substring(0, str.Length - 1); 
      } 
      else // value is already a string 
       str = p.Value.ToString(); 

     this.ListDuet 
      .Add(new Duet() 
      { 
       Key = Convert.ToString(p.Name), 
       Value = str 
      }); 
    }); 

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

Смежные вопросы