Вопрос: Как решить класс исключения COM Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))? 0X80040154 класс не зарегистрирован


Класс не зарегистрирован — что делать — Rusadmin

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

Ошибка «2147221164 (0x80040154): Класс не зарегистрирован»

Содержание статьи:

Когда появляется ошибка 2147221164

Ошибка «2147221164 (0x80040154): Класс не зарегистрирован» появляется из-за конфликта версий 1С, которые в данный момент устанавливают между собой соединение. Разберем подробнее. Информационные БД 1С производят обмен данных при помощи СОМ-соединения. И, если, например, платформа 1С:Предприятие конфигурации 8.3 пытается установить связь с 1С версии 8.1, то на этом этапе при попытке подключения к СОМ-серверу и выскакивает данная ошибка.

Для начала определим, что у сервера 1С есть несколько версий:

  1. 32-битная 8.1 (х86).
  2. 64-битные 8.2 и 8.3 (х64).

Неполадки появляются на самом сервере с БД. Корень проблемы в том, что версии 1С архитектуры х64 не могут напрямую обратиться к 32-битной библиотеке comcntr.dll. В этом случае соединение происходит при помощи приложений СОМ+, способных взаимодействовать с библиотеками х86.

Читайте также: Неверный формат хранилища данных 1C 8.3 как исправить.

Справляемся с проблемой

Заканчиваем с теорией и переходим к практике – пробуем исправить ошибку «2147221164 (0x80040154): Класс не зарегистрирован».

Регистрируем библиотеку comcntr.dll

Ошибка может проявиться, если не зарегистрирована библиотека comcntr.dll. Решаем ее следующим образом. Вызываем строку «Выполнить» (кликнув ПКМ по кнопке «Пуск») и вводим regsvr32.exe «C:\Program Files(86)\1cv82\8.3.XX.XXXX\bin\comcntr.dll». Нажимаем ОК и, если все прошло корректно, то мы увидим сообщение об успешной регистрации библиотеки.

Создаем новое приложение СОМ+

Если библиотека зарегистрирована, но проблема остается, то кликаем ПКМ по кнопке «Пуск» (для ОС Windows 10) и вызываем «Панель управления». Затем входим в раздел «Система и безопасность», после чего переходим в «Администрирование». Появляется окно, в котором мы ищем строку «Службы компонентов» и открываем ее двойным щелчком ЛКМ. В новой консоли два раза кликаем ЛКМ по папке «Компьютер» и затем «Мой компьютер». Перед нами появляется список папок. ПКМ нажимаем на «Приложения СОМ+» и выбираем «Создать»→«Приложение».

Создаем новое COM+ приложение

Далее действуем следующим образом.

  1. В открывшемся Мастере нажимаем «Далее» и, когда в следующем окне нам предложат действие на выбор, кликаем «Создать новое приложение».
  2. В соответствующей строке присваиваем новому приложению имя, которое будет понятно не только нам, но и другим пользователям при дальнейшей работе, например 1CV8_ComConnect. Здесь же выбираем способ активации – «Серверное приложение».

    Вводим имя нового приложения 1CV8_ComConnect

  3. Теперь проводим процедуру удостоверения. В поле «Указанный пользователь» при помощи функции «Обзор» ищем учетную запись, под которым будем запускать сервер 1С версии 8.3. (Для примера обозначим ее как User1CV83). Ищем пользователя при помощи функции «Обзор»

    Конкретные шаги выбора пользователя

  4. Пропускаем процедуры, предлагаемые в следующих окнах, и нажимаем кнопку «Готово». Мастер закрывается.
  5. Возвращаемся в окно «Службы компонентов» и раскрываем ветку нашего только что созданного приложения. Разворачиваем узел «Роли», в которой кликаем на пункт CreatorOwner. ПКМ щелкаем по строке «Пользователи» и создаем нового пользователя. Снова выбираем ту учетную запись, под которой будет запускаться сервер 1С (это та самая User1CV83, о которой шла речь выше).
  6. Переходим в ветку приложения 1CV8_ComConnect и кликаем ПКМ на узел «Компоненты». Создаем новый компонент.
  7. В открывшемся Мастере делаем выбор пункта «Установка новых компонентов» и, когда появляется следующее окно, определяем нужную нам библиотеку dll (она находится по пути C:\Program Files (x86)\1cv81\bin\). Завершаем работу Мастера.
  8. У нас появился компонент 1CV81.ComConnect.1. Кликаем по нему ПКМ и открываем пункт «Свойства».  Во вкладке «Безопасность» находим перечень «Явно установленные для выделенных объектов роли» и ставим флажок напротив CreatorOwner.

