5

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

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

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

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

有人有什么想法吗?

4

2 回答 2

3

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

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

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

于 2009-09-15T23:02:40.513 回答
1

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

于 2009-05-21T15:58:13.793 回答