Ошибка при вызове конструктора (COMOбъект) класс не зарегистрирован

когда я пытаюсь создать экземпляр класса COM, он выдает исключение как

класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

пожалуйста, предложите, как я могу решить это?

c#vb.net

19 ответов

похоже, что программа или процесс, который вы пытаетесь инициализировать, не установлен на вашем компьютере, имеет поврежденную установку или должен быть зарегистрирован.

либо установите его, восстановите (через программы добавления/удаления), либо зарегистрируйте (через Regsvr32.исполняемый.)

вы не предоставили достаточно информации для нас, чтобы помочь вам больше, чем этот.

35автор: Jay Riggs

вам нужно убедиться, что все ваши сборки компилируются для правильной архитектуры. Попробуйте изменить архитектуру x86, если переустановка com-компонента не работает.

50автор: Andy Fiedler

также обратите внимание, что контекст класса при инициализации может создать это исключение. Если у вас есть объект, который закодирован как INPROC_SERVER, но вы пытаетесь CoCreateInstance как CLSCTX_LOCAL_SERVER, вы также получите эту ошибку.

необходимо убедиться, что объект зарегистрирован и CoCreateInstance создает экземпляр с правильным контекстом класса.

9автор: Andrew Keith

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

9автор: Matsen75

моя проблема и решение

У меня есть 32-битная сторонняя dll, которую я установил в машине 2008 R2, которая является 64-битной.

У меня есть служба wcf, созданная в .net 4.5 framework, которая вызывает 32-разрядную стороннюю dll для процесса. Теперь у меня есть свойство build, установленное для целевого «любого» процессора и развернутого на 64-битной машине.

когда я попытался вызвать службу wcf, получил ошибку » 80040154 класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG»

теперь я использовал ProcMon.exe для отслеживания проблемы реестра com и определил, что процесс ищет запись реестра в HKLMCLSID и HKCRCLSID, где нет записи.

известно, что Microsoft не будет зарегистрировать 32-битный com-компоненты на путиидентификатор CLSID реестра HKLM, раздел hkcr и CLSIDв 64-разрядной машине, а он помещает запись в HKLMWow6432NodeCLSID и разделе hkcrWow6432Nodeидентификатор CLSID пути.

теперь конфликт является 64-битным процессом попытка вызвать 32-разрядный процесс в 64-разрядной машине, которая будет искать запись реестра в HKLMCLSID, HKCRCLSID. Решение заключается в том, что мы должны заставить 64-битный процесс посмотреть запись реестра на HKLMWow6432NodeCLSID и HKCRWow6432NodeCLSID.

Это может быть достигнуто путем настройки свойств проекта службы wcf для целевой машины » X86 «вместо » любой».

после развертывания версии X86 на сервере 2008 R2 возникла проблема «Система.BadImageFormatException: не удалось загрузить файл или сборку»

решение этого badimageformatexception устанавливает «Enable32bitApplications» в «True» в свойствах IIS Apppool для правильного apppool.

9автор: Waheed

Я получил его для работы, включив 32-битные приложения в расширенных настройках пула приложений. Щелкните правой кнопкой мыши пул приложений и выберите Дополнительные настройки — включить 32-разрядные приложения. Это может кому-то помочь.

4автор: Yoky

путем регистрации класса ( в частности, его CLSID) — см., например,здесь.

3автор: Alex Martelli

в моем случае

my platform является x64

the Dll library(sdk) и redistributable package является x64

так

  1. в обозревателе решений navigate to your project

  2. открыть Properties

  3. change the Platform target from AnyCPU to x64

c9377e5030d0418007cbc643b1b0feda.png

2автор: Basheer AL-MOMANI

способ, которым я решил эту проблему, был зарегистрировать COM via regsvr32.

убедитесь, что COM, который вы вызываете, зарегистрирован.

мое приложение использовало xceedcry.dll и я не регистрировал его. Как только я зарегистрировал его, приложение сработало нормально.

