【问题标题】:Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)HRESULT 异常:0x80029C4A (TYPE_E_CANTLOADLIBRARY)
【发布时间】:2011-04-08 17:45:32
【问题描述】:

我正在 Windows 2003 机器上创建一个 Windows 服务,使用 dsofile 修改一堆文档的自定义属性。这工作正常,直到我在 win2k8 机器上安装该服务,它给我以下错误:

错误 [2010-09-06 13:17:12,317] 一个 发生未知错误: System.InvalidCastException:无法 转换类型的 COM 对象 'DSOFile.OleDocumentPropertiesClass' 接口类型 'DSOFile._OleDocumentProperties'。这 操作失败,因为 COM 上的 QueryInterface 调用 带有 IID 的接口组件 '{58968145-CF01-4341-995F-2EE093F6ABA3}' 由于以下错误而失败: 加载类型库/DLL 时出错。 (来自 HRESULT 的异常:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。

我所有的项目都设置为 x86 运行,并且我使用 procmon 来监视请求的文件而没有任何线索.. 有人对如何解决这个问题有任何想法吗?

【问题讨论】:

    标签: c# windows com 64-bit


    【解决方案1】:

    既然你提到你在Win2008下运行一个服务,

    • 第一个线索是,DSO File dll 组件是 Office 的一部分,什么版本?安装了吗?
    • 我不确定某项服务是否可以访问以系统帐户用户身份运行的办公组件,如果在该帐户作为服务运行时可能会受到恶意攻击...
    • TYPE_E_CANTLOADLIBRARY 应该是给定第一个选项的结果...

    【讨论】:

    • 我认为 dsofile 是一个独立的 dll,实际上并不需要办公室来工作。无论如何,我已经安装了 office (2007),所以这不是问题。
    • 我现在使用 regsvr32 在 gac 中注册 dsofile.dll,这似乎已经解决了这个问题。感谢您的宝贵时间。
    【解决方案2】:

    我遇到了类似的问题,由于Geoff Darst - MSFT的解释,我解决了。 我调整了他的原始答案以适合您的界面 IID:

    听起来您的 typelib 注册有问题。 据推测,Com 互操作层正在访问注册表以尝试 找到类型库。它会从下面开始 HKCR\接口{58968145-CF01-4341-995F-2EE093F6ABA3}\Typelib。这 默认值应参考定义的类型库的 guid 有问题的界面:应该位于以下 键:HKCR\Typelib{在上述接口键中找到的内容}。 应该有一个版本子键,然后是一个 0 子键,以及一个 win32 下的子键。 win32 键的默认值应该指向 正确的类型库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-13
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2018-03-03
      • 2012-07-21
      • 2011-03-02
      相关资源
      最近更新 更多