我正在尝试删除共享,但它一直在“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
答案 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[] { });