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,重新运行,并且运行正常。 去做这个:-
- 右键单击.NET项目,然后选择“ 属性”
- 选择“ 构建”选项卡
- 将Platform目标设置为
x86
- 重新编译,然后重新运行
从George J的答案中改变位数的概念
在我的情况下,class级已正确注册。
但是,使用该类的应用程序的IIS应用程序池的“ 启用32位应用程序”属性设置为True 。 它没有找到它,因为应用程序是在任何CPU / 64位模式下构建的。
将启用32位应用程序设置为False修复了该问题。