【发布时间】:2015-03-20 22:47:20
【问题描述】:
我引用了一个使用 tlbimp.exe 创建的 Interop-Assembly。 现在,当我从这个 Interop-Assembly 创建一个类的对象时,就像
var allplanInstance = new AllplApplicationClass();
这适用于我的机器和一些客户机器。但在其他一些客户机器上,我会得到以下异常:
System.Runtime.InteropServices.COMException (0x80004005):
Creating an instance of the COM component with CLSID {D8CFBF83-AFC7-11D2-A4F4-0000D1106F9C} from the IClassFactory failed due to the following error: 80004005.
我检查了 CLASS-ID {D8CFBF83-AFC7-11D2-A4F4-0000D1106F9C} 是否已在注册表中注册 - 所有机器上都是这种情况。
我该怎么做才能找到这个问题的原因?
感谢您的提示。
【问题讨论】:
-
可能操作您的程序的用户没有访问该注册表项的权限?您可以通过使用 RegistryKey 类声明您对该注册表项的访问权限来“保护”您的对象构造 - 这可能会隔离任何权限或缺少键的问题,从而使您能够诊断 80004005 COM 错误。
-
您需要此组件作者的支持。他故意使创建新对象的请求失败,但使用了一个毫无意义的错误代码。 E_FAIL 只是对报错质量的描述,诊断原因是没有用的。
-
我通常使用Process Monitor 来解决此类错误,它非常棒且免费。配置过滤器以仅显示失败的 WinAPI 调用,并查看日志中该错误之前的内容。
标签: c# com interop com-interop