COMexception0x800A11F9 – 无法激活应用程序

我有一个C#2.0(WinForms)项目,我尝试激活word 2003(在系统上安装了word)。 通过使用以下代码:

private void ActivateWord() { this.Activate(); if (m_WordDocument != null) { try { m_WordDocument.Activate(); if (m_WordDocument.Application != null) { m_WordDocument.Application.Visible = true; m_WordDocument.Application.Activate(); } } catch (COMException comEx) { ShowError(this, comEx.Message, false); } } } 

当我的应用程序执行m_WordDocument.Application.Activate()时,我收到一个COMexception0x800A11F9。

 Stacktrace: "System.Runtime.InteropServices.COMException (0x800A11F9): Cannot activate application at Word.ApplicationClass.Activate() at Roxit.SquitXO.GUI.DocumentCreatie.frmSelectVeld.ActivateWord()" 

可能是造成这个问题的原因是什么?

COM错误0x800A11F9是一个众所周知的权限问题,当弱势用户(如Network Service )尝试激活Office应用程序时会发生此问题。

在您的情况下,问题不能来自IIS,因为您正在开发WinForms应用程序。 相反,您的应用程序似乎是由在Local ServiceNetwork Service用户帐户下运行的Windows服务启动的。

如果确实如此,则需要在服务属性对话框的“ Log on选项卡上更改服务使用的用户帐户。

编辑:您可能想尝试将激活Word的代码放入COM +组件并配置组件的标识,以便它可以在可以启动Word的用户帐户下运行。

只是一个想法我在服务器上进行文字自动化时看到了类似的错误(我们不再因为片状而做了),但当时它是由ASP.net帐户的权限问题引起的,我知道你正在运行在winforms但这可能与权限有关?

如果是权限问题,并且您无法让Sitecore以具有足够权限的用户身份运行,那么您可以为Sitecore应用程序编写不同的服务(“WordService”)以向其发送请求。 然后WordService可以作为一个稍微有特权的用户运行,用Word做你的东西,然后例如将填写的Word文件写入SiteCore可以访问的已知位置,或者你想要它做什么。