2автор: CesarB

для меня мне пришлось создать 64-битную конфигурацию сборки.

1автор: joey

Я столкнулся с этой проблемой, вызвав сборку .Net из клиента C++ через COM. Оказывается, одна из сборок, от которой зависела сборка .Net, не найдена. Некоторое время я боролся, пытаясь понять, что не так с 1-й сборкой, но на самом деле это была одна из зависимостей 1-й сборки. Я получил две разные ошибки при вызове CoCreateInstance () из клиента C++. Первый был: REGDB_E_CLASSNOTREG класс не зарегистрирован И вторая попытка было: 0x80131040 : определение манифеста сборки расположены не соответствует ссылке на сборку.

поэтому проверьте, что ссылки вашей сборки присутствуют. Я обнаружил это, просмотрев 1-ю сборку с помощью dotPeek и заметив, что одна из его ссылок отсутствует. Размещение правильной версии зависимости в папке разрешило обе ошибки.

автор: Sean B

Я компилировал таргетинг моего приложения любой CPU и главная проблема оказалась в том, что adobe reader был установлен старше v10.x нужно обновлениеv11.x, это способ, как я могу решить эту проблему.

автор: Anjan Kant

моим решением было изменить « Включить 32-Разрядные Приложения » True в расширенных настройках относительного пула приложений в IIS.

автор: Adrian

я столкнулся с такой же проблемой через COM-класс, т. е. класс не зарегистрирован исключение во время выполнения. Для меня я смог решить, перейдя в приложение.конфигурационный файл и измените элементы «startup» и «supportedRuntime» на что-то вроде:

<configuration><startup></configuration>

вы можете прочитать больше о деталях здесь http://stackoverflow.com/questions/1604663/

и здесь https://msdn.microsoft.com/en-us/library/w4atty68 (v=против 110).aspx

I следует отметить, что я запускаю Visual Studio 2017. Целевой процессор = x86 Внедрить тип взаимодействия = true (в окне свойств)

автор: Joseph Mawer

в моем случае класс был зарегистрирован правильно и встроен в любой CPU / 64 бит режим.

но включить 32-разрядные приложения свойства пул приложений IIS приложения, которое использует класс, было установлено в True.

класс не найден из-за несоответствия архитектуры между конфигурацией пула приложений и фактическим зарегистрированным классом.

задание включить 32-разрядные приложения to False Исправлена проблема. a2f63d9ff1026e6eba787838467e3ec3.png

автор: Bhupinderjit Dhanoa

У меня была такая же проблема с использованием MapWinGis. Я нашел решение, работая над visual studio 2015 windows forms proyect, просто щелкните правой кнопкой мыши на proyect — > properties — > Build, установите конфигурацию для всех конфигураций и в conbobox «platform target» установите его на x64.

автор: Deydra A

перейдите в каталог .Net framework и зарегистрируйте их соответствующую dll с помощью команду regsvr32.exe путь dll пробел.

автор: Muhammad Saeed

Я столкнулся с той же проблемой. После некоторых исследований я нашел исправление для меня, и это может быть полезно. Проблема связана не только с повторной установкой по моему наблюдению, она также зависит от разрешений доступа.

Шаг 1: ремонт конкретного COM-объекта.

Шаг 2: службы компонентов > компьютеры > Мой компьютер > Конфигурация DCOM > выберите COM-объект > щелкните правой кнопкой мыши > свойства > вкладка Безопасность > права доступа > выберите Настроить > нажмите Изменить > выберите IIS_USER (если не существует создать с полными правами) и дать полный доступ и нажмите кнопку ОК.

перейдите на вкладку Identity > вы можете выбрать «интерактивный пользователь» или «этот пользователь» > нажмите Apply и OK. Если вы выберете «этот пользователь», мы должны предоставить привилегированного администратора этому серверу

Шаг 3: Откройте Диспетчер IIS > перезапустите пулы приложений.

Примечание: при необходимости перезагрузите сервер

автор: Pavan Kumar Vempati

здесь найдите решение, запустите mmc -32 tool (не dcomcfg)

в 64-битной системе с 32-битным офисом попробуйте следующее:

Start Run mmc -32 File Add Remove Snap-in Component Services Add OK Console Root Component Services Computers My Computer DCOM Config Microsoft Excel Application 

950b8731037e41b46bc5f252f19dab00.jpg

-1автор: Martín Martínez

Если фоновый процесс COM-соединения завершается с ошибкой:

<Обработка.ОбменДаннымиXML.МодульОбъекта(15947)>: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Invalid class string

Нужно зарегистрировать библиотеку ComConnector comcntr.dll из каталога программы.

. Перед этим нужно отключить службу агента сервера 1С:Предприятия и все программы, использующие эту DLL .

В 32-битной версии сервера проблема решилась бы командой: regsvr32 «C:Program Files (x86)1cv88.3.5.1119incomcntr.dll»

44da790b6e9a136a5ff2e703f25fff38.png

При удачном выполнении Вы увидите:

85066c5598a5fd69d338c8931e005c47.png

Если команда регистрации не помогла, то нужно предварительно удалить регистрацию библиотеки comcntr.dll, запустив ту же команду вызова regsvr32 с ключом /u

Если и это не помогло, попробуйте переустановить платформу 1С в режиме Исправить и отметьте COM соединение

Содержание

Блог на коленке. IT и прочее

83.COMConnector класс не зарегистрирован

</h2>

Случается, что при попытке подключения к информационной базе через com-соединение возникает ошибка при вызове конструктора (COMОбъект): «Класс не зарегистрирован» или «Недопустимая строка с указанием класса».

Первым делом необходимо зарегистрировать DLL в системе

При установке популярной программы бухгалтерского учёта «1С» (версии 8.3) или обновления программы с версии 8.2 на 8.3, а также запуска какой-либо соответствующей процедуры, юзер может получить сообщение «Ошибка 2147221164 0x80040154 класс не зарегистрирован», вызванное отсутствием регистрации класса. Данная ошибка может быть вызвана несоответствием версий 1С на сервере и клиентском ПК, а также отсутствием регистрации необходимого класса COMConnector (dll-библиотека comcntr.dll) в ОС Виндовс. В данном материале я расскажу о сути указанной дисфункции, а также поясню, как от неё избавиться.

Читайте также:  cvt с уменьшенным миганием что это

1-2.jpgСтандартное сообщение о возникшей дисфункции

Особенности возникшей дисфункции

Разбираемая мной ошибка 2147221164 0x80040154 в 1C обычно связана с соединением баз данных по COM-объекту, и может иметь несколько причин:

  • Несовпадение конфигурации 1С на сервере и локальном ПК (к примеру, на сервере используется версия 8.3, а на локальном ПК – версия 8.1);
  • Невозможность прямого обращения 64-битной 1С к 32-битному файлу comcntr.dll;
  • В ОС Виндовс не зарегистрирован вышеупомянутый файл comcntr.dll.

3.pngРазбираем устранение проблемы в 1C

Разберёмся со способами решения возникшей проблемы. Их два.

Способ №1. Регистрируем необходимые библиотеки

Если на ПК 32-битная ОС, то будет необходимо запустить командную строку с админ. правами, и там набрать:

Вместо XXXXX будет нужно ввести номер вашей версии 1С, к примеру, это может быть 8.3.10.2252 или иная (пройдите по указанному пути, и просмотрите номер установленной у вас версии). После этого регистрация упомянутого dll будет завершена, и «Ошибка 2147221164 0x80040154 класс не зарегистрирован» должна исчезнуть.

5.jpgУведомление об успешной регистрации dll

Если на ПК 64-битная ОС, то данная строка должна выглядеть так:

Где ХХХХХ – номер вашей версии 1С

Способ №2. Создаём компоненты для исправления ошибки 2147221164 0x80040154

</ul>

  1. Запустите консоль «Службы компонентов» (перейдите в «Панель управления», затем в «Администрирование», и здесь кликните на «Службы компонентов»);Здесь выберите «Мой компьютер» («Службы компонентов», затем «Компьютеры», и «Мой компьютер»). Наведите курсор на «Приложения COM+», нажмите на правую клавишу мыши, выберите «Создать» — «Приложение»;

2.png

Заключение

Исправление проблем с незарегистрированными классами в 1С обычно решается с помощью двух способов, обозначенных мной выше. Наибольшую эффективность показал второй из перечисленных способов, потому рекомендую воспользоваться алгоритмом его реализации для исправления ошибки 2147221164 0x80040154 на вашем PC.

Первая статья в новом 2021 году будет посвящена программе 1С. Это связанна с тем что данное ПО очень распространено. Так как альтернативы пока что нет. К типовым конфигурация претензий практически нет, в них не появляются ошибки, при обновлении, переносе и других манипуляциях. Что нельзя сказать о самопысных конфигурациях или измененных типовых. Как правило занимаются этим программисты не высокого уровня, так как час разработки профессионала стоить достаточно дорого. В результате конечный пользователь получаем огромные проблемы которые возникают после каких либо манипуляций либо с базой или клиентами. Сегодня поговорим об одной интересной ошибки которая появляется при попытке распечатать какой либо документ «Ошибка при вызове конструктора (COMOбъект) класс не зарегистрирован».

Использование COMOбъектов в 1С это прошлый век, сейчас уже ни кто так не пишет. Раньше с его помощью реализовали печать документов. Они выгружались в OpenLibre Office и от туда уже печатались.

Появиться такая ошибка может после

1 Обновления платформы

2 Переустановки ОС и 1С

3 Обновление конфигурации

4 Проблем с офисными пакетами

5 и т.д.

Это самые распространенные.

У меня есть еще несколько статей в которых я рассказывал как можно исправить различные ошибки 1С рекомендую прочитать.

Ошибка при отправке запроса на сервер

При появлении ошибки в 1С нет кнопки подробнее

Как настроить сортировку в отчете

Как сохранить обработку (как внешнюю)

Как указать версию платформы

Как посмотреть изменения в конфигурации

Три способа избавиться от ошибки «Ошибка при вызове конструктора…»

И так после каких либо манипуляций с 1С у вас стала появляться ошибка.

Ошибка при вызове конструктора (COMOбъект): -2147221164(0x80040154) класс не зарегистрирован

Первый способ

Самое простое это переустановить офисные пакеты OpenLibre, так же как вариант если у вас стоял Open поставить Libre и на оборот. Это нужно для того чтобы обновить специальный компонент.

Второй способ

Попробовать зарегистрировать самостоятельно, для этого запускаем командную строку от имени администратора, переходим в каталог введя команду.

cd windowssyswow64

И регистрируем

regsvr32 «C:Program Files (x86)1cv88.3.16.18.14comcntr.dll»

3.png

Кстати данную манипуляцию нужно проводить на сервере.

Третий способ

Установить 32 битную версию клиента 1С, можно даже поверх х64. В итоге у вас появиться два ярлычка для запуска, один для х32 второй х64.

4.png

Версию можно указать и в ярлыке запуска 1С.

5.png

Можно еще попробовать самостоятельно создать COM + , но лично из своего опыта могу сказать это не помогает. Самый действенный вариант это установка х32 клиента. Так как компонента которая необходимо работает только с х32.

Так же проблема может быть непосредственно в самом коде.

Используемые источники:

  • https://askdev.ru/q/kak-reshit-klass-isklyucheniya-com-ne-zaregistrirovan-isklyuchenie-iz-hresult-0x80040154-regdb-e-classnotreg-37801/
  • https://window-10.ru/1s-klass-ne-zaregistrirovan-com/
  • https://sibsisadmin.ru/oshibka-pri-vyzove-konstruktora-1c/

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации