【问题标题】:Office Primary Interop Assemblies not working after installing 2007 compatibility pack安装 2007 兼容包后,Office 主互操作程序集不工作
【发布时间】:2010-10-27 23:26:42
【问题描述】:

我有一个 C# 程序,它执行一些 Word 和 Excel 自动化,它使用 Office 2003 主互操作程序集。我部署它的方式是将 Interops 包含在 bin 中,我让我的程序从那里引用它,而不是从 GAC 引用它(不是很专业,但它工作了几年)。最近在 3 台机器上安装了 office 2007 兼容包,现在当我的软件尝试调用 Word 或 Excel 时,我收到一个错误:

无法将 Microsoft.Office.Interop.Word.ApplicationClass 类型的 COM 对象转换为接口类型 Microsoft.Office.Interop.Word.Application,此操作失败,因为对具有 IID { 的接口的 COM 组件调用 QueryInterface 00020970-0000-0000-C000-000000000046} 由于以下错误而失败:库未注册。 (来自 HRESULT 的异常:0x8002801D (TYPE_E_LIBNOTREGISTERED))

经过一番搜索,我注意到安装兼容包 Word11 和 Word12 都安装在 GAC 中,与 Excel 相同。

我试图让我的程序引用 GAC 中的 Word11 互操作,但仍然没有帮助。 我卸载了 Word12 互操作,但仍然没有帮助。 似乎安装它似乎改变了一些注册表设置或我的软件混淆的东西找不到正确的库。

有人有什么想法吗?

【问题讨论】:

标签: pia office-automation word-automation


【解决方案1】:

我已经通过将早期版本从 GAC 复制到我们的第三方库文件夹并在那里引用它们来解决这个问题 - 这也意味着您可以在仅安装 2007 的情况下针对 2003 构建。 (是的,我知道这是一个非常肮脏的黑客)

【讨论】:

  • 它没有用,即使我引用我的本地 PIA 它仍然会抛出相同的错误
【解决方案2】:

我最近也遇到了这个词的问题,我追查到这个注册表项是罪魁祸首

HKEY_Classes_Root\TypeLib\{00020905-0000-c000-000000000046}\8.4

显然,这告诉 word 使用 word 2007 introp 程序集而不是 Word 2003 (8.3)。至少我认为我对办公室 introp 组件不太熟悉。我删除了注册表项,一切正常。我不知道删除此密钥有什么不利影响,但一定要备份它。

【讨论】:

  • 这是正确的答案。我遇到了同样的问题(除了 word 2010 vs 2007)。我删除了我不需要的参考,它开始工作了。
  • 我希望他们在最终版本中修复它,但在我对 2010 (8.5) 与 2013 beta (8.6) 的测试中也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2010-10-20
相关资源
最近更新 更多