Класс не зарегистрирован Ошибка

При запуске приложения из Visual Studio 2012 на 64-разрядных компьютерах отображается следующее сообщение об ошибке:

Не удалось получить фабрику класса COM для компонента с CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} из-за следующей ошибки: 80040154 Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

Я использую библиотеку Inventor packandgo dll в visualstudio.

Кто-нибудь знает в чем ошибка?

12 ответов

Решение

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

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

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

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

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

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

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

  7. Этого можно достичь, настроив свойства проекта службы wcf так, чтобы они предназначались для компьютера "X86" вместо "Any".

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

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

Проблема в том, что DLL зарегистрирована в 32-битной версии реестра Windows, а приложение использует 64-битную версию.

Решение: перейдите на вкладку "Свойства проекта", "Компиляция" и нажмите "Дополнительные параметры компиляции...". Измените "Target CPU" на x86, нажмите "ОК", сохраните и попробуйте снова.

Источник: http://www.theogray.com/blog/2009/10/comexception-regdbeclassnotreg-on-64-bit-windows

Работал для меня с VB 6 COM DLL, вызванной из приложения.Net 4 Winforms

У меня такая же проблема. Я пробовал много способов, но в конце концов решение было простым. Решение. Откройте IIS. В пуле приложений щелкните правой кнопкой мыши используемую платформу.net. Перейдите в настройки и измените "Включить 32-битные приложения" на "Истина".

Где-то в коде, который вы используете, есть вызов Win32 API, CoCreateInstance, чтобы динамически загрузить DLL и создать экземпляр объекта из нее.

Сопоставление между идентификатором компонента и библиотекой DLL, которая способна создать экземпляр этого объекта, обычно находится в HEKY_CLASSES_ROOT\CLSID в реестре. Обсудить это дальше было бы много рассказать о COM в Windows. Но ошибка указывает на то, что COM-гид отсутствует в реестре.

Я не особо разбираюсь в том, что представляет собой DLL-библиотека PackAndGo (компонент Autodesk), но я подозреваю, что вам просто нужно "установить" этот компонент или программный пакет, который он поставил, через назначенного установщика, чтобы эта DLL и соответствующие ключи реестра COM были включены. ваш компьютер, на котором вы пытаетесь запустить свой код. (т.е. запустите setup.exe для этого продукта).

Другими словами, я думаю, что вам нужно установить "Pack and Go" на этом компьютере, а не просто копировать DLL на целевой компьютер.

Кроме того, убедитесь, что вы решили собрать свой код, подходящий как 32-битный или 64-битный, в зависимости от того, какой вариант сборки (32 или 64-битный) Pack And Go вы устанавливаете.

Я давно решил, что уверен, но это может помочь другой бедной душе.

Эта ошибка может возникать, если DLL, которую вы развертываете в пакете установки, не совпадает с той DLL, на которую вы ссылаетесь (они будут иметь разные идентификаторы)

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

В машинах с 64-битными окнами компоненты COM должны регистрироваться в HKEY_CLASSES_ROOT\CLSID (64-битный компонент) ИЛИ HKEY_CLASSES_ROOT\Wow6432Node\CLSID (32-битный компонент) . Если ваше приложение является 32-разрядным приложением, работающим на 64-разрядном компьютере, библиотека COM обычно ищет GUID в узле Wow64, а если ваше приложение является 64-разрядным приложением, библиотека COM будет пытаться загрузить его из HKEY_CLASSES_ROOT\CLSID. Убедитесь, что вы ориентируетесь на правильную платформу, и убедитесь, что вы установили правильную версию библиотеки (32/64 бит) .

Я столкнулся с той же проблемой. Я добавил ссылку на dll COM-компонента Microsoft.Office.Interop.Excel, но Office не был установлен в моей системе, это не даст ошибку времени компиляции. Я переместил свое приложение в другую систему и запустил его.. оно успешно работало.

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

Это случилось со мной, когда я запускаю eclipse для рабочей области, а не для других рабочих областей. В этой рабочей области у меня был файл *.ts, открытый с помощью «JS-редактора». Произошла ошибка, несмотря на правильную ассоциацию файлов в настройках. Другой *.ts файл открылся без ошибок. Чтобы обойти это, в «Открыть ресурс» (ctrl-shift-r) я использовал кнопку «Открыть с помощью» и выбрал «Редактор JS», и файл открылся без проблем. После этого eclipse знает, какой редактор использовать для этого файла. Я решил проблему для одного конкретного типа файлов, но решение, вероятно, применимо ко всем типам файлов. Надеюсь, это поможет кому-то. Спасибо за чтение

У меня была эта проблема, и я решил ее, когда понял, что он ищет реестр Windows, указанный в скобках.

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

Я получил ошибку ниже в моем 32-разрядном приложении.

Ошибка: не удалось получить фабрику класса COM для компонента с CLSID {4911BB26-11EE-4182-B66C-64DF2FA6502D} из-за следующей ошибки: 80040154 Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

И на настройкеEnable32bitApplications"чтобы истина в defaultapplicationpool у меня в IIS работал.

Мне пришлось установить распространяемый компонент Microsoft Access Database Engine 2010 и перезагрузить компьютер.

Проверьте, установлены ли на этом сервере MS Office и MS Excel.

Другие вопросы по тегам