如何解决未注册的COM异常类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))?

Jas*_*wal 81 c# vb.net

当我尝试创建COM类的实例时,它会抛出异常

类未注册(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))

请建议我怎么解决?

小智 57

您需要确保所有程序集都在编译以获得正确的体系结构.如果重新安装COM组件不起作用,请尝试更改x86的体系结构.


Jay*_*ggs 41

看起来您尝试初始化的任何程序或进程都没有安装在您的计算机上,安装已损坏或需要注册.

安装它,修复它(通过添加/删除程序)或注册它(通过Regsvr32.exe).

您没有提供足够的信息来帮助我们.

  • 认为你的意思是RegSvr32.exe(与RegSrv32.exe相对). (3认同)

小智 13

我的问题和解决方案

我有一个32位的第三方dll,我在2008 R2机器上安装了64位.

我有一个在.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的解决方案是在右侧apppool的IIS Apppool属性中将"Enable32bitApplications"设置为"True".


And*_*ith 10

另请注意,初始化时的类上下文可以创建该异常.如果您有一个编码为INPROC_SERVER的对象,但您尝试将CoCreateInstance设置为CLSCTX_LOCAL_SERVER,那么您也会收到该错误.

您需要确保对象已注册,CoCreateInstance正在创建具有正确类上下文的实例.


小智 9

如果在IIS上的Web应用程序中使用64位COM组件,请确保将应用程序池设置为不允许32位应用程序(在高级设置中启用32位应用程序:false)


Bas*_*ANI 7

就我而言

my platform是 x64

the Dll library(sdk)redistributable packagex64

所以

  1. 在解决方案资源管理器中navigate to your project

  2. 打开Properties

  3. change the Platform target from AnyCPU to x64

在此输入图像描述


Yok*_*oky 5

我通过在应用程序池高级设置中启用 32 位应用程序使其工作。右键单击应用程序池并选择高级设置 - 启用 32 位应用程序。这可能会帮助那里的人。