System.Runtime.InteropServices.COMException(0x80040154):

Я получаю исключение в проекте С#:

System.Runtime.InteropServices.COMException(0x80040154): Извлечение COM-класса factory для компонента с CLSID {877AA945-1CB2-411C-ACD7-C70B1F9E2E32} завершилось ошибкой из-за следующей ошибки: 80040154.

Что это значит?

Ответ 1

Это означает, что класс id 877AA945-1CB2-411C-ACD7-C70B1F9E2E32 не находится в реестре.

Вы можете проверить это, открыв файл regedit.exe, просмотрев HKEY_CLASSES_ROOT\CLSID\{877AA945-1CB2-411C-ACD7-C70B1F9E2E32}. Если вы используете 32-битное приложение на 64-битной ОС, найдите HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{877AA945-1CB2-411C-ACD7-C70B1F9E2E32}

Если он есть, это может быть какая-то другая проблема, но, вероятно, отсутствует. Чтобы решить эту проблему, вы обычно запускаете установщик, который распространяет этот COM-объект. Если у вас его нет, и вы знаете, что dll реализует объект, вы можете запустить regsvr32.exe(или regasm.exe для управляемой dll).

Ответ 2

Я запускаю несколько автоматических тестов в Selenium и имею такую ​​же проблему. Проблема была решена путем переключения "Архитектура процессора по умолчанию" на x86 в тестовых настройках.

Ответ 3

В моем случае класс был зарегистрирован правильно.

Но свойство Включить 32-разрядные приложения в пуле приложений IIS для приложения, использующего класс, было установлено как True. Он не нашел его, потому что приложение было создано в любом режиме с процессором /64 бит.

Настройка Включить 32-разрядные приложения до False устраняет проблему.