2009-02-18 2 views
7

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

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

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

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

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

ответ

2

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

+3

Несмотря на то, что это отмечено как ответ, это не решение для многих случаев. Часто проблема возникает только при запросе экземпляров нескольких таблиц (например, 'Win32_NetworkAdapter': http://stackoverflow.com/questions/7403164/managementexception-provider-load-failure-error-when-accessing-win32-networkadap) и других столы работают нормально. Это также происходит на .NET 2.0, у которого даже нет * System.Management.Instrumentation.dll *, о котором говорится в ссылке этого ответа. Причиной этой ошибки в этих случаях является, вероятно, неисправная реализация сторонних драйверов, и вы ничего не можете с этим поделать. – bitbonk

1

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

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

2

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

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

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

+0

Или просто запустите свой инструмент («Как администратор»). Как ни странно, доступ к поставщику MicrosoftIISv2 локально требует повышения, хотя вы можете получить к нему доступ удаленно без проблем ... – Jaykul

2

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

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

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

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

3

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

«Для того, чтобы найти поставщик класса WMI. ..»

, сценаристы: Use PowerShell to Troubleshoot “Provider Load Failure”

высокий уровень особые шаги к Win32_NetworkAdapter описаны в этом Win32_network adapter "provider load failure" посту Марка Wolzak в infoSupp орт.

  • Нажмите Пуск >> Выполнить >> WBEMTEST
  • нажмите 'Connect ...' для подключения к пространству имен
  • выполнить запрос 'SELECT * FROM MSFT_WmiSelfEvent'
  • прокрутки вниз к нижней части и проследить следующие события WMI
  • Посмотрите на детали любого Msft_WmiProvider_InitializationOperationFailureEvent или Msft_WmiProvider_LoadOperationFailureEvent для библиотеки DLL, которая вызывает проблемы

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

+1

Действительно? Почему голос? Я действительно использовал эти шаги для решения проблемы с одной из наших систем разработки. –

+0

+1 для WBEMTest. Я всегда использовал PowerShell для отладки WMI, который работает достаточно хорошо, но WBEMTest специально разработан с учетом этого. – ash

Смежные вопросы