办公自动化的DCOM失败

问题描述:

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

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

这里有一些东西。

首先,这个thread on SO可能会有所帮助。

其次,Microsoft warns是“并发症”当你通过无人值守的自动化处理办公室可能出现。这里的点睛之笔(粗体原):

微软目前并不 建议,并且不支持, 自动化的Microsoft Office从任何无人值守, 非交互式客户端应用程序或 组件(包括 应用ASP,ASP.NET, DCOM和NT Service),因为Office 当Office在这种环境 运行可能会出现不稳定的行为和/或 僵局。

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

+0

感谢周杰伦,这很有帮助 – 2009-11-06 19:14:29

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

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

希望这对我有帮助

+0

看起来,即使是完全32位的环境也可能会混乱:带有西里尔语言环境的Windows 8无法忍受这种萨满教, VS2008和MSO 2003。奇怪的是,即使在32位系统上,'mmc'和'mmc -32'仍然提供对不同商店的访问。 – 2012-09-18 16:52:56

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

+0

这让我到了正确的地方。我仍然无法看到它使用dcomcnfg -32,但** mmc comexp.msc/32 **做到了。 – davewasthere 2017-08-09 02:39:25