5

我开发了一个 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,但这没有帮助。还有其他可能的解决方案吗?

4

4 回答 4

8

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

于 2014-12-01T00:12:57.760 回答
4

这里有几件事。

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

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

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

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

于 2009-11-06T16:56:56.920 回答
3

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

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

希望这有帮助

于 2011-09-02T15:32:43.800 回答
0

从我这边来看,我正在我们的一台服务器中安排批处理作业,它在我的本地运行时抛出了同样的错误。

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

每当安排批处理作业时,请不要选择选项[无论用户是否登录都运行],因为这需要管理员访问权限,如果您不是,那么您就有问题了。

在此处输入图像描述

于 2018-12-12T15:10:05.427 回答