如何修复 COMException 错误 80040154?
Posted
技术标签:
【中文标题】如何修复 COMException 错误 80040154?【英文标题】:How to repair COMException error 80040154? 【发布时间】:2011-11-04 01:54:48 【问题描述】:将工作中的 C# 项目从 64 位 Windows 7 机器移动到 32 位 XP 机器会导致以下错误:
Retrieving the COM class factory for component with CLSID 681EF637-F129-4AE9-94BB-618937E3F6B6 failed due to the following error: 80040154.
681EF637-F129-4AE9-94BB-618937E3F6B6
不在注册表中,因此未正确安装,但这是以前在 64 位 Windows 7 计算机上出现问题的同一 ID。
在 64 位 Windows 7 机器上找到了此错误的解决方案here(将 Platform Target 更改为 x86),但这并不能解决 32 位 XP 机器上的问题。
如何找到与681EF637-F129-4AE9-94BB-618937E3F6B6
关联的 DLL,或者更好的是,如何修复此异常?
【问题讨论】:
据我所知,进程(64 或 32)无法加载 32 位 dll(分别为 32 或 64)。 请注意,错误代码是 REGDB_E_CLASSNOTREG。因此,当计算机上未安装 COM/ActiveX 控件或因进程位数未安装 COM/ActiveX 控件时,可能会发生这种情况。 【参考方案1】:要查找 DLL,请转到您的 64 位计算机并打开注册表。找到名为HKEY_CLASSES_ROOT\CLSID\681EF637-F129-4AE9-94BB-618937E3F6B6\InprocServer32
的密钥。该键将 DLL 的文件名作为其默认值。
如果您通过为 x86 重新编译项目解决了 64 位计算机上的问题,那么您需要查看注册表的 32 位部分而不是正常位置。这是HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\681EF637-F129-4AE9-94BB-618937E3F6B6\InprocServer32
。
如果 DLL 是为 32 位构建的,那么您可以直接在 32 位机器上使用它。如果它是为 64 位构建的,那么您必须联系供应商并从他们那里获得 32 位版本。
获得 DLL 后,运行 c:\windows\system32\regsvr32.exe 进行注册。
【讨论】:
【参考方案2】:我在 Windows 服务中遇到了同样的问题。注册表中正确位置的所有键。该服务的构建是为 x86 完成的,但我仍然遇到异常。我发现了CorFlags.exe
在您的 service.exe
上运行此程序,不带标志来验证您是否在 32 位下运行。如果不使用标志 /32BIT+ /Force
运行它
(仅对签名程序集强制)
如果您启用了 UAC,您可能会收到以下错误:corflags : error CF001 : Could not open file for writing
让用户完全控制程序集。
【讨论】:
你能澄清一下 - 截图是图像标志应该是什么?还是屏幕截图的情况给您带来了问题?我得到了海报的 COMException 并且我的可执行文件具有与屏幕截图中完全相同的标志。 @CalvinFisher 这是应该的截图。 (就我而言)【参考方案3】:解决方法:
可能的解决方法是将项目的平台从“任何 CPU”修改为“X86”(在项目的属性、构建/平台的目标中)
根本原因
VSS 互操作是一个使用 32 位框架的托管程序集,并且 dll 包含一个 32 位 COM 对象。如果你在 64 位环境下运行这个 COM dll,你会得到错误信息。
【讨论】:
这对我有用。示例 exe 可以工作,但是当我编译代码并尝试新的 exe 时,我收到了 COM 错误。 SDKTestPlus3.exe 运行良好。只有我编译的 exe 不起作用。在将VS更改为构建x86而不是Any CPU之后,编译的exe终于可以工作了。谢谢!【参考方案4】:将表单中全局声明的 excel 变量移动到本地,就像我的表单中一样:
Dim xls As New MyExcel.Interop.Application
Dim xlb As MyExcel.Interop.Workbook
以上两行在我的表单中声明为全局,因此我将这两行移至本地函数,现在工具工作正常。
【讨论】:
以上是关于如何修复 COMException 错误 80040154?的主要内容,如果未能解决你的问题,请参考以下文章
当我浏览 http://localhost:8004/elmah.axd 时,它会生成 404 错误
仅在 VS 2010 上运行时:COMException:灾难性故障:错误代码:-2147418113
COMException 未知错误 (0x80005000) - DirectoryServices
IMAPI:COMException 发生内部文件系统错误 [-1062555360]