IIS中使用Microsoft.Office.Interop.Excel 常见问题:RPC 服务器不可用。 (异常来自 HRESULT:0x800706BA) 的异常。等
IIS中使用Microsoft.Office.Interop.Excel
异常1:
检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失 败,原因是出现以下错误: 80080005。
解决方案:
A、 检查IIS发布的网站上的用户组是否有Administrators用户权限

B、 配置COM组件,用win+r命令打开命令运行窗口,输入Dcomcnfg命令,进入组件服务配置界面,找到“Microsoft Excel Application”,配置“安全”和“标识”:

三个都要选择自定义,并配置成everyone,如下操作:

配置“标识”,选择“下列用户”,配置成Administrator用户,密码为该用户的登录密码:

异常2:
RPC 服务器不可用。 (异常来自 HRESULT:0x800706BA)
解决方案:
下面的代码在有些版本的Windows系统是不会抛出异常:
Excel.Application excleApp = new Excel.Application();
Excel.Workbook workbook = excleApp.Workbooks.Open(reportFilePath);
try
{
//...
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{ workbook.Save();
//资源清理
excleApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excleApp);
GC.Collect();
}
但是有些Windows版本就会有问题:
会抛出
RPC 服务器不可用。 (异常来自 HRESULT:0x800706BA) 的异常。
查看有问题的Windows 版本的资源管理器会发现:

不管调用Excel.Application excleApp = new Excel.Application()多少次; 都只产生一个EXCEl.ExE进程。
而在不抛出异常的Windows版本上,每调用Excel.Application excleApp = new Excel.Application()一次; 就会产生一个新EXCEl.ExE进程。
如下代码则可以正常运行:
Excel.Application excleApp = new Excel.Application();
Excel.Workbook workbook = excleApp.Workbooks.Open(reportFilePath);
try
{
WriteExcelReportForSaleProductCashFlow(workbook, createReportParams);
WriteExcelReportForSubjectLv2(excleApp,workbook, createReportParams);
WriteForOwnCashFlowReport(workbook, createReportParams.ProjectSolutionId);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{ workbook.Save();
//资源清理
//excleApp.Quit();
//System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
//System.Runtime.InteropServices.Marshal.ReleaseComObject(excleApp);
GC.Collect();
}
将代码
excleApp.Quit(); 注释掉就不会抛出异常:RPC 服务器不可用。 (异常来自 HRESULT:0x800706BA) 的异常。
IIS中使用Microsoft.Office.Interop.Excel 常见问题:RPC 服务器不可用。 (异常来自 HRESULT:0x800706BA) 的异常。等的更多相关文章
- Microsoft.Office.Interop.Excel 读取 excel 中的 checkbox 和 radio
using Excel = Microsoft.Office.Interop.Excel; Excel.Application excelapp = new Excel.Application(); ...
- Excel操作 Microsoft.Office.Interop.Excel.dll的使用
----转载: http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中 ...
- Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决)
Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决) 论坛里的帮助:http://bbs.csdn.net/topics/39 ...
- 解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel。。
.NET错误提示:未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToke ...
- 使用Microsoft.Office.Interop.Excel.dll 文件来生成excel 文件
日常工作中经常需要将后台的数据导出成excel 格式,这里通过调用微软提供的类库来生成excel 文件. 具体是引用 了Microsoft.Office.Interop.Excel.dll 类库文件 ...
- NPOI写Excel,Microsoft.Office.Interop.excel.dll 转换Excel为PDF
首先要引用NPOI动态库和Microsoft.Office.Interop.excel.dll (Microsoft.Office.Interop.excel.dll 下载链接 ,下载以后解压文件,把 ...
- C# Microsoft.Office.Interop.Excel.ApplicationClass 加载类型库/DLL 时出错
问题 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Intero ...
- 未能加载文件或程序集“Microsoft.Office.Interop.Excel
解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel...” 2010-07-25 08:06:15 来源:源码之家 站长整理 [大 中 小] ...
- 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”
报错内容如下: 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM对象强制转换为接口类型“Microsoft.Office.Inte ...
随机推荐
- js密码的匹配正则
匹配的密码是 数字大写或者小写的字母.符号. if(pwd.match(/[\d]/) && pwd.match(/[A-Za-z]/) && pwd.match(/[ ...
- Apache服务器
Apache服务器 一 简介 1 www:world wide web 万维网 http 协议: 超文本传输协议 HTML语言: 超文本标识语言 2 URL:统一资源定位 ...
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(1)
默认存在的数据库: mysql 需要root权限读取 information_schema 在5以上的版本中存在 测试是否存在注入方法 假:表示查询是错误的 (MySQL 报错/返回页面与原来不同) ...
- TortoiseSVN安装使用【转】
转自:http://www.cnblogs.com/rushoooooo/archive/2011/04/29/2032346.html TortoiseSVN是windows平台下Subversio ...
- Linux上Core Dump文件的形成和分析
原文: http://baidutech.blog.51cto.com/4114344/904419 Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而 ...
- TCP的三次握手和四次挥手+TCP和UDP的区别
TCP的三次握手: LISTEN:表示服务器端的某个socket处于监听状态,可以接收连接了. SYN_SENT:当客户端SOCKET执行connect连接时,它首先发送syn报文,随即会进入到此状态 ...
- mysql的expain(zz)
两张表,T1和T2,都只有一个字段,id int.各插入1000条记录,运行如下语句: explain SELECT t1.id,t2.id FROM t1 INNER JOIN t2 ON t1.i ...
- EAScript 2016的新增语法(1)
1)let 语法,这个和var的声明类似,但是,只存在于其所在的代码块里. 举例: var x=1 console.log(x) { let x=2 console.log(x) } console. ...
- vs code 体验
今天用了一下 vs code, 第一感觉非常棒.用过 sublime text 和 vs 的经验.对vs code有一种曾相识的感觉. 在界面体验上,比目前用的 sublime text的感觉要好,比 ...
- hdu 5191(思路题)
Building Blocks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...