【问题标题】:Access to the path 'c:\inetpub\wwwroot\myapp\App_Data' is denied拒绝访问路径“c:\inetpub\wwwroot\myapp\App_Data”
【发布时间】:2012-05-02 14:28:57
【问题描述】:

我刚刚在 Windows XP 上安装了 IIS。

当我尝试执行一个应用程序时,我得到一个错误:

对路径“c:\inetpub\wwwroot\myapp\App_Data”的访问被拒绝。 说明:执行过程中发生未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.UnauthorizedAccessException:访问 路径 'c:\inetpub\wwwroot\myapp\App_Data' 被拒绝。

ASP.NET 无权访问请求的资源。考虑 向 ASP.NET 请求授予对资源的访问权限 身份。 ASP.NET 有一个基本进程标识(通常 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 上的网络服务),如果 该应用程序不是模拟的。如果应用程序是 冒充 via ,身份将是 匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的用户 请求用户。

要授予 ASP.NET 对文件的访问权限,请在资源管理器中右键单击该文件, 选择“属性”并选择“安全”选项卡。点击“添加”添加 适当的用户或组。突出显示 ASP.NET 帐户,然后 选中所需访问权限的复选框。

来源错误:

第 70 行:受保护的子 cmbSettingFiles_SelectedIndexChanged(ByVal 发送者作为对象,ByVal e 作为 System.EventArgs) 句柄 cmbSettingFiles.SelectedIndexChanged
第 71 行:Dim doc As XmlDocument = New XmlDocument()
第 72 行:doc.Load(Path.Combine(basePath, cmbSettingFiles.SelectedValue)) 第 74 行:Dim settingsNode As XmlNode = doc.SelectSingleNode("/settings")

源文件:C:\myapp\install\install.aspx.vb 行:72

我尝试过这样做:

要授予 ASP.NET 对文件的访问权限,请在资源管理器中右键单击该文件, 选择“属性”并选择“安全”选项卡。点击“添加”添加 适当的用户或组。突出显示 ASP.NET 帐户,然后 选中所需访问权限的复选框。

但错误仍然存​​在。

这跟我的代码有关系吗?

我该如何解决这个问题?

编辑

我已经解决了我的开发机器上的问题,但我的网络服务器上仍然出现错误。

谢谢。

【问题讨论】:

  • 我是唯一一个在我的开发机器上使用该文件的人,当我在线上传我的服务器时,同样的事情也会发生。

标签: asp.net iis access-denied


【解决方案1】:

您确定要添加正确的用户吗?您是否检查过为您的应用程序池设置了哪个用户?

如果由于某种原因无法读取文件也会出现此错误;例如文件被锁定或被另一个应用程序使用。由于这是一个 ASP.NET Web 应用程序,您需要确保您没有执行任何需要锁定文件的操作;除非您能保证您的页面上一次只有一个用户。

您能否发布一个如何访问该文件的示例?它是什么类型的文件?代码 sn-ps 将帮助您获得更准确的答案。

