Не удалось получить фабрику класса COM для компонента с CLSID {XXXX} из-за следующей ошибки: 80040154 - PullRequest
269 голосов
/ 24 июня 2009

Я разработал службу Windows, используя C # .NET для создания отчета в формате PDF. Для создания PDF-файла я использую стороннюю DLL. Приложение работает на моей платформе Windows XP. Когда я развернул службу в Windows Server 2008 64-битной версии, я получил эту ошибку:

Получение фабрики класса COM для компонент с CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} не удалось из-за следующей ошибки: 80040154.

Я зарегистрировал DLL с помощью команды regsvr32. Я смог увидеть этот CLSID в реестре. Но проблема сохраняется.

В чем может быть проблема?

Ответы [ 17 ]

3 голосов
/ 19 марта 2011

Изменить на x86:

  1. Создайте проект установки для вашего решения.
  2. После создания перейдите в Solution Explorer, щелкните правой кнопкой мыши проект установки.
    • Нажмите Диспетчер конфигурации.
    • Щелкните по списку «Active Solution Platform» и выберите «New» (если x86 не отображается)
    • Выберите из первого комбо x86, затем нажмите OK.
    • Перестройте проект установки, затем перестройте весь проект.
3 голосов
/ 19 мая 2011

Если вы работаете с веб-сайтом, вы также можете попытаться настроить пул приложений на отключение 32-разрядных приложений (в дополнительных настройках пула).

1 голос
/ 02 февраля 2017

В моем личном случае проблема была исправлена ​​при поиске идентификатора класса в реестре Windows на компьютере разработчика (поскольку проблема возникла на клиентском ПК). Это действие будет помещено в компонент COM, который вызывает проблему: библиотека x86, на которую ссылается мой проект .NET, которая не была зарегистрирована как OCX / COM для программы установки или программы обновления.

Привет

1 голос
/ 27 мая 2015

Для тех, кто использует VSTO, проблемой для меня было отсутствие ссылки на сборку office. Это также может появиться, если вы пытаетесь создать экземпляр определенных объектов VSTO вручную.

0 голосов
/ 21 февраля 2019

В моем случае я создаю MS Office файл, такой как word или excel, я запускаю Win+R и выполняю dcomcnfg в конфигурации DCOM, помимо выбора элемента имени, связанного с OFFICE (например, имя содержит Excel или Word или Office) и Open the properties, select Identity tab and select the interactive user. как этот ответ ,

В моем сообщении об ошибке отображается CLSID {000209FF-0000-0000-C000-000000000046}, поэтому я должен попытаться найти этот конкретный CLSID в DCOM Config, и он действительно завершается, и я выбираю его и следую в том же шаге устанавливаю interactive user, затем он работает.

0 голосов
/ 30 ноября 2018

Я обнаружил, что моя проблема связана с фактической регистрацией DLL.

Сначала запустите «Regedit.exe» из командной строки CMD (я поднял уровень безопасности до администратора, «на всякий случай»), затем выполните поиск в реестре (нажав «Изменить / Найти» в меню RegEdit или нажав Ctrl + Ж) для CLSID, показанного в сообщении об ошибке, которое вы получили относительно фабрики класса COM. Мой CLSID был 29AB7A12-B531-450E-8F7A-EA94C2F3C05F. Когда этот ключ найден, выберите вложенный ключ "InProcServer2" под этим узлом Hive и определите имя файла проблемной DLL в правом кадре Regedit. показывает под "По умолчанию". Если этот файл находится в "C: \ Windows \ SysWow64" (например, C: \ Windows \ SysWow64 \ Redemption.dll ") тогда важно, чтобы вы использовали файл «C: \ Windows \ SysWow64 \ RegSvr32.exe», чтобы зарегистрировать эту DLL из командной строки, а НЕ файл «C: \ Windows \ System32 \ RegSvr32.exe» по умолчанию. Поэтому я запустил приглашение CMD (под управлением административного уровня (на случай, если этот уровень необходим)) и набрал в командной строке (в случае моей DLL): C: \ Windows \ SysWow64 \ RegSvr32.exe c: \ Windows \ SysWow64 \ Redemption.dll нажмите клавишу ВВОД. Закройте командное окно (через «Выход», затем Перезагрузите ваш компьютер (всегда используйте перезагрузку вместо «Закрыть вниз», а затем запустить, так как (как ни странно) при перезагрузке выполните полное выключение и перезагрузите все, тогда как «Завершение работы») и Power-Up перезагружает сохраненный кэш драйверов и других значений (которые могут быть неисправны). Всякий раз, когда вы регистрируете DLL в будущем, не забудьте использовать SysWow64 «RegSvr32.exe» для любой DLL, хранящейся в папке C: \ Windows \ SysWow64, и эта проблема c (если она вызвана неправильной регистрацией) не должна повториться.

0 голосов
/ 19 сентября 2015

Моя проблема заключалась в том, что в моем проекте References была неправильная версия MS Sync FrameWork (1.0) После обновления до версии 2.1 ошибка исчезла, и жизнь снова наладилась.

...