在64位计算机上使用Visual Studio 2012运行应用程序时,会显示以下错误消息:
检索CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} 组件的COM类工厂失败,原因是:80040154 类未注册 (来自HRESULT的异常:0x80040154 (REGDB_E_CLASSNOTREG))
我在Visual Studio中使用了Inventor packandgo dll库。
是否有人知道这个错误是什么意思?
在64位计算机上使用Visual Studio 2012运行应用程序时,会显示以下错误消息:
检索CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} 组件的COM类工厂失败,原因是:80040154 类未注册 (来自HRESULT的异常:0x80040154 (REGDB_E_CLASSNOTREG))
我在Visual Studio中使用了Inventor packandgo dll库。
是否有人知道这个错误是什么意思?
我的问题和解决方法
我安装了一个32位的第三方dll在64位的2008 R2机器上。
我创建了一个使用.net 4.5框架的wcf服务,该服务调用32位的第三方dll进行处理。现在我将构建属性设置为目标“任何”CPU并将其部署到64位机器上。
当我尝试调用wcf服务时出错,显示“80040154类未注册(HRESULT:0x80040154(REGDB_E_CLASSNOTREG)”
现在我使用ProcMon.exe跟踪com注册表问题,并发现该进程正在查找HKLM \ CLSID和HKCR \ CLSID处的注册表项,但是这些位置没有注册表项。
得知Microsoft不会将32位com组件注册到64位机器上的路径HKLM \ CLSID,HKCR \ CLSID,而是将其放置在HKLM \ Wow6432Node \ CLSID和HKCR \ Wow6432Node \ CLSID路径中。
现在的矛盾是64位进程试图在64位机器上调用32位进程,它将查找HKLM \ CLSID,HKCR \ CLSID处的注册表项。解决方法是我们必须强制64位进程查看HKLM \ Wow6432Node \ CLSID和HKCR \ Wow6432Node \ CLSID处的注册表项。
这可以通过将wcf服务项目属性配置为针对“X86”机器而不是“任何”来实现。
在将“X86”版本部署到2008 R2服务器后,出现了“System.BadImageFormatException:无法加载文件或程序集”的问题
解决方案这个badimageformatexception的解决方法是将正确的应用程序池的“Enable32bitApplications”设置为“True”。
解决方案:转到项目属性,编译选项卡,然后单击“高级编译选项...”。将“目标CPU”更改为x86,单击“确定”,保存并重试。
来源: http://www.theogray.com/blog/2009/10/comexception-regdbeclassnotreg-on-64-bit-windows
对于我从.Net 4 Winforms应用程序调用的VB 6 COM DLL有效。
我曾经遇到过同样的问题。尝试了很多方法,但最终的解决方案很简单。解决方法如下:
打开IIS,在应用程序池中,右键点击正在使用的.NET框架。
进入设置并将“启用32位应用程序”改为“True”即可。
我相信这个问题已经解决了,但这可能会帮助其他可怜的灵魂。
如果您在安装包中部署的 DLL 与您引用的 DLL 不同(它们将具有不同的 ID),则可能会发生此错误。
听起来很明显,但如果您对 dll 进行了小的更改,并且之前已在自己的计算机上安装了应用程序,则很容易发生这种情况,因为它会重新注册 dll。
我的32位应用程序出现以下错误。
错误:检索具有CLSID {4911BB26-11EE-4182-B66C-64DF2FA6502D} 的组件的COM类工厂失败,原因是以下错误:80040154类未注册(来自HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))。
在IIS中将“defaultapplicationpool
”中的“Enable32bitApplications
”设置为true对我有用。
我曾经遇到过这个问题,当我明白它在寻找括号中指定的Windows注册表时,我解决了它。
由于错误只发生在一台计算机上,我所要做的就是从正常工作的计算机上导出注册表,并将其安装到缺失它的计算机上。