尝试删除共享时出现InvalidOperationException

时间:2012-01-10 16:22:11

标签: c# .net wmi

我正在尝试删除共享,但它一直在“InvokeMethod”行上抛出InvalidOperationException。我是WMI的新手,我不知道我的代码上是否遗漏了什么......你能帮帮我吗?

ManagementScope ms = new ManagementScope(@"\\localhost\root\cimv2");

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher(
        "Select * from Win32_Share where Name ='RanorexTests'");

ManagementObjectCollection result = searcher.Get();

((ManagementObject)result.GetEnumerator().Current).InvokeMethod(
    "Delete", new object[] { });

编辑(完整堆栈跟踪):

  

在   System.Management.ManagementObjectCollection.ManagementObjectEnumerator.get_Current()   在RanorexTests.CalculatorUnitTest.deleteShare()中   C:\ RanorexSolution \ RanorexTests \ RanorexTests \ FlashCalculator \ CalculatorUnitTest.cs:行   126

祝你好运, Mourasman

1 个答案:

答案 0 :(得分:1)

枚举器以Current为null开头。你必须首先使用MoveNext()。

来自http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx

  

C#语言的foreach语句(对于Visual Basic中的每个语句)隐藏了枚举器的复杂性。因此,建议使用foreach而不是直接操作枚举器。

     

最初,枚举数位于集合中的第一个元素之前。 Reset方法还将枚举器返回到此位置。在此位置,调用Current属性会引发异常。因此,在读取Current的值之前,必须调用MoveNext方法将枚举数推进到集合的第一个元素。

即使我知道集合中只有一个项目,我通常只会把我扔到foreach循环中:

foreach(ManagementObject obj in result)
  obj.InvokeMethod("Delete", new object[] { });