C# ASP.NET-我正在生成一个带有DLL的.XLS文件,如何授予写入该文件的权限?(IIS 7)

C# ASP.NET-我正在生成一个带有DLL的.XLS文件,如何授予写入该文件的权限?(IIS 7),c#,asp.net,windows,vb.net,iis,C#,Asp.net,Windows,Vb.net,Iis,我正在生成一个带有DLL(Excel库)的.XLS文件 我已添加此DLL作为对我的项目的引用 将.XLS保存到磁盘的代码正在运行,但遇到权限问题 我试图为IUSR、网络服务和所有人设置完全访问权限,只是想看看我是否能让它工作,但这些似乎都没有什么不同 下面是我尝试编写文件的地方: c:/temp/test1.xls 以下是错误: [SecurityException: Request for the permission of type 'System.Security.Permissions

我正在生成一个带有DLL(Excel库)的.XLS文件

我已添加此DLL作为对我的项目的引用

将.XLS保存到磁盘的代码正在运行,但遇到权限问题

我试图为IUSR、网络服务和所有人设置完全访问权限,只是想看看我是否能让它工作,但这些似乎都没有什么不同

下面是我尝试编写文件的地方:

c:/temp/test1.xls
以下是错误:

[SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
   System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
   System.Security.CodeAccessPermission.Demand() +54
   System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +2103
   System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +138
   System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +89
   System.IO.File.Open(String path, FileMode mode, FileAccess access, FileShare share) +58
   ExcelLibrary.Office.CompoundDocumentFormat.CompoundDocument.Create(String file) +88
   ExcelLibrary.Office.Excel.Workbook.Save(String file) +73
   CHC_Reports.LitAnalysis.CreateSpreadSheet_Click(Object sender, EventArgs e) in C:\Users\brian\Desktop\Enterprise Manager\CHC_Reports\LitAnalysis.aspx.vb:19
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +115
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +140
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11041511
   System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11041050
   System.Web.UI.Page.ProcessRequest() +91
   System.Web.UI.Page.ProcessRequest(HttpContext context) +240
   ASP.litanalysis_aspx.ProcessRequest(HttpContext context) +52
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171
知道我需要做什么来诊断权限问题并允许创建文件吗


谢谢。

我认为这与文件安全无关,而是与.NET代码访问安全有关。您可以安装.NET SDK,该SDK将在管理工具中添加类似“.NET 2.0配置”的内容,您可以在其中进行配置,也可以使用caspol命令行实用程序。另外,请查看这篇专门针对ASP.NET的文章:


编辑:现在我看了更多,请注意CodeAccessSecurityEngine。这显然是我所想的。您根据URI、强名称等向.NET应用程序授予或拒绝特定权限。这些权限包括对文件、注册表等的访问。

我认为这与文件安全无关,而与.NET代码访问安全有关。您可以安装.NET SDK,该SDK将在管理工具中添加类似“.NET 2.0配置”的内容,您可以在其中进行配置,也可以使用caspol命令行实用程序。另外,请查看这篇专门针对ASP.NET的文章:


编辑:现在我看了更多,请注意CodeAccessSecurityEngine。这显然是我所想的。您可以根据URI、强名称等向.NET应用程序授予或拒绝特定权限。这些权限包括对文件、注册表等的访问。

从IIS向HDD写入文件时,您需要设置文件夹的“写入”权限(例如c:\temp)。这是因为某些IO进程先删除文件,然后重新创建文件(而不仅仅是更新),删除文件时权限会被破坏。
通常,您需要向IUSR*、IWAM*和ASPNET授予读/写权限。

从IIS向HDD写入文件时,您需要设置文件夹的“写入”权限(例如,c:\temp)。这是因为某些IO进程先删除文件,然后重新创建文件(而不仅仅是更新),删除文件时权限会被破坏。
通常,您需要向IUSR*、IWAM*和ASPNET授予读/写权限。

我相信,对于90%遇到此错误的人来说,Nelson的做法是正确的。。。我相信tgolisch在剩下的8%中走上了正确的道路

但是,为我的应用程序提供服务的应用程序池显然没有写入相关文件夹的特定权限。因此,我切换了用于为应用程序提供服务的应用程序池,使其在以下上下文下运行:本地系统


部署应用程序时,我需要确定应用程序池运行的身份,并验证它是否有权访问相应的文件夹。

我相信90%遇到此错误的人都认为Nelson的做法是正确的。。。我相信tgolisch在剩下的8%中走上了正确的道路

但是,为我的应用程序提供服务的应用程序池显然没有写入相关文件夹的特定权限。因此,我切换了用于为应用程序提供服务的应用程序池,使其在以下上下文下运行:本地系统


部署应用程序时,我需要确定应用程序池在哪个标识下运行,并验证它是否有权访问相应的文件夹。

注意:.NET SDK和caspol实用程序允许您查看和添加自定义规则。通过编辑web.config,您可以在不使用任何这些工具的情况下使用现有工具。查看文章。“您可以使用现有规则”=“您可以使用现有规则,如完全信任、中等信任”。在.NET 1.1中,.NET运行时安装中包含了配置UI实用程序,因此您通常会在管理工具中看到它。从.NET2.0开始,您必须单独安装它。它包含在.NET2+SDK中,但SDK还安装了许多其他东西。您可以在某个地方单独获取它。注意:.NET SDK和caspol实用程序允许您查看和添加自定义规则。通过编辑web.config,您可以在不使用任何这些工具的情况下使用现有工具。查看文章。“您可以使用现有规则”=“您可以使用现有规则,如完全信任、中等信任”。在.NET 1.1中,.NET运行时安装中包含了配置UI实用程序,因此您通常会在管理工具中看到它。从.NET2.0开始,您必须单独安装它。它包含在.NET2+SDK中,但SDK还安装了许多其他东西。您可以在某个地方单独获取该程序集。该程序集是否从网络共享运行?或者可能是在中等信任度下运行的站点?您可以将excel存储在内存中并将其流回到浏览器中吗。还是必须将文件保存到磁盘?@尝试了taht ggonsalv,但不幸的是,该库只允许保存到路径@Ori,它在II7上本地运行程序集是否从网络共享运行?或者可能是在中等信任度下运行的站点?您可以将excel存储在内存中并将其流回到浏览器中吗。还是必须将文件保存到磁盘?@尝试了taht ggonsalv,但不幸的是,该库只允许保存到路径@Ori,它在II7上本地运行在这种情况下,我很惊讶给“所有人”权限都不起作用。也许IUSR*和IWAM*不是“每个人”的一部分。无论如何,您可以创建一个简单的ASP.NET页面来显示Environment.UserName,我认为这将为您提供正确的帐户。如果你仍然有困难,你可以跑