Как устранить сбой загрузки поставщика для запросов WMI?

Я использую WMI для сбора системной информации. Он отлично работает на каждой системе, на которой я его тестировал, но у меня есть один или два пользователя, которые сообщают о проблемах. Журналы отладки показывают, что код WMI выдает исключение «Ошибка загрузки поставщика». У меня не получилось воспроизвести проблему.

Пользователи убедились, что служба WMI работает в автоматическом режиме.

Вот исключение:

System.Management.ManagementException: Provider load failure 
   at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
   at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()

Любые мысли о том, как устранить неполадки и решить эту проблему?


person Chris Thompson    schedule 18.02.2009    source источник


Ответы (5)


Возможно, вы захотите убедиться, что все DLL правильно зарегистрированы (см. http://msdn.microsoft.com/en-us/library/bb961987.aspx).

person C. Ross    schedule 18.02.2009
comment
Несмотря на то, что он помечен как ответ, во многих случаях это не решение. Часто проблема возникает только при запросе экземпляров нескольких таблиц (например, Win32_NetworkAdapter: stackoverflow.com/questions/7403164/), и другие таблицы работают нормально. Это также происходит в .NET 2.0, в котором даже нет System.Management.Instrumentation.dll, упомянутого в ссылке этого ответа. Причиной этой ошибки в этих случаях, вероятно, является неисправная реализация стороннего драйвера, и вы ничего не можете с этим поделать. - person bitbonk; 14.09.2011

Одним из возможных способов отследить основную причину проблемы является использование WBEMTest инструмент, который, по словам MS Scripting Guys, является одним из самых простых способов

"Чтобы найти поставщика класса WMI..."

Сценаристы: Используйте PowerShell для устранения неполадок с ошибкой загрузки поставщика

Действия высокого уровня, характерные для Win32_NetworkAdapter, описаны в этом сетевом адаптере Win32_network "сбой загрузки поставщика". " сообщение Марка Волзака из infoSupport.

  • Нажмите «Пуск» >> «Выполнить» >> wbemtest.
  • нажмите «Подключить…», чтобы подключиться к пространству имен
  • выполнить запрос «Выбрать * из MSFT_WmiSelfEvent»
  • прокрутите вниз и отследите следующие события WMI
  • Просмотрите сведения о любом Msft_WmiProvider_InitializationOperationFailureEvent или Msft_WmiProvider_LoadOperationFailureEvent для DLL, вызывающей проблему.

Благодаря ошибке загрузки поставщика WMI пост в блоге Ричарда Сиддавея, который указал мне на этот инструмент и конкретную методологию.

person Joshua Drake    schedule 25.02.2013
comment
Действительно? Почему отрицательный голос? На самом деле я использовал эти шаги, чтобы исправить проблему с одной из наших систем разработки. - person Joshua Drake; 09.04.2013
comment
+1 за WBEMTest. Я всегда использовал PowerShell для отладки WMI, который работает достаточно хорошо, но WBEMTest разработан специально с учетом этого. - person ash; 07.10.2014

В операционных системах с контролем учетных записей пользователей отключите UAC.

В моем случае: ответ Росса не разрешился. Я мог загрузить некоторые провайдеры WMI (логический диск), но не другие (IIS). Инструменты проводника WMI (такие как PowerGui) покажут провайдера. Это предполагает, что политика безопасности может предотвратить загрузку провайдеров WMI. После отключения UAC все провайдеры WMI загрузились без ошибок.

Конечно, вы можете оставить UAC включенным. Я обновлю этот ответ, если найду нужные конкретные политики.

person Precipitous    schedule 02.03.2010
comment
Или просто запустите свой инструмент с повышенными правами (от имени администратора). Как ни странно, для локального доступа к провайдеру MicrosoftIISv2 требуется повышение прав, хотя вы можете без проблем получить к нему удаленный доступ... - person Jaykul; 20.01.2011

Итак, я знаю, что это старо, но у меня была точная проблема, описанная выше. Мне было очень трудно понять, поэтому я подумал, что отвечу в надежде, что это поможет кому-то еще.

Я пытался загрузить поставщика IIS WMI и получил ошибку «Ошибка загрузки поставщика». Я смог воспроизвести проблему, запустив WMI-запрос с помощью программы wbemtest.exe.

Я запустил procmon.exe, чтобы показать, что загружается (или не загружается в моем случае), и действительно, wmiprvse.exe загружал раздел реестра, говорящий, что inetsrv находится в каталоге C:\windows, что не существует на моей машине (C:\windows был заменен на c:\winnt)

Обновление ключа решило мою проблему, но важнее всего то, что у меня было чертовски много времени, чтобы понять, почему я получаю эту ошибку, и запуск procmon во время выполнения моего запроса WMI указал мне прямо на проблему. Надеюсь, это будет и для вас.

person Jeremy    schedule 06.08.2010

Вся регистрация WMI проводится в WMI (статические классы.

WMI CIM Studio (часть инструментов WMI от MS, IIRC) удобна для изучения этих классов (и, безусловно, проще, чем написание большого количества запросов).

person Richard    schedule 19.02.2009