近日在打开原来写的一个网页程序运行时,出现了Excel操作权限的问题,具体的说就是在代码中调用下面这段与Excel操作有关的语句时

Application curExcelApp = new ApplicationClass();

提示权限不足,具体的提示内容如下:

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。 ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}\ASPNET,在 IIS 6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。 要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。

源错误:

//创建Excel信息 
object missing = System.Reflection.Missing.Value;
Application curExcelApp = new ApplicationClass();
curExcelApp.Application.DisplayAlerts = false;
Workbook curWorkBook = curExcelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);

原来碰到过这种情况,知道是由于Excel的DCom组件权限不足所引起的,所以按照原来的步骤进行设置,如下所示:

1:在服务器上安装office的Excel软件;

2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务";

3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置";

4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框;

5:点击"标识"标签,选择"交互式用户";

6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限。在XP系统和2000系统中添加ASPNET用户;

7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.

注意:其中第5步是必须的,否则会出现以下错误:

内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 ? 要想获得更多的可用内存,请关闭不再使用的工作簿或程序。 ? 要想释放磁盘空间,请删除相应磁盘上不需要的文件。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Runtime.InteropServices.COMException: 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 ? 要想获得更多的可用内存,请关闭不再使用的工作簿或程序。 ? 要想释放磁盘空间,请删除相应磁盘上不需要的文件。

源错误: 
Application curExcelApp = new ApplicationClass();
curExcelApp.Application.DisplayAlerts = false;
Workbook curWorkBook = curExcelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet curWorkSheet = (Worksheet)curWorkBook.Sheets.get_Item(1);

按照上述步骤设置好了以后,重新执行程序,还是出现权限不足的问题,问题不知道出现在什么地方,仔细分析提示信息和代码,终于发现了问题的所在,原来是在Web.config中进行了下面的设置:

<identity impersonate="true"/>

而这段话的目的是为每一个请求进行客户端模拟,按照提示信息中的解释,由于没有设置Username,所以当前执行的用户是IUSR_MACHINENAME,而该用户是没有操作Excel组件的权限,为了验证分析是否正确,进行了一下验证:

将这句话删除,执行程序,一切正常;

在Excel的操作权限中加入当前登陆的用户,并进行如下的设置:<identity impersonate="true" userName="***" password="***"/>,执行程序,一切正常;

在Excel的操作权限中加入所有的用户,并进行如下的设置:<identity impersonate="true"/>,执行程序,出现权限不足的错误。

通过以上的验证,我们可以得出,在不进行客户端模拟设置时,asp.net程序调用excel组件时使用的是network service用户(在xp和2000中,使用的是aspnet用户),使用设置<identity impersonate="true"/>进行客户端模拟时,使用的是IUSR_MACHINENAME用户,但该用户没有调用excel组件的权限,即使设置了该用户的相关权限也不行;使用设置<identity impersonate="true" userName="***" password="***"/>进行客户端模拟时,只要设置了相关用户的权限,就可以顺利地调用Excel组件,但是要注意的是:由于asp.net的限制,该用户的密码不能为空。

在处理该问题时,在网上找到了一个比较有用的资料,与大家分享如下:

解决部署在Window Server 2003 上Excel.exe进程问题

在操作完Excel以后,每次就会留下一个Execl.exe进程,无论如何也关闭不了,包括用垃圾回收等,原因我也不知道,但是在其他服务器操作系统和xp操作系统上不存在这种问题。

解决此类问题,有一个方法可以借鉴,就是杀死进程的方法,但是有一定的风险,要注意,具体方法如下:

操作进程有一定的风险,所有首先要有此类权限,添加权限方法,在web.Config里面添加权限<identity  impersonate="true"   userName="登录名"   password="密码 "/>

杀死进程方法          
publicstaticvoid KillProcess(string processName)
        {
            System.Diagnostics.Process myproc = new System.Diagnostics.Process();
            //得到所有打开的进程
            try
            {
                foreach (Process thisproc in Process.GetProcessesByName(processName))
                {
                    if (!thisproc.CloseMainWindow()) 
                    {
                        if(thisproc!=null)
                        thisproc.Kill();
                    }
                }
            }
            catch (Exception Exc)
            {
                throw Exc;
            } 
        } 

在操作完Excel后,调用杀死进程方法就可以了,下一次就会正常调用。

杀死进程请参看http://www.cnblogs.com/leic2000/articles/1269122.html

转载于:https://www.cnblogs.com/leic2000/archive/2008/08/18/1270058.html

