【问题标题】:Exception when creating COM-Object创建 COM 对象时出现异常
【发布时间】: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


【解决方案1】:

发生这种情况的一个常见原因是将这些类型的应用程序部署到 64 位计算机时。如果机器是 64 位,则必须在 x86 中构建调用 C# 应用程序。除此之外,COM dll 必须使用 32 位版本的 regsvr32.exe 注册,该版本位于 Windows/SysWow64/ 文件夹中。

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多