40

将工作中的 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 机器上此错误的解决方案在此处找到(将 Platform Target 更改为 x86),但这并不能解决 32 位 XP 机器上的问题。

如何找到与 关联的 DLL 681EF637-F129-4AE9-94BB-618937E3F6B6,或者更好的是,如何修复此异常?

4

4 回答 4

24

要查找 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 进行注册。

于 2011-08-25T22:55:44.203 回答
14

我在 Windows 服务中遇到了同样的问题。注册表中正确位置的所有键。服务的构建是为 x86 完成的,但我仍然遇到异常。我发现了CorFlags.exe

service.exe在没有标志的情况下运行它以验证您是否在 32 位下运行。如果不使用标志运行它/32BIT+ /Force (仅对签名程序集强制)

如果您启用了 UAC,您可能会收到以下错误:corflags : error CF001 : Could not open file for writing让用户完全控制程序集。

控制台输出

于 2012-09-11T06:51:00.560 回答
8

解决方法:

可能的解决方法是将项目的平台从“任何 CPU”修改为“X86”(在项目的属性、构建/平台的目标中)

根本原因

VSS 互操作是使用 32 位框架的托管程序集,并且 dll 包含一个 32 位 COM 对象。如果您在 64 位环境中运行此 COM dll,您将收到错误消息。

于 2015-02-24T10:04:18.077 回答
-1

将表单中全局声明的 excel 变量移动到本地,就像我的表单中一样:

Dim xls As New MyExcel.Interop.Application  
Dim xlb As MyExcel.Interop.Workbook

以上两行在我的表单中声明为全局的,所以我将这两行移至本地函数,现在工具工作正常。

于 2016-08-17T11:51:19.057 回答