繁体   English   中英

Office自动化的DCOM故障

[英]DCOM Failure of Office Automation

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

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

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

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)

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

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

这里有几件事。

首先, SO上的这个主题可能有所帮助。

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

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

链接的文章讨论了变通方法。

这取决于您是否在64位计算机上,如果您是32位Office或64位办公室,但在任何一种情况下,您都需要进入管理工具>组件服务,在DCOM配置下,您需要找到'Microsoft Word 97 - 2003 Document',然后将'identity'设置为运行应用程序池的用户。 或者只是禁用它的安全性。

如果您运行的是具有32位Office的64位服务器,则可能无法找到此DCOM设置。 您需要从命令提示符运行“MMC -32”以启动32位MMC,然后从“文件”>“添加/删除管理单元”菜单中添加“组件服务”。

希望这有帮助

有一点,我在我们的服务器之一安排批处理作业,并且它在我本地运行时抛出相同的错误。

我尝试了上述所有步骤,但在我的情况下,实际情况有所不同。

每当安排批量工作时,不要选择[运行用户是否登录]选项,因为这需要管理员访问权限,如果不是,则表示您遇到问题。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM