Класс не зарегистрирован Ошибка
При запуске приложения из Visual Studio 2012 на 64-разрядных компьютерах отображается следующее сообщение об ошибке:
Не удалось получить фабрику класса COM для компонента с CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} из-за следующей ошибки: 80040154 Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Я использую библиотеку Inventor packandgo dll в visualstudio.
Кто-нибудь знает в чем ошибка?
12 ответов
Моя проблема и решение
У меня есть 32-битный сторонний dll, который я установил в 2008 R2 машина, которая является 64-битной.
У меня есть сервис wcf, созданный в.net 4.5 framework, который вызывает 32-битный сторонний dll для процесса. Теперь у меня есть свойство build, настроенное на "любой" процессор, и я развернул его на 64-битной машине.
Когда я пытался вызвать службу wcf, возникла ошибка "80040154 Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG")
Теперь Ii использовал ProcMon.exe для отслеживания проблемы с реестром com и определил, что процесс ищет запись реестра в HKLM\CLSID и HKCR\CLSID, где нет записи.
Мы узнали, что Microsoft не будет регистрировать 32-битные компоненты com по путям 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" вместо "Any".
После развертывания версии "X86" на сервере 2008 R2 возникла проблема "System.BadImageFormatException: не удалось загрузить файл или сборку"
Решением этой проблемы 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.