【讨论】:

    【解决方案2】:

    尝试转到 App_Data 文件夹属性并添加具有读取功能的 ASPNET 用户 和写权限

    参考:
    How to assign correct permissions to App_Data folder of WebMail Pro ASP.NET
    Permissions on APP_DATA Folder
    ASP/ASP.NET Best way to handle write permissions?

    如果它不能解决您的问题,请检查您的 XML 文件是否未被使用这些配置文件的另一个线程打开。如果仍然存在,请提供更多详细信息。

    【讨论】:

    • 你好,你能帮我看看新的错误。在网络服务器中遇到同样的错误
    【解决方案3】:

    如果你的文件是只读的,那么额外的参数可能对FileStream有帮助

    using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
    

    【讨论】:

      【解决方案4】:

      我也遇到过类似的情况。我正在使用 TFS 进行源代码控制。我发现,当它被签入时,它使文件只读。这在我的服务中导致了上述错误,它正在以读/写方式打开它们。一旦我检查了它们进行编辑。一切都很好。我正在考虑尝试在服务中以只读方式打开它们。我认为一旦它们发布到生产服务器,这不是问题。仅在开发环境中。我在使用实体框架的服务中看到了类似的问题。如果签入 .svc 文件,则无法通过 EF 更新数据库。

      【讨论】:

        【解决方案5】:

        尝试向 NETWORK SERVICE 用户授予权限。

        【讨论】:

          【解决方案6】:

          我尝试添加具有所有权限的 ASP.net v4.0,添加 NETWORK SERVICE 用户但没有任何帮助。 最后在App_Data文件夹中添加DefaultAppPool用户的MODIFY权限,问题解决。

          【讨论】:

          • 这对我也有用。新服务器和我的部署包甚至没有创建 app_data 文件夹。我创建了它,然后将修改权限添加到 DefaultAppPool
          【解决方案7】:

          请以管理员权限运行 Visual Studio..这个问题已为我解决..

          访问路径被拒绝 C:\inetpub\wwwroot 被拒绝表示自助服务网站无法访问安装它的服务器上的特定文件夹。 这可能是因为该位置不存在,或者是因为身份验证用户没有任何权限应用于写入该位置。

          【讨论】:

            【解决方案8】:

            另一个原因可能是因为您尝试写入的文件路径为空,这就是它找不到它的原因。这只是发生此错误的另一个原因。

            【讨论】:

              【解决方案9】:

              如果您收到此错误,您可能正在尝试写信给wwwroot。默认情况下这是不允许的,for good reason

              相反,请考虑将您的文件存储在wwwroot 之外的某个位置。如果您只需要提供文件,请将它们存储在inetpub外部 文件夹中,并使用virtual directory 使它们对IIS 可见。

              原答案:


              对于在 Windows Server 上运行 IIS 的用户:

              默认情况下,IIS 用户没有wwwroot 文件夹的写入权限。这可以通过向IIS_IUSRS 用户授予wwwroot 的完全权限来解决。

              1. 打开文件资源管理器并转到C:/inetpub/
              2. 右键单击 wwwroot 并单击“属性”
              3. 转到“安全”选项卡并单击“编辑...”以编辑权限
              4. 查找并选择 IIS 用户。在我的例子中,它被称为IIS_IUSRS ([server name]\IIS_IUSRS)
              5. 选中所有权限的“允许”复选框。

              【讨论】:

              • 这个答案真的节省了我的时间。
              • 只是为了强调 IIS_IUSRS 用户可能/应该已经存在,上面的第 5 步是关键,允许所有权限。
              • 非常感谢您的回答。它节省了很多时间。
              【解决方案10】:

              我终于找到了 2019 年的答案。您需要将“IIS APPPOOL\DefaultAppPool”添加到对要修改的目录具有安全权限的用户列表中。确保他们拥有完整的权利。

              【讨论】:

                【解决方案11】:

                对我来说,我已经在 wwroot 中创建了一个名为 excel 的文件夹 D:\工作目录\OnlineExam\wwwroot\excel 我试图复制一个名称为 excel 的文件,该文件已经作为文件夹名称存在。所需的路径是 D:\工作目录\OnlineExam\wwwroot\excel\finance.csv 所以根据我改变了代码如下

                string copyPath = Path.Combine(_webHostEnvironment.WebRootPath, "excel\\finance");
                                    questionExcelUpload.Upload.CopyTo(new FileStream(copyPath, FileMode.Create));
                

                基本检查是否已经存在与你的路径同名的文件夹或文件。

                【讨论】:

                  【解决方案12】:

                  我创建了我的 inet 文件夹的副本,以复制该站点。它显示“拒绝访问 .../App_Data/viewstate/1/6/6/0 ...”。检查时显示 app_data 文件夹添加了 IIS_IUSER 但未检查修改或写入访问权限。只需选中这些框,实例就会开始运行。

                  【讨论】:

                    【解决方案13】:

                    我也遇到了同样的问题,我承认我花了更多的时间,特别是因为我能够将文件写入同一个文件夹。

                    只有在测试了十几个其他东西后,我才意识到我的“路径”变量只有目录,没有文件名!糟糕,糟糕的错误消息!

                    之前:

                    string path = Server.MapPath("~/App_Data/SpecialFolder"); 
                    

                    之后:

                    string path = Path.Combine(
                          Server.MapPath("~/App_Data/SpecialFolder"),
                          filename); //NOTE: will cause Access Denied if filename is missing or empty!
                    

                    可能最初的错误也不是由于拒绝访问,而是因为选择的“文件名”是一个空字符串。

                    【讨论】:

                      猜你喜欢
                      • 2019-04-28
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-06-25
                      • 1970-01-01
                      • 2011-03-29
                      相关资源
                      最近更新 更多