Не удается создать экземпляр компонента COM в C # - ошибка 80070002

StackOverflow https://stackoverflow.com/questions/1008040

  •  06-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать экземпляр COM-объекта проигрывателя Windows Media на моем компьютере:

Guid mediaPlayerClassId = new Guid("47ac3c2f-7033-4d47-ae81-9c94e566c4cc");
Type mediaPlayerType = Type.GetTypeFromCLSID(mediaPlayerClassId);
Activator.CreateInstance(mediaPlayerType); // <-- this line throws

При выполнении этой последней строки я получаю следующую ошибку:

System.IO.FileNotFoundException was caught
  Message="Retrieving the COM class factory for component with CLSID {47AC3C2F-7033-4D47-AE81-9C94E566C4CC} failed due to the following error: 80070002."
  Source="mscorlib"
  StackTrace:
       at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
       at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
       at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
       at System.Activator.CreateInstance(Type type, Boolean nonPublic)
       at System.Activator.CreateInstance(Type type)
       at MyStuff.PreviewFile(String filePath) in F:\Trunk\PreviewHandlerHosting\PreviewHandlerHost.cs:line 60
  InnerException: 

Этот же код работает на других машинах разработчика и компьютерах конечного пользователя. По какой-то причине он не работает только на моей машине. В чем может быть причина?

Это было полезно?

Решение

80070002 - ошибка файла не найден.

Полагаю, на вашей машине отсутствует зависимость. Попробуйте запустить компонент com с помощью утилиты functions.exe, чтобы проверить, установлены ли все необходимые библиотеки.

Другие советы

Ну, 0x80070002 означает, что файл не найден, поэтому я бы проверил, существует ли на вашем компьютере библиотека DLL, указанная в регистрации COM,

При сбое пула приложений может произойти эта ошибка. Вы можете проверить свой код, если какая-либо функция или объектная инициализация повторяется с течением времени. Это может вызвать утечку памяти и, наконец, сбой пула приложений.

Дополнительная, возможно, полезная информация. Мы видели эту проблему в классическом веб-приложении asp, которое загружает компоненты .net. одно приложение было в порядке, другое - нет. Та же машина? Так что же дает? Мы не получили правильных ошибок при неудачной загрузке компонента com, просто номер ошибки 0x80070002.

В конце концов это было исправлено, просто установив пул приложений сломанного приложения таким же, как и рабочее приложение. Что-то в пуле приложений означало, что компонент не мог быть загружен должным образом, тот же идентификатор и т. Д. (Iis 6).

В реестре было несколько старых номеров версий для этого компонента, но regasm всегда делает это, это ужасно при очистке, нам даже пришлось написать небольшой инструмент для удаления их всех при перемещении между номерами версий на разработчики машин. Но в данном случае эти номера версий не были проблемой.

Вывод: звучит как проблема с разрешениями, но что я знаю ..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top