Office自动化的DCOM故障

Eri*_*ess 5 c# windows dcom ms-office

我开发了一个C#程序,它从SQL Server数据库中提取数据,然后生成包含数据的Word文档.我已将程序设置为在Windows Server 2003框上作为SSIS作业的一部分运行.该程序以用户SQLSVC运行,该用户没有管理权限.当我以SQLSVC身份登录并运行程序时,它会正确执行.但是,当程序作为SSIS作业自动运行时,它会冻结在以下代码行中

Microsoft.Office.Interop.Word.Application word =
    new Microsoft.Office.Interop.Word.Application();
Run Code Online (Sandbox Code Playgroud)

当我强行终止进程时,会生成以下错误消息.

Error Message: System.Runtime.InteropServices.COMException (0x80080005):
Retrieving the COM class factory for component
with CLSID {000209FF-0000-0000-C000-000000000046}
failed due to the following error: 80080005.
   at IepGlance.Program.CreateNewIepFiles(Dictionary`2
       iepDictionary, EasyIepDataContext dbContext)
   at IepGlance.Program.Main(String[] args)
Run Code Online (Sandbox Code Playgroud)

据我所知,问题在于DCOM权限.我已经使用dcomcnfg将所有可能的DCOM权限添加到用户SQLSVC,但这没有帮助.还有其他可能的解决方案吗?

小智 7

运行程序"dcomcnfg -32".(如果在64位下运行,则无法找到单词和excel组件)转到"控制台根目录/组件服务/计算机/我的电脑/ DCOM配置/"查找Microsoft Word和Excel并选择属性.转到安全性并选择"配置权限"下的"自定义".(如果需要,您可能还想更改其他权限,但我不需要)添加"IIS_IUSRS"并将其命名为"完全控制".现在转到"身份"并选择"交互式用户".

  • 这让我到了正确的地方。我仍然无法使用 dcomcnfg -32 看到它,但是 **mmc comexp.msc /32** 成功了。 (2认同)

Jay*_*ggs 4

这里有几件事。

首先,这个关于 SO 的线程可能会有所帮助。

其次,微软警告说,当您通过无人值守的流程实现 Office 自动化时,可能会出现“并发症”。这是要点(原文中加粗):

Microsoft 目前不建议也不支持从任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)实现 Microsoft Office 应用程序的自动化,因为 Office 可能会表现出不稳定的行为和/或在此环境中运行 Office 时发生死锁。

链接的文章讨论了解决方法。