System.Runtime.InteropServices.COMException(0x80040154):

我在ac#项目中遇到exception:

System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索具有CLSID {877AA945-1CB2-411C-ACD7-C70B1F9E2E32}的组件的COM类工厂失败:80040154。

这意味着什么?

这意味着类ID 877AA945-1CB2-411C-ACD7-C70B1F9E2E32不在注册表中。

您可以通过打开regedit.exe来validation这一点,浏览到HKEY_CLASSES_ROOT\CLSID\{877AA945-1CB2-411C-ACD7-C70B1F9E2E32} 。 如果您在64位操作系统上运行32位应用程序,请查找HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{877AA945-1CB2-411C-ACD7-C70B1F9E2E32}

如果它在那里,它可能是一些其他问题,但它可能会丢失。 要解决此问题,您通常会运行分发此COM对象的安装程序。 如果您没有,并且您知道dll实现了该对象,则可以运行regsvr32.exe(或用于托管dll的regasm.exe)。

我在Selenium运行一些自动化测试并遇到同样的问题。 通过在测试设置中将“默认处理器架构”切换到x86来解决问题。

我在64位操作系统上运行来自Win Forms C#项目的C ++ COM DLL。 我将Win Forms C#项目改为x86,重新运行,并且运行正常。 去做这个:-

  1. 右键单击.NET项目,然后选择“ 属性”
  2. 选择“ 构建”选项卡
  3. Platform目标设置为x86
  4. 重新编译,然后重新运行

从George J的答案中改变位数的概念

在我的情况下,class级已正确注册。

但是,使用该类的应用程序的IIS应用程序池的“ 启用32位应用程序”属性设置为True 。 它没有找到它,因为应用程序是在任何CPU / 64位模式下构建的。

启用32位应用程序设置为False修复了该问题。