Класс не зарегистрирован Ошибка
Запуск приложения из Visual Studio 2012 на 64-разрядных компьютерах отображает следующее сообщение об ошибке:
Извлечение COM-класса factory для компонента с CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} завершилось ошибкой из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Я использую библиотеку Inventor packandgo dll в visualstudio.
Кто-нибудь знает, что такое ошибка?
Ответы
Ответ 1
Моя проблема и решение
-
У меня есть 32-разрядная сторонняя dll, которую я установил в машине R2 R2 с 64-разрядной версией.
-
У меня есть служба wcf, созданная в .net 4.5 framework, которая вызывает 32-битную стороннюю DLL для процесса. Теперь у меня есть свойство build, настроенное на "любой" процессор и развернутое на 64-битной машине.
-
Когда Ii попытался вызвать вызванную wcf-службу ошибку "80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)
-
Теперь Ii использовал 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" вместо "Any".
-
После развертывания версии "X86" на сервере 2008 R2 возникла проблема "System.BadImageFormatException: Не удалось загрузить файл или сборку"
-
Решение для этого badimageformatexception устанавливает для "Enable32bitApplications" значение "True" в свойствах IIS Apppool для правильного приложения.
Ответ 2
Проблема в том, что DLL зарегистрирована в 32-битной версии реестра Windows, и приложение использует 64-разрядную версию.
Решение. Перейдите на вкладку "Свойства проекта", "Компилировать" и нажмите "Дополнительные параметры компиляции...". Измените "Целевой ЦП" на x86, нажмите "ОК", сохраните и повторите попытку.
Источник:
http://www.theogray.com/blog/2009/10/comexception-regdbeclassnotreg-on-64-bit-windows
Работал для меня с VB 6 COM DLL, вызванным из приложения .NET Net Winforms
Ответ 3
Где-то в коде, который вы используете, есть вызов API Win32, CoCreateInstance, чтобы динамически загружать DLL и создавать экземпляр объекта от него.
Отображение между идентификатором компонента и DLL, способным создавать экземпляр этого объекта, обычно находится в HEKY_CLASSES_ROOT\CLSID в реестре. Обсудить это дальше было бы объяснить много о COM в Windows. Но ошибка указывает на то, что руководство COM отсутствует в реестре.
Я не очень понимаю, что такое PackAndGo DLL (компонент Autodesk), но я подозреваю, что вам просто нужно "установить" этот компонент или пакет программного обеспечения, с которым он пришел, через назначенный установщик, чтобы иметь эту DLL и соответствующий COM ключи реестра на вашем компьютере, на которых вы пытаетесь запустить свой код. (т.е. запустите setup.exe для этого продукта).
Другими словами, я думаю, вам нужно установить "Pack and Go" на этом компьютере, а не просто копировать DLL на целевую машину.
Кроме того, убедитесь, что вы решили создать свой код, подходящий как 32-разрядный или 64-разрядный, в зависимости от того, какой компоновщик компоновки (32 или 64 бит) пакета Pack And Go вы устанавливаете.
Ответ 4
В 64-битных машинах Windows компоненты COM должны регистрироваться в HKEY_CLASSES_ROOT\CLSID (64-битный компонент) ИЛИ HKEY_CLASSES_ROOT\Wow6432Node\CLSID (32-разрядный компонент). Если ваше приложение представляет собой 32-разрядное приложение, работающее на 64-разрядной машине, COM-библиотека обычно ищет GUID под Wow64 node, и если ваше приложение является 64-битным приложением, COM-библиотека будет пытаться загрузить из HKEY_CLASSES_ROOT\CLSID. Убедитесь, что вы настроили таргетинг на правильную платформу и убедитесь, что вы установили правильную версию библиотеки (32/64 бит).
Ответ 5
Долго решился, я уверен, но это может помочь другой плохой душе.
Эта ошибка может возникнуть, если DLL, которую вы развертываете в установочном пакете, не совпадает с DLL, на которую вы ссылаетесь (у них будут разные идентификаторы)
Звучит очевидно, но может легко произойти, если вы внесете небольшое изменение в dll и ранее установили приложение на своей собственной машине, которая перерегистрирует dll.
Ответ 6
У меня была эта проблема, и я решил ее, когда понял, что ищет реестр Windows, указанный в скобках.
Поскольку ошибка происходила только на одном компьютере, мне пришлось экспортировать реестр с компьютера, на котором он работал, и установить его на компьютер, который его отсутствовал.
Ответ 7
Я получил ошибку ниже в моем 32-разрядном приложении.
Ошибка: получение фабрики классов COM для компонента с CLSID {4911BB26-11EE-4182-B66C-64DF2FA6502D} не удалось из-за следующей ошибки: 80040154 Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
И на установку " Enable32bitApplications
" на true в defaultapplicationpool
в IIS работал для меня.
Ответ 8
У меня такая же проблема. Я пробовал много способов, но в конце концов решение было простым. Решение. Откройте IIS. В пуле приложений щелкните правой кнопкой мыши используемую платформу .net. Перейдите в настройки и измените "Включить 32-битные приложения" на "Истина".
Ответ 9
Я столкнулся с той же проблемой. Я добавил ссылку на dll COM-компонента Microsoft.Office.Interop.Excel, но Office не был установлен в моей системе, это не даст ошибку времени компиляции. Я переместил свое приложение в другую систему и запустил его.. оно успешно работало.
Таким образом, я могу сказать, что в моем случае это была системная среда, которая вызывала эту проблему.