我有一个C#程序做了一些Word& Excel自动化,它使用Office 2003主互操作程序集。我部署它的方式是将Interops包含在bin中,我让我的程序从那里引用它,而不是从GAC引用它(不是非常专业,但它工作了fpr年)。最近在3台机器上安装了Office 2007兼容包,现在当我的软件尝试调用Word或者我发现错误时:
无法将Microsoft.Office.Interop.Word.ApplicationClass类型的COM对象转换为接口类型Microsoft.Office.Interop.Word.Application,此操作失败,因为QueryInterface在具有IID的接口的COM组件上调用{ 00020970-0000-0000-C000-000000000046}由于以下错误而失败:库未注册。 (HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED))
经过一番搜索后,我注意到安装兼容包Word11和Word12都安装在GAC中,与Excel一样。
我试图让我的程序在GAC中引用Word11互操作,但仍然没有帮助。 我没有安装Word12互操作,仍然没有任何帮助。 似乎安装这个似乎改变了一些注册表设置或我的软件混淆的东西找不到正确的库。
有人有想法吗?
答案 0 :(得分:3)
我最近也用这个词来解决这个问题,我追查这个注册表项是罪魁祸首
HKEY_Classes_Root\TypeLib\{00020905-0000-c000-000000000046}\8.4
显然,这告诉单词使用word 2007 introp程序集而不是Word 2003(8.3)。至少我认为我对办公室introp组件不太熟悉。我删除了注册表项,一切正常。我不知道删除此密钥有什么不利影响,但肯定会备份它。
答案 1 :(得分:1)
我通过将早期版本从GAC复制到我们的第三方库文件夹并在那里引用它来解决这个问题 - 也意味着您可以在仅安装了2007的情况下构建2003。 (是的,我知道这是一个非常肮脏的黑客)