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 устраняет проблему.