2014-02-13 140 views
1

我收到一些我不太了解的错误。我希望有人能帮助我。WMI查询 - System.Management.ManagementException

我得到的第一个例外是'in'中的System.Management.ManagementException

下一个是'设备'上的索引超出范围。真正让我困惑的是,当它不接受传递给它的变量时,它就起作用了。当我将它考虑在内以使它更加灵活时,它就打破了。

有人能指出我正确的方向吗?

财产和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

不完全确信,你具体遇到的问题,但我可以看到你的字符串连接是不正确的。具体来说,你有“选择”+属性+“from”+ win32Class。尝试更改“从”到“从”。你现在拥有它的方式将导致属性被直接连接到字符串字面上,而没有将两者分开的空间。 –

+0

在那里的线路突破阻碍了你要去的地方,但我明白了你的意思。非常感谢您的帮助。 –

回答

0

在“”中添加空格“”部分的sql:

更换

"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);