尝试从asp.net应用程序写入文件时出现System.UnauthorizedAccessException

本文关键字:文件 UnauthorizedAccessException System asp net 应用程序 | 更新日期: 2024-09-19 16:08:56

编辑:我找到了解决方案。我原以为错误是在试图写入要比较的文件时产生的,事实上,它是在我试图读取要比较的档案时产生的。我在为比较可执行文件调用的命令中出现语法错误,导致无法生成结果文件。当我试图读取一个不存在的文件时,我看到了访问违规(是的,我应该检查文件是否存在)。我在让BC生成比较时遇到了问题(出于某种原因,完全相同的命令可以从命令提示符下运行,但在从C#运行时不起作用),但如果有必要,我会单独问这个问题。

我正在开发一个.net应用程序,该应用程序用于比较构建之间的代码更改。

我尝试添加的应用程序的一部分利用beyond-compare生成两块代码的html比较。

为了做到这一点,我从代码中生成文件(注意,我知道文件名对多个用户来说会有冲突问题,我稍后会解决这个问题),然后从命令行调用beyond-compare可执行文件。我使用以下代码生成文件:

//write the code to a local disk file
            System.IO.File.WriteAllText(@workingFolder + "''File1.txt", (String)dataRow["OldMethodCode"]);
            System.IO.File.WriteAllText(@workingFolder + "''File2.txt", (String)dataRow["NewMethodCode"]);

workingFolder的值为:"C:''inetpub''wwwroot"

我遇到的问题是,当运行此代码并尝试创建这些文件时,我会得到以下异常:

[未授权访问异常:访问路径"C:''inetpub''wwwroot"被拒绝。]System.IO.__Error.WinIOError(Int32错误代码,字符串maybeFullPath)+216 System.IO.FileStream.Init(字符串路径,FileMode模式,FileAccess访问,Int32权限,布尔使用权限,FileShare共享,Int32缓冲区大小,文件选项,SECURITY_ATTRIBUTESsecAttrs,字符串msgPath,布尔bFromProxy,布尔useLongPath,布尔checkHost)+1430 System.IO.FileStream.ctor(字符串路径,FileMode模式,FileAccess访问,FileShare共享,Int32缓冲区大小,文件选项,字符串消息路径,布尔bFromProxy,布尔useLongPath,布尔checkHost)+214
System.IO.StreamReader.ctor(字符串路径,编码,布尔detectEncodingFromByteOrderMarks,Int32缓冲区大小,布尔校验主机)+187 System.IO.File.InteralReadAllText(字符串路径,编码,布尔校验主机)+90
_Default.gridView_SelectedIndexChanged(Object _sender,EventArgs e)+1024 System.Web.UI.WebControls.gridView.HandleEvent(EventArgs e,布尔原因验证,字符串验证组)+1241
System.Web.UI.Page.ProcessRequestMain(布尔值includeStagesBeforeSyncPoint,Boolean includeStagesAfterSyncPoint)+3804

我已经尝试了很多方法来解决这个问题。与任何问题一样,你可能会忘记所有的选择,但以下是我认为成功几率最高的选择(但没有成功):

  • 将networkService作为完全权限添加到wwwroot文件夹
  • 将具有完全权限的所有人添加到wwwroot文件夹
  • 将应用程序池管理的管道模式更改为经典模式
  • 将应用程序池设置为与自定义用户一起运行,并授予该用户对文件夹的完全权限
  • 仅向任何其他似乎与该文件夹相关的用户授予完全权限
  • 将文件夹移动到wwwroot之外的另一个本地目录并指向该目录,然后对该文件夹尝试以上所有操作

在所有情况下,我似乎都无法创建文件,更不用说访问它来运行比较了。

是否有人可以就如何解决此问题提供建议,或者提供一种不需要创建文件的替代/更好的比较方法?

谢谢!

尝试从asp.net应用程序写入文件时出现System.UnauthorizedAccessException

产生错误。。。

创建了一个web应用程序,并使用以下代码写入主机目录"C:''inetpub''wwwroot''"中的文件

 string WorkingFolder = System.Configuration.ConfigurationManager.AppSettings["FolderPath"];
    protected void Page_Load(object sender, EventArgs e)
    {
        string s = "abcdefghijklmnopqrstuvwxyz";
        System.IO.File.WriteAllText(WorkingFolder + @"'File1.txt", s);
    }

我在默认应用程序池下发布和部署应用程序。我的默认应用程序池使用域用户''IIS_IUSRS帐户。默认情况下,我只有Read&执行对"C:''inetpub''wwwroot''"文件夹的访问。我得到了以下错误。。,

Source Error: 

第14行:{第15行:字符串s="abcdefghijklmnopqrstuvxyz";第16行:System.IO.File.WriteAllText(WorkingFolder+@"''File1.txt",s);第17行:}第18行:}

Source File: D:'Working Samples'IISCheck'IISCheck'Default.aspx.cs    Line: 16 

堆栈跟踪:

[UnauthorizedAccessException: Access to the path 'C:'inetpub'wwwroot'File1.txt' is    denied.]
  System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +10555843
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) +2580
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, Int32 bufferSize, FileOptions options) +98
System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) +139
System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding) +17 
System.IO.File.WriteAllText(String path, String contents, Encoding encoding) +60IISCheck._Default.Page_Load(Object sender, EventArgs e) in D:'Working Samples'IISCheck'IISCheck'Default.aspx.cs:16
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
System.Web.UI.Control.OnLoad(EventArgs e) +132
System.Web.UI.Control.LoadRecursive() +66
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428

现在,我将"C:''Inetpub''wwwroot"目录的完全控制权限授予IIS_IUSRS。。。。它可以工作并且能够写入文件。。。。

双击文件夹访问权限。肯定会写字。。我正在使用IIS7.5

好的,这实际上是在代码的后面引起的。当我试图在中读取报告时,该错误触发了,而该报告实际上并没有生成。

当从C#运行时,我在让BC生成报告时遇到了问题(完全相同的命令在命令提示符下工作),但如果必要的话,我会问一个单独的问题。