解决IIS服务使用C#代码在Windows Server 2008上无法启动Excel的问题

最近遇到一个后台导出Excel文件的问题,用的是C#语言,调用Office的Excel组件实现。本机操作系统为Windows 7 X64,安装了Office 2013。启动Excel的代码为:

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
保存Excel文件的代码为:

workbook.SaveAs(fileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing,
                    Type.Missing,
                    Type.Missing, Type.Missing);
本地测试是没有任何问题的。但是程序部署到服务器(Windows Server 2008,安装了Office 2016)上,却死活导不出Excel文件。根据日志调试时发现,在启动Excel时出错了,错误信息为:

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))
根据网上的参考,修改Microsoft Excel Application的权限,并且修改IIS应用程序池标识为Network Service,依然无法解决。

参考解决步骤如下:

组件服务-->控制台根节点-->组件服务-->计算机-->我的电脑-->DCOM配置-->Microsoft Excel Application属性-->安全,在“启动和激活权限”、“访问权限”、“配置权限”中分别添加Network Service用户和IIS IUSRS用户,并配置权限为允许本地启动、远程启动、本地激活、远程激活。

解决IIS服务使用C#代码在Windows Server 2008上无法启动Excel的问题_第1张图片

再到IIS中进行应用程序池配置:

Internet Information Services(IIS)管理器-->应用程序池-->LYWebGISCC-->高级设置-->标识-->内置账户-->NetworkService

解决IIS服务使用C#代码在Windows Server 2008上无法启动Excel的问题_第2张图片

这些步骤正常执行后,依然无法导出,会报错。

这时,回想起刚才的配置过程,原来还少了关键一步,就是进行账户验证的配置,将Microsoft Excel Application属性的身份验证级别从“默认”修改为“无”。

解决IIS服务使用C#代码在Windows Server 2008上无法启动Excel的问题_第3张图片

配置过程中如果遇到下述错误,

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码。 (异常来自 HRESULT:0x8000401A)。

可通过修改应用程序池的标识(修改为“NetworkService”)解决。

你可能感兴趣的:(解决IIS服务使用C#代码在Windows Server 2008上无法启动Excel的问题)