【转】Asp.Net中Excel操作权限的问题相关推荐

  1. Asp.Net中Cache操作类

    /// <head>///<function>/// 存储类(存储UserInfo信息)///</function>///<description>// ...

  2. ASP.NET中数据库数据导入Excel并打印

    众所周知,WEB上的打印是比较困难的,常见的WEB上打印的方法大概有三种: 1.直接利用IE的打印功能.一般来说,这种方法可以做些扩展,而不是单单的调用javascript:print()这样简单,比 ...

  3. C#操作Excel,权限问题

    当我们导出的Excel文件要求严格的格式时,就需要把Excle做成模板,在导出时首先复制原来做好的模板,然后在模板上操作Excel就会保留原来的格式,但是在C#操作文件时会遇到一些权限上的问题,我们这 ...

  4. asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题

    asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到错误: 检索Com类工厂中CLSID为{000245-0000-0000-C000-000000000046}的组件失败, ...

  5. .ne中的控制器循环出来的数据如何显示在视图上_Web程序设计-ASP.NET MVC4数据库操作实例...

    ASP.NET MVC4数据库操作实例 之前文章介绍了MVC4与Pure框架结合进行的网页设计过程中如何定义控制器.方法.模型.视图等.并使用实例进行了简单说明.本文将在此基础上进一步说明如何使用MV ...

  6. Solidity合约记录——(三)如何在合约中对操作进行权限控制

    合约中一般会有多种针对不同数据的操作:例如对于存证内容的增加.更新及查询,若不进行一套符合要求的权限控制,事实上整个合约在真实环境下是没有多少使用价值的.那么应当如何对合约的权限进行划分?我们针对So ...

  7. 【译】在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本

    本篇文章是讲述使用iTextSharp这个开源组件的系列文章的第三篇,iTextSharp可以通过Asp.Net创建PDFs,就像HTML和ASP.Net为文本提供了多种容器一样,iTextSharp ...

  8. python对excel某一列去重-「总结篇」Python中所有的Excel操作技巧

    原标题:「总结篇」Python中所有的Excel操作技巧 Python对于Excel的操作是多种多样的,掌握了相关用法就可以随心所欲的操作数据了! 操作xls文件 xlrd(读操作): import ...

  9. python在excel中的应用-python中的excel操作

    一. Excel在python中的应用 存测试数据 有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到.测试的时候就从数据库中读取出来.这点是非常重要的! 存测试结果 二. Excel中 ...

最新文章

  1. python 字典 转 pandas DataFrame
  2. 代码审查工具 sonarqube 简介
  3. (笔记)Mysql命令grant on:增加新用户并控制其权限
  4. 【网易出品】2019不容错过的泛娱乐创新峰会来了!
  5. boost::parameter::python相关的测试程序
  6. Martix工作室考核题 —— 打印九九乘法表
  7. 把握人工智能命脉的有效方法
  8. dart和python哪个好_RedMonk 2020 年 Q1 编程语言排行:Python 冲进前二,Dart 值得关注...
  9. 【Qt学习笔记】3.布局
  10. unity怪物攻击玩家减血_Unity RPG游戏攻击的判定
  11. java抽象类泛型_java-使用泛型定义抽象方法
  12. gedit增加对指定文件格式(如qml)的识别和启用合适的语法高亮
  13. 使用jQuery.form插件,实现完美的表单异步提交
  14. 数据库服务器协议,数据库搭载服务器 协议
  15. 我在b站上大学:计算机类优秀网课汇总【持续更新】
  16. 手机c语言编译器ide文件位置,C语言编译器IDE
  17. 中国网络视频前景 表面云淡风轻实在暗潮汹涌
  18. specular图使用方法_CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分
  19. 腾讯、京东、滴滴、字节跳动……15个大厂在数据治理和数据分析上的真实案例
  20. tdd测试_变异测试是TDD的发展

热门文章

  1. 收集Linux常用命令
  2. java pem,如何验证Java中的PEM格式证书
  3. hive 日誌怎麼查看_Hive各个日志里都存放了什么信息?
  4. c# 蓝牙虚拟串口_蓝牙模块——基础知识介绍
  5. 钮扣电池电压电量_纽扣厂
  6. Jenkins-Gitlab配置方法
  7. 51 Nod 1027 大数乘法【Java大数乱搞】
  8. cdoj 1131 男神的礼物 区间dp
  9. 【求助】AIX5.3主机下 memcached的内存使用异常
  10. 把准脉搏 U-Mail邮件系统2014开足马力