访问COM组件时出错

我为Microsoft Office Word构build了一个加载项。 当Word以pipe理员身份运行时,使用外接程序时没有问题,但是如果没有以pipe理员身份运行Word,则存在两个访问function区元素的常见exception。

第一个例外:

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) 

我该如何解决这个问题?

问题解决了!

我以前安装过Office 2010,因此Windowsregistry中存在一些不一致的情况。 要解决这些问题,请打开regedit并从错误中查找CLSID。

你会发现这样的第二个错误:

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

使用子键:

  • ProxyStubClsid
  • ProxyStubClsid32
  • types库

查看TypeLib中的(Default)Version值。

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

HKEY_CLASSES_ROOT \ TypeLib \ <TypeLib ID> \

作为这个元素的子元素,你会发现不止一个元素,其中一个是第一个registry的Version 。 如果你检查其他元素,你会发现他们没有指向任何东西。 删除其他人!!! 它解决了!

升级到最新的Office版本后,我开始得到相同的exception。 我尝试了一些build议的修复,包括清理registry的方式类似于@Victor所描述的。

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

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

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

@Victor你让我走在正确的道路上。 我的问题不是registry中的多个值,而是Office365从未添加的缺失值。 感谢你,我能find自己的决议。 千万分谢谢。

任何人仍然在寻找决议的细节。

我今天VS2015和Office 2013遇到同样的问题。将平台目标更改为x64为我工作。