Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 办公自动化的DCOM失败_C#_Windows_Ms Office_Dcom - Fatal编程技术网

C# 办公自动化的DCOM失败

C# 办公自动化的DCOM失败,c#,windows,ms-office,dcom,C#,Windows,Ms Office,Dcom,我开发了一个C程序,从SQLServer数据库中提取数据,然后生成包含数据的Word文档。我已将该程序设置为在Windows Server 2003机箱上作为SSIS作业的一部分运行。该程序以没有管理权限的用户SQLSVC运行。当我以SQLSVC身份登录并运行程序时,它会正确执行。但是,当程序作为SSIS作业自动运行时,它会冻结在以下代码行中 Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Int

我开发了一个C程序,从SQLServer数据库中提取数据,然后生成包含数据的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向用户SQLSVC添加了所有可能的DCOM权限,但这没有帮助。还有其他可能的解决办法吗?

这里有几件事

首先,这可能会有所帮助

第二,当您通过无人值守的流程自动化Office时,可能会出现“并发症”。以下是原文中加粗的笑点:

微软目前没有 建议,但不支持, 微软办公自动化 任何无人看管的申请, 非交互式客户端应用程序或 组件包括ASP、ASP.NET、, DCOM和NT服务,因为Office 可能表现出不稳定的行为和/或 在此模式下运行Office时出现死锁 环境


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

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

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


希望这有助于运行程序dcomcnfg-32。如果word和excel组件在64位以下运行,则无法找到它 转到控制台根目录/组件服务/计算机/我的计算机/DCOM配置/查找Microsoft Word和Excel并选择属性。 转到“安全”并在“配置权限”下选择“自定义”。如果需要,您可能还想更改其他权限,但我不需要添加IIS_IUSR并赋予它完全控制权。 现在转到Identity并选择交互式用户。

从我这边的一点, 我在我们的一台服务器上调度批处理作业,它抛出了相同的错误,而它在我的本地服务器上运行

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

每当计划batchjob时,不要选择选项[无论用户是否登录都运行],因为这需要管理员访问权限,如果没有,则说明您有问题


看起来,即使是完全32位的环境也可能会一团糟:当运行VS2008和MSO2003时,具有西里尔语语言环境的Windows8是不会受到萨满教的攻击的。奇怪的是,即使在32位系统上,“mmc”和“mmc-32”仍然提供对不同存储的访问。如何禁用它的安全性?我用我正在使用的一个服务的标识尝试了它,该服务试图执行类似于OP的操作,但它不起作用。您需要标识与导致问题的类型匹配的正确ClassID或GUID。一旦知道哪个类被DCOM安全性阻止,就可以打开管理控制台并调整该组件上的安全性。要打开管理控制台,您需要运行命令MMC-如果您的COM组件在64位计算机上是32位的,则需要另一个参数-32。打开控制台后,按类ID查找类并调整属性。这让我找到了正确的位置。我仍然无法使用dcomcnfg-32看到它,但mmc comexp.msc/32做到了这一点。对我来说,在Microsoft下使用与Word相关的dcomcnfg-32、dcomcnfg-64、mmc comexp.msc/32或mmc comexp.msc/64时,什么都看不到。浪费了我的时间。Office 2016,Windows 10 Pro。只要打开mmc或mmc-32.0,我就可以在DCOM配置下找到Microsoft Word 97-2003文档-