快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
详细信息。 异常详细信息: system.Runtime.InteropServices.COMException: 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 ? 要想获得更多的可用内存,请关闭不再使用的工作簿或程序。 ? 要想释放磁盘空间,请删除相应磁盘上不需要的文件。 源错误:

行 535:    Application curExcelApp = new ApplicationClass();

行 536:    curExcelApp.Application.DisplayAlerts = false;

行 537:    Workbook curWorkBook = curExcelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);

行 538:    Worksheet curWorkSheet = (Worksheet)curWorkBook.Sheets.get_Item(1);

行 539:

按照上述步骤设置好了以后,重新执行程序,还是出现权限不足的问题,问题不知道出现在什么地方,仔细分析提示信息和代码,终于发现了问题的所在,原来是在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.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号