【问题标题】:Error accessing COM components访问 COM 组件时出错
【发布时间】:2012-10-09 02:02:22
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

  • 在其他电脑上也能用吗?前几天我打破了注册表(在同事的计算机上)并且遇到了与所有使用 COM 组件的程序类似的问题。如果它可以在另一台计算机上运行,​​我会解释我做了什么来修复它。
  • 是的,在开发计算机上工作。只是在试机不工作。也许是因为我安装(和卸载)了许多版本的 Office(2007、2007-64、2010、2010-64)
  • 天哪。那么,测试机运行的是什么操作系统?
  • Windows 7 64 位和 Office 2007 32 位
  • 但是为什么当我以管理员身份运行时一切正常?

标签: c# com ms-word office-2007


【解决方案1】:

问题解决了!

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

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

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

使用子键:

  • ProxyStubClsid
  • ProxyStubClsid32
  • 类型库

查看TypeLib 中的(Default)Version 值。

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

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

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

【讨论】:

  • @Wug,发现问题!谢谢你的帮助。
  • 这正是我所需要的,它解决了我的问题,谢谢!
  • 从 Office 2013 回滚到 Office 2010 时遇到同样的问题。此解决方案效果很好。
  • 非常感谢!花了一整天在一台人的电脑上调试一个插件,这解决了它
【解决方案2】:

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

最终的帮助(即使它可能是多种因素的组合)是“修复”安装:

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

【讨论】:

  • 这对我也适用于 Office 365 和 Windows 7。谢谢!
  • 适合我,我只有 VS2010 和 Office 2016
  • 这对我使用 VS2017 和 O365 有效。非常感谢!
【解决方案3】:

办公室维修对我有用。就我而言,我安装了 Project,我认为它更改了配置,并且无法调用将数据从 Excel 工作簿迁移到 SQL 的过程

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      @Victor 你让我走上了正确的道路。我的问题不是注册表中的多个值,而是 Office365 从未添加的缺失值。多亏了你,我才能找到自己的解决方案。万分感谢。

      Details are here for anyone still looking for a resolution.

      【讨论】:

        【解决方案6】:

        我今天在使用 VS2015 和 Office 2013 时遇到了同样的问题。将平台目标更改为 x64 对我有用。

        【讨论】:

          猜你喜欢
          • 2011-05-10
          • 1970-01-01
          • 2010-11-14
          • 1970-01-01
          • 2013-03-19
          • 1970-01-01
          • 2012-03-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多