访问COM组件时出错。

30

我为 Microsoft Office Word 构建了一个插件。如果以管理员身份运行 Word,则使用插件时没有问题,但如果不以管理员身份运行,则访问功能区元素时会出现两个常见异常。

第一个异常:

Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Core.IRibbonUI'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{000C03A7-0000-0000-C000-000000000046}' failed due to the following error:  could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)).
   at Microsoft.Office.Core.IRibbonUI.InvalidateControl(String ControlID)

当控件被以下代码使其无效时,会出现此错误:

ribbon.InvalidateControl("control-id");

而第二个异常:

Unable to cast COM object of type 'Microsoft.Office.Interop.Word.ApplicationClass' to interface type 'Microsoft.Office.Interop.Word._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00020970-0000-0000-C000-000000000046}' failed due to the following error:  could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)).
   at Microsoft.Office.Interop.Word.ApplicationClass.get_Selection()

此错误发生在以下代码的最后一行:

object wdStory = Word.WdUnits.wdStory;
object wdMove = Word.WdMovementType.wdMove;
WrdApp.Selection.EndKey(ref wdStory, ref wdMove)

我该如何解决这个问题?


1
它在其他电脑上能用吗?前几天我弄坏了注册表(还是在同事的电脑上),然后所有使用COM组件的程序都出现了类似的问题。如果在另一台电脑上可以运行,我会解释我是如何修复它的。 - Wug
1
是的,在开发电脑上可以工作。只有在测试机器上无法工作。可能是因为我安装(并卸载)了许多版本的Office(2007、2007-64、2010、2010-64)。 - Victor
哦,亲爱的。那么,测试机器运行的操作系统是什么? - Wug
Windows 7 64位带有Office 2007 32位 - Victor
我不知道,但我遇到了同样的问题。以管理员身份运行程序可以解决问题,但大多数情况下会遇到错误并崩溃。我将发布一个答案,说明我所做的事情。 - Wug
显示剩余2条评论
6个回答

59

问题已解决!

我以前安装了Office 2010,因此Windows注册表存在一些不一致之处。为了修复它们,请打开regedit并查找错误的CLSID。

对于第二个错误,您会发现类似于以下内容:

HKEY_CLASSES_ROOT\Interface\{00020970-0000-0000-C000-000000000046}

有以下子键:

  • ProxyStubClsid
  • ProxyStubClsid32
  • TypeLib

查看TypeLib中的(Default)Version值。

现在,使用(Default)值作为<TypeLib ID>,找到下面的节点。

HKEY_CLASSES_ROOT\TypeLib\<TypeLib ID>\<version>

在此元素的子元素中,您会发现多个元素,其中一个是第一个注册表的Version。如果检查其他元素,您会发现它们指向空。 删除其他元素!问题解决了!


@Wug,问题找到了!感谢你帮我。 - Victor
2
从Office 2013回滚到Office 2010时遇到了同样的问题。这个解决方案完美地解决了问题。 - Armin Sadeghi
非常感谢!我在一个人的电脑上调试插件整整一天,这个解决方案解决了问题。 - cesara

8

升级到最新版本的Office后,我开始遇到相同的异常。我尝试了一些建议的修复方法,包括类似于@Victor所描述的清理注册表的方式。

最终帮助我的是“修复”安装(尽管可能是多种因素的组合):

程序和功能 → 最新版本的 Office修复


1
这对我也适用于Office 365和Windows 7。谢谢! - Wudge
1
对我来说可以工作,我只有VS2010和Office 2016。 - Steven Yong
1
这对我来说很有效,使用的是VS2017和O365。 非常感谢! - Thomas Fonn

1
办公室修复对我起了作用。在我的情况下,我安装了 Project, 我相信这改变了配置,并且无法调用迁移数据从 Excel 工作簿到 SQL 的过程。

0

0
今天我也遇到了同样的问题,使用VS2015和Office 2013。将平台目标更改为x64对我起了作用。

0

只需安装Office 2010 / MS Word / .NET可编程性支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接