小编典典

访问COM组件时出错

c#

我为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)

我该如何解决这个问题?


阅读 898

收藏
2020-05-19

共1个答案

小编典典

问题解决了!

我之前已经安装了Office 2010,所以Windows注册表中存在一些不一致之处。要修复它们,请打开regedit并从错误中查找CLSID。

对于第二个错误,您将找到类似的内容:

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

使用子项:

  • ProxyStubClsid
  • ProxyStubClsid32
  • 类型库

看看中的(Default)VersionTypeLib

现在,使用以下(Default)值查找下面的节点<TypeLib ID>

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

作为该元素的子元素,您将找到多个元素,其中一个是Version第一个注册表的。如果检查其他元素,您会发现它们没有指向任何对象。 删除其他人!!!
解决了!

2020-05-19