我在c#项目中遇到异常:
System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索具有CLSID {877AA945-1CB2-411C-ACD7-C70B1F9E2E32}的组件的COM类工厂失败:80040154。
这意味着什么?
答案 0 :(得分:30)
这意味着类ID 877AA945-1CB2-411C-ACD7-C70B1F9E2E32不在注册表中。
您可以通过打开regedit.exe,浏览到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)。
答案 1 :(得分:2)
我在64位操作系统上运行来自Win Forms C#项目的C ++ COM DLL。我将Win Forms C#项目更改为x86,重新运行,并且运行正常。为此: -
x86
答案 2 :(得分:1)
我在Selenium运行一些自动化测试并遇到同样的问题。问题是通过切换"默认处理器架构"到测试设置中的x86。
答案 3 :(得分:0)
在我的情况下,班级已正确注册。
但是,使用该类的应用程序的 IIS应用程序池的启用32位应用程序属性设置为 True 。它没有找到它,因为应用程序是在任何CPU / 64位模式下构建的。
将启用32位应用程序设置为错误修复了此问题。