COM异常0x800A11F9 - 无法激活应用程序

时间:2010-04-22 11:05:33

标签: c# com interop ms-word

我有一个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()时,我收到一个COM异常0x800A11F9。

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

编辑:您可能希望尝试将激活Word的代码放入COM+ component并配置组件的标识,使其在可以启动Word的用户帐户下运行。< / p>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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