【转】Asp.Net中Excel操作权限的问题

近日在打开原来写的一个网页程序运行时,出现了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)
ExpandedBlockStart.gifContractedBlock.gif        
{
            System.Diagnostics.Process myproc 
= new System.Diagnostics.Process();
            
//得到所有打开的进程
            try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
foreach (Process thisproc in Process.GetProcessesByName(processName))
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    
if (!thisproc.CloseMainWindow()) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        
if(thisproc!=null)
                        thisproc.Kill();
                    }

                }

            }

            
catch (Exception Exc)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
throw Exc;
            }
 
        }
 

 

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

 

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

再一贴[亲爱的,我不小心怀孕了~!]

这是我们第一次见面的酒吧。我们在这里度过了多少个夜晚&#xff0c;有过多少美好的回忆。  可是4月1日那天&#xff0c;我的心情很沉重&#xff0c;很忧郁。我不知道&#xff0c;这个消息对于我&#xff0c;对于你&#xff0c;对于我们意味着什么。我是如此渴望而又恐惧。 …

python路径长度限制,Linux下文件名长度限制

Linux下文件名长度限制出现场景&#xff1a;在迭代中有一个需求是将pdf文件名修改为所有班级的名称集合&#xff0c;出现的班级过多导致的文件名过长在linux下无法创建文件和文件夹的情况解决方式&#xff1a;经过查证&#xff0c;linux中文件名最长为255字符&#xff0c;文件路…

Visual Studio 2022 预览版2 发布啦

我们很高兴地宣布 Visual Studio 2022 的第二个预览版发布啦&#xff01;预览版 1 是有史以来第一个 64 位 Visual Studio&#xff0c;提供了改进的可扩展性。从预览版 2 开始&#xff0c;我们专注于提供有关个人和团队生产力、现代开发和不断创新等主题的新功能。在本文中&…

批作业是小学老师的一大乐趣 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅

【小安翻唱】凉宫春日的忧郁--冒険でしょでしょ第五届外语歌曲大赛助兴节目~绫魂论坛送aya的生日礼物筹备开始~...

第五届外语歌曲大赛如火如荼的进行的听了那么多参赛选手的歌曲自己也不由的也想唱唱正好遇上绫魂论坛的各位管理员为aya筹备生日礼物 好吧~ 我也来小唱一首 小小的final版送上~&#xff08;非正式版 请无视错词和中间以及最后的杂音 灭哈哈&#xff09; 顺便再借用了一下某位选…

免费电影下载

迅雷资源,速度稳定.我一直都在用..好东西不能一个人独享,拿出来分享..菜熊视讯最大的影视迅雷下载站&#xff01;完全免费&#xff0c;并且每天还大批量更新&#xff01;[url]http://www.caixiong.com/?445419.htm[/url]转载于:https://blog.51cto.com/douvip/12485

进入51cto之后的发展方向

这里是个不错的学习环境&#xff0c;值得珍惜。来到这里&#xff0c;我发现这里正是我梦寐以求的学习之天堂&#xff0c;这里可以肆无忌惮的贪婪的学习&#xff0c;可以感受到融洽的美好的氛围。我很愉快的开通的博客&#xff0c;并且珍惜这一次难得的机会去疯狂学习。我要确定…

oracle中文加密算法,Oracle数据库替代加密算法

替代密码算法的原理是使用替代法进行加密&#xff0c;就是将明文中的字符用其它字符替代 后形成密文。例如&#xff1a;明文字母a、b、c、d &#xff0c;用D、E、F、G做对应替换后形成密文。这里在Oracle的存储过程&#xff0c;通过替换加密算法来实现密码存入数据库时的加密。…

.net中单元测试

单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义&#xff0c;一般来说&#xff0c;要根据实际情况去判定其具体含义&#xff0c;如C语言中单元指一个函数&#xff0c;Java里单元指一个类&…

WCF后续之旅(11): 关于并发、回调的线程关联性(Thread Affinity)

对于一般的多线程操作&#xff0c;比如异步地进行基于文件系统的IO操作&#xff1b;异步地调用Web Service&#xff1b;或者是异步地进行数据库访问等等&#xff0c;是和具体的线程无关的。也就是说&#xff0c;对于这些操作&#xff0c;任意创建一个新的线程来执行都是等效的。…

成年人改变生活的方式,都是从它开始

全世界只有3.14 % 的人关注了青少年数学之旅2019已经不足80天&#xff0c;年初立下的flag倒了几个&#xff1f;史蒂夫马丁有一句话&#xff1a;“所有的人生谜语都可以从阅读中找到答案。”无论是读影评、读好书&#xff0c;亦或者涉猎趣闻轶事、汲取犀利观点&#xff0c;总会悄…

组策略链接顺序优先级

“链接顺序”最低的 GPO 最后处理&#xff0c;因此具有最高的优先级。

oracle体系结构和组件图示,Oracle 体系结构组件

Oracle数据库主要由两大组件构成&#xff1a;实例&#xff1a;进程与内存结构。数据库&#xff1a;操作系统文件。实例是我们访问数据库的接口。一个实例只能打开一个数据库。当你用SQLPlus或其它的客户端工具去连接Oracle数据库时&#xff0c;你的客户端进程与服务器端进程通讯…

Request.ServerVariables的详细应用(转)

Request.ServerVariables应用 【摘 要】本文详细介绍关于学习ASP知识之Request.ServerVariables应用的文章专题。本机ip:<%request.servervariables("remote_addr")%>服务器名:<%Request.ServerVariables("SERVER_NAME")%>服务器IP:<%Requ…

uiview生命周期

在viewDidAppear方法中做了一段页面开始的动画&#xff0c;但是动画效果在横屏是没有问题的&#xff0c;在竖屏轨迹总是不对。解决方法执行顺序的问题&#xff0c;页面的加载顺序是2011-11-04 13:48:21.290 jjj[4048:707] viewDidAppear2011-11-04 13:48:21.291 jjj[4048:707] …

表白和被表白时遇到的骚操作,最后一个天秀!| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】

oracle中的的instr,Oracle中instr函数使用方法

举例&#xff1a;scenarioinfo 中有60条数据&#xff0c;其中字段ywwd不为空的有40条(其中包含“积分”的有30条)&#xff0c;字段ywwd为空的有20条。查询scenarioinfo 表中字段ywwd包含“积分”的语句(返回30条数据)&#xff1a;select id, ywwd from scenarioinfo where inst…

这么简单的序列化 System.Text.Json.Serialization 也报错了?

咨询区 kofifus&#xff1a;我准备将项目中的 JSON.NET 切换到原生的 System.Text.Json&#xff0c;但我遇到了个意外报错&#xff0c;测试代码如下&#xff1a;using System.Text.Json.Serialization; using Newtonsoft.Json;public class C {public C(string PracticeName) {…

直观机械动图,一秒看懂原理!

全世界只有3.14 % 的人关注了青少年数学之旅这些神奇唯美的机械动图&#xff0c;让我们不得不感叹制造的魅力&#xff01;仿生四翼飞行机器人▲单手磁性拉链▲风洞实验——模拟飞机飞行▲可以说是最快的折弯机了▲这是谁设计的死循环▲高压水除锈▲摩擦焊接▲打地洞▲能轻松把车…

数据校验器架构模式组

刘 岳林 (yuelin_liumsn.com), 软件工程师2007 年 1 月 15 日本文阐述软件架构与设计模式&#xff0c;它为架构师和开发人员提供了一组关于数据校验的架构模式&#xff08;隔离校验器&#xff0c;可组装校验器&#xff0c;动态策略校验器&#xff0c;动态注册校验器等&#xff…