我有一个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()"
造成这个问题的原因是什么?
答案 0 :(得分:5)
COM错误0x800A11F9是一个well-known权限问题,当弱势用户(例如Network Service
)尝试激活Office应用程序时会发生此问题。
在您的情况下,问题不能来自IIS,因为您正在开发WinForms应用程序。相反,您的应用似乎是由在Local Service
或Network Service
用户帐户下运行的Windows服务启动的。
如果确实如此,则需要在服务属性对话框的Log on
选项卡中更改服务使用的用户帐户。
编辑:您可能希望尝试将激活Word的代码放入COM+ component并配置组件的标识,使其在可以启动Word的用户帐户下运行。< / p>
答案 1 :(得分:0)
只是想到我在服务器上进行文字自动化时遇到了类似的错误(我们不再因为片状而做了),但那时它是由ASP.net帐户的权限问题引起的,我知道你在winforms中运行但是这可能与权限有关吗?
答案 2 :(得分:0)
如果是权限问题,并且您无法让Sitecore以具有足够权限的用户身份运行,那么您可以为Sitecore应用程序编写不同的服务(“WordService”)以向其发送请求。然后WordService可以作为一个稍微更特权的用户运行,用Word做你的东西,然后例如将填写的Word文件写入SiteCore可以访问的已知位置,或者您想要的任何位置。