WPF运行报错80040154 Class not registered COM异常如何解决?
问题异常说明
System.Runtime.InteropServices.COMException: 'Retrieving the COM class factory for component with CLSID {9F8D4F16-0F61-4A38-98B3-1F6F80F11C87} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).'
异常原因
该错误的核心原因是项目调用的CLSID为{9F8D4F16-0F61-4A38-98B3-1F6F80F11C87}的COM组件,未在系统与项目进程匹配的架构位下完成注册,具体可分为三类场景:
- 对应COM组件完全未安装到当前系统,注册表中无相关注册信息
- COM组件已安装,但注册的架构和项目运行的进程架构不匹配:比如COM是32位版本,项目以64位进程运行,就无法读取到32位注册表的注册信息
- 手动注册COM组件时用错了注册工具,导致对应架构下没有注册记录
解决方案
- 首先确认COM组件的注册状态和架构
打开系统注册表编辑器,分别查看两个路径下是否存在对应CLSID的项:
- 64位COM注册路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{9F8D4F16-0F61-4A38-98B3-1F6F80F11C87} - 32位COM注册路径:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Classes\CLSID\{9F8D4F16-0F61-4A38-98B3-1F6F80F11C87}
如果两个路径都找不到对应CLSID项,说明COM组件未安装,先安装对应组件的官方安装包。
- 对齐项目运行架构和COM架构
- 如果COM是32位版本:将项目平台目标设置为
x86,如果使用Any CPU配置,需要勾选「首选32位」选项 - 如果COM是64位版本:将项目平台目标设置为
x64,同时取消勾选「首选32位」选项
修改配置后需要清理项目、重新生成再运行,避免旧编译缓存影响。
- 手动注册COM组件的正确操作
如果是自行开发的COM组件需要手动注册,要根据组件架构选择对应版本的注册工具,且必须用管理员权限运行CMD执行命令:
- 注册32位COM:
C:\Windows\SysWOW64\regsvr32.exe 你的COM组件完整路径.dll - 注册64位COM:
C:\Windows\System32\regsvr32.exe 你的COM组件完整路径.dll
常见特殊场景说明
如果调用的是Office相关的COM组件,需要对齐你本地安装的Office架构:绝大多数用户默认安装的是32位Office,此时项目必须设为x86架构才能正常调用,强行使用64位运行就会抛出该异常。
内容的提问来源于stack exchange,提问作者S_K
相关产品推荐
相关产品推荐

