InvalidOperationException при попытке удалить общий ресурс - PullRequest
0 голосов
/ 10 января 2012

Я пытаюсь удалить общий ресурс, но он продолжает выдавать исключение InvalidOperationException в строке «InvokeMethod». Я новичок в 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 Ответ

1 голос
/ 10 января 2012

Перечислители начинаются с Current равным нулю. Сначала вы должны MoveNext ().

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

Оператор foreach языка C # (для каждого в Visual Basic) скрывает сложность перечислителей. Поэтому рекомендуется использовать foreach вместо непосредственного управления перечислителем.

Изначально перечислитель располагается перед первым элементом в коллекции. Метод Reset также возвращает перечислитель в это положение. В этой позиции вызов свойства Current вызывает исключение. Следовательно, вы должны вызвать метод MoveNext, чтобы перевести перечислитель к первому элементу коллекции перед чтением значения Current.

Обычно я просто закидываю свой цикл в цикл foreach, даже если знаю, что в коллекции будет только один элемент:

foreach(ManagementObject obj in result)
  obj.InvokeMethod("Delete", new object[] { });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...