Может быть вам полезно: Обнаружено нарушение целостности системы в 1C что делать.

Мы рассмотрели соединение с базой из программы 1С:Предприятие версии 8.3. Если планируется устанавливать коннект с БД 8.1 из версии 1С 8.2, то нужно добавить нового пользователя. Переходим по пути 1CV8_ComConnect → Роли → CreatorOwner → Пользователи и добавляем новую учетную запись User1CV82, под которой будет производиться запуск сервера 1С версии 8.2.

Если спокойно и внимательно следовать алгоритму, то исправление ошибки на деле окажется простым и быстрым. Благодаря вышеописанным действиям программа 1С версий 8.2 и 8.3 сможет обратиться за информацией к библиотеке comcntr.dll и ошибка «2147221164 (0x80040154): Класс не зарегистрирован» больше не возникнет.

Вконтакте

Facebook

Twitter

Google+

Одноклассники

 

Как вы оцените статью? Загрузка...

rusadmin.biz

c# - "Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))"

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

System.Runtime.InteropServices.COMException was unhandled Message="Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))" Source="System.Windows.Forms" ErrorCode=-2147221164 StackTrace: at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid) at System.Windows.Forms.AxHost.CreateWithoutLicense(Guid clsid) at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid) at System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid) at System.Windows.Forms.AxHost.CreateInstance() at System.Windows.Forms.AxHost.GetOcxCreate() at System.Windows.Forms.AxHost.TransitionUpTo(Int32 state) at System.Windows.Forms.AxHost.CreateHandle() at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at System.Windows.Forms.AxHost.EndInit() at bulk_lister.frm_edititem.InitializeComponent() in New Bulklister\new bulklister\bulk_lister\bulk_lister\frm_edititem.designer.cs:line 4248 at bulk_lister.frm_edititem..ctor(Int32 userid, Int32 intListingId) in New Bulklister\new bulklister\bulk_lister\bulk_lister\frm_edititem.cs:line 187 at bulk_lister.parent_form.funEditItem_fromrghtclktoolStrip_edititm() in New Bulklister\new bulklister\bulk_lister\bulk_lister\parent_form.cs:line 1313 at bulk_lister.parent_form.rghtclktoolStrip_edititm_Click(Object sender, EventArgs e) in New Bulklister\new bulklister\bulk_lister\bulk_lister\parent_form.cs:line 1233 at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e) at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e) at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e) at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met) at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met) at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ScrollableControl.WndProc(Message& m) at System.Windows.Forms.ToolStrip.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at bulk_lister.Program.Main() inNew Bulklister\new bulklister\bulk_lister\bulk_lister\Program.cs:line 17 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args) at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel) at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData) at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext) at System.Activator.CreateInstance(ActivationContext activationContext) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:

С его файлом Dll, который я использовал с моим приложением. Я попытался зарегистрировать этот файл dll с помощью regsvr32, но я не могу это сделать.

DLL:AxInterop.DHTMLEDLib.dll & Interop.DHTMLEDLib.dll

У кого-нибудь есть идея об этом исключении?

задан user1462809 18 июня '12 в 8:462012-06-18 08:46 источник поделиться

qaru.site

Как решить класс исключения COM Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))?

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

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

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

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

Либо установите его, отремонтируйте (с помощью «Установка и удаление программ»), либо зарегистрируйте его (через Regsvr32.exe).

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

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

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

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

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

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

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

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

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

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

Выяснилось, что Microsoft не будет регистрировать 32-разрядные ком-компоненты на пути HKLM \ CLSID, HKCR \ CLSID на 64-битной машине, а помещает запись в пути HKLM \ Wow6432Node \ CLSID и HKCR \ Wow6432Node \ CLSID.

Теперь конфликт - это 64-разрядный процесс, который пытается вызвать 32-битный процесс на 64-битной машине, который будет искать запись реестра в HKLM \ CLSID, HKCR \ CLSID. Решение состоит в том, что нам нужно заставить 64-битный процесс посмотреть запись реестра в HKLM \ Wow6432Node \ CLSID и HKCR \ Wow6432Node \ CLSID.

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

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

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

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

Регистрируя класс (в частности, его CLSID) - см., Например, Вот ,

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

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

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

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

в моем случае

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

programmerz.ru

windows-8.1 - aspnet_regiis -c 0x80040154 Класс не зарегистрирован

отказ

Во-первых, позвольте мне предисловие к этому вопросу, сказав, что я действительно не знаю, что должна делать команда aspnet_regiis -c. Документация aspnet_regiis немного расплывчата - в ней говорится, что сценарии клиентской стороны должны быть установлены, но они не дают никакой информации об этих сценариях.

В любом случае, когда я запускал его на более ранней ОС (Win 2003 Server), все, что он делал, это создание нескольких пустых каталогов (и на самом деле они не копировали в них какие-либо скрипты).

Этот ответ разрешает ошибку, которую вы видите, и позволяет Windows 8.x делать то же самое, что и Win 2003 - это создать несколько пустых каталогов в вашем каталоге веб-приложений. Однако я не знаю, действительно ли это позволяет вашему приложению делать то, что ему нужно.

Как добраться до вашей проблемы

Команда.Net 2 aspnet_regiis -c предполагает, что установлена Служба администрирования IIS. Это устаревшая служба от IIS 6, которая, конечно же, не установлена по умолчанию в Windows 8.x.

Вы можете установить эту службу, выбрав "Программы и компоненты" на панели управления и включив функцию совместимости управления IIS 6, а также ее подпозиции:

После того, как вы сделаете это, вы сможете запустить команду:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727> .\aspnet_regiis.exe -c Start copying the ASP.NET client script files for this version (2.0.50727). Finished copying the ASP.NET client script files for this version (2.0.50727).

Как я уже говорил, все это создает пустые папки под вашими веб-приложениями и может или не может фактически решить вашу проблему. Как пример, он создаст следующую структуру каталогов, если у вас есть только веб-приложение IIS по умолчанию:

C:\Inetpub\wwwroot\aspnet_client\system_web\2_0_50727

qaru.site

Как решить класс исключения COM Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))?

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

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

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

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

Либо установите его, отремонтируйте (с помощью «Установка и удаление программ»), либо зарегистрируйте его (через Regsvr32.exe).

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

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

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

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

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

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

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

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

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

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

Выяснилось, что Microsoft не будет регистрировать 32-разрядные ком-компоненты на пути HKLM \ CLSID, HKCR \ CLSID на 64-битной машине, а помещает запись в пути HKLM \ Wow6432Node \ CLSID и HKCR \ Wow6432Node \ CLSID.

Теперь конфликт - это 64-разрядный процесс, который пытается вызвать 32-битный процесс на 64-битной машине, который будет искать запись реестра в HKLM \ CLSID, HKCR \ CLSID. Решение состоит в том, что нам нужно заставить 64-битный процесс посмотреть запись реестра в HKLM \ Wow6432Node \ CLSID и HKCR \ Wow6432Node \ CLSID.

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

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

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

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

Регистрируя класс (в частности, его CLSID) - см., Например, Вот ,

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

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

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

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

в моем случае

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

programmerz.ru

c# - Как решить класс исключения COM Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))?

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

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

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

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

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

Выяснилось, что Microsoft не будет регистрировать 32-разрядные ком-компоненты на пути HKLM \ CLSID, HKCR \ CLSID на 64-битной машине, а помещает запись в пути HKLM \ Wow6432Node \ CLSID и HKCR \ Wow6432Node \ CLSID.

Теперь конфликт - это 64-разрядный процесс, который пытается вызвать 32-битный процесс на 64-битной машине, который будет искать запись реестра в HKLM \ CLSID, HKCR \ CLSID. Решение состоит в том, что нам нужно заставить 64-битный процесс посмотреть запись реестра в HKLM \ Wow6432Node \ CLSID и HKCR \ Wow6432Node \ CLSID.

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

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

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

code-examples.net