【问题标题】:Why do I get a COMException when I try to initialize an Interop.Word.Application?为什么我在尝试初始化 Interop.Word.Application 时会收到 COMException?
【发布时间】:2015-11-24 06:05:45
【问题描述】:

我正在尝试从 Windows 8.1 通用应用程序创建、打开、读取/写入 .docx 文件。我正在使用 Visual Studio 2013。

当我初始化一个 Interop.Word.Application

Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();

我收到一个错误

An exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll but was not handled in user code

Additional information: Creating an instance of the COM component with CLSID 
{000209FF-0000-0000-C000-000000000046} using CoCreateInstanceFromApp failed due 
to the following error: 80040154 Class not registered (Exception from HRESULT:
0x80040154 (REGDB_E_CLASSNOTREG)). Please make sure your COM object is in the 
allowed list of CoCreateInstanceFromApp.

我环顾四周,找不到任何与我的问题相符的东西。我已经看到这个权限不足的异常,但我以管理员身份运行,但没有运气。

感谢任何帮助。如果您需要更多信息,请告诉我。

编辑 1

我在创建这个应用程序时确实做了一些奇怪的事情。我无法像过去那样添加对 Microsoft.Office.Interop 的引用,所以我按照我在网上找到的一些说明进行操作,并通过指向添加它们

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Word.dll

我不确定这是否有帮助,但这是我做的唯一一件看起来不正常的事情。

【问题讨论】:

  • Word 真的安装了吗?您是否尝试在 Windows 服务或 IIS 中执行此操作?
  • 是的。我可以打开单词、读/写和保存。

标签: c# exception ms-word


【解决方案1】:

问题如下(摘自异常消息):

请确保您的 COM 对象位于 允许的 CoCreateInstanceFromApp 列表。

Windows 应用商店应用无法加载任意 COM 对象。只有limited (built-in) set 的 COM 和 Win API 可用于商店/通用应用程序。并且 Microsoft Office 不在允许的 COM 对象列表中。

那么你有什么选择呢?你可以

  • 改为创建桌面应用,
  • 将文档处理移至服务器端(如果您打算使用 COM 互操作,这会带来一系列完全不同的问题),
  • 在服务器上使用基于 OpenXML 的方法(OpenXML SDK 也不能在商店应用中工作)
  • 编写您自己的代码,直接修改 OpenXML 包(例如,使用 XDocument
  • 使用Brokered Windows Runtime Components for side-loaded Windows Store apps(在处理 Office 应用程序时,这可能不是一个简单的选择)

【讨论】:

  • 感谢您的信息!我想我会切换到桌面应用程序而不是处理所有这些。再次感谢。
【解决方案2】:

您是否尝试在 x86 模式下编译解决方案?可能这些 COM 对象在您的安装中是 32 位的,如果您从 64 位机器上的“All CPU”可执行文件中调用它们,则工厂将失败。

【讨论】:

  • 如果我将其更改为 x86 模式(假设我按照 these 指令正确执行此操作,那么我在 x86 中会遇到相同的错误。
  • 感谢您迄今为止的帮助。我用一些(希望是)有用的信息编辑了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2022-12-17
相关资源
最近更新 更多