拒绝访问该路径

时间:2011-02-02 17:33:48

标签: c# .net iis path denied

我知道这个问题在这里被多次询问过,但我无法找到解决问题的方法。 我正在尝试将图像保存到.net c#中的文件夹,但是得到了这个例外:

Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at 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, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)

我完全控制了此文件夹(另存为)network serviceiis_iusrs,甚至完全控制everyone但仍然获得此异常。 我尝试通过资源管理器和IIS管理器进行访问,但仍然没有运气

我在Windows Server 2008 R2和IIS 7.5上进行此操作,我需要提供哪些访问权限?

由于

24 个答案:

答案 0 :(得分:197)

  

拒绝访问路径'C:\ inetpub \ wwwroot \ mysite \ images \ savehere'

仔细阅读信息。您正在尝试保存到与目录同名的文件。这不起作用,你不能用一个新文件覆盖填充文件的目录。这将导致无法识别的数据丢失,“拒绝访问路径”是文件系统反击以防止这种情况发生。

异常消息并不理想,但它直接来自操作系统,它们是一成不变的。该框架通常会添加额外的检查以生成更好的消息,但这对网络来说是一项昂贵的测试。 Perf也是一个功能。

你需要使用像'C:\ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg'这样的名字。考虑Path.Combine()可靠地生成路径名。

答案 1 :(得分:85)

您需要从应用程序池中找到该网站所运行的身份(默认情况下为Application Pool Identity)并授予正确的权限。

答案 2 :(得分:20)

我在尝试在服务器上创建文件时遇到了同样的问题(实际上是一个来自模板的副本文件)。

以下是完整的错误消息:

{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.

我在IIS app文件夹中添加了一个名为Templates的新文件夹。在我的情况下,一个非常重要的事情是我需要为该文件夹上的IUSR用户授予Write(Gravar)权限。您可能还需要为Network ServiceASP.NET v$.#提供相同的写入权限。

enter image description here

完成此操作后,一切都按预期工作。

答案 3 :(得分:11)

我有完全相同的问题。

解决方案是我尝试访问的文件是 readonly ,因为它是从readonly的模板文件中复制的。

< facepalm />

答案 4 :(得分:7)

当我尝试在不设置文件名的情况下保存文件时出现此问题。

旧代码

File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));

工作代码

File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));

答案 5 :(得分:5)

请将IIS_IUSERS完全控制权限添加到您的文件夹中。 您可以从文件夹属性的安全选项卡中找到此选项。 find this option and user in this image

答案 6 :(得分:5)

我的问题是我不得不要求只读读取权:

FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);

答案 7 :(得分:4)

您的Web应用程序的应用程序池的标识是什么,要进行故障排除,尝试使用网络服务作为其标识创建新的应用程序池,并使您的Web应用程序使用您创建的新应用程序池,并查看错误是否仍然存在。

答案 8 :(得分:4)

我解决了这个设置:

  

IIS>应用程序池> [您的网站]>高级设置...>   身份>内置accound>本地系统

答案 9 :(得分:4)

以下提示不是这个帖子的原始问题的答案,但可能会帮助其他一些最终在这个网页上的用户,在我犯了同样的愚蠢错误之后... < / p>

我试图让ASP.Net FileUpload控件将其文件上传到包含“隐藏共享”的网络地址,即:

<强> \ MyNetworkServer \ C $ \ SomeDirectoryOrOther

我不明白。如果我在Visual Studio中以调试模式运行网页,它可以正常工作。但是当项目部署并通过应用程序池用户运行时,它拒绝找到此网络目录。

我已经检查了我的IIS网站运行的用户,给了该用户对“ MyNetworkServer ”服务器等目录的完全权限,但没有任何效果。

原因(当然!)是只有管理员才能“看到”这些隐藏的驱动器共享。

我的解决方案只是创建一个“正常”份额

<强> \ MyNetworkServer \ SomeDirectoryOrOther

这摆脱了“访问路径......被拒绝”的错误。 FileUpload能够成功运行命令

fileUpload.SaveAs(networkFilename);

希望这有助于其他一些犯了同样错误的用户!

另请注意,如果要上载大文件(超过4Mb),则IIS7要求您修改两个位置中的web.config文件。单击此链接可阅读您需要执行的操作: Uploading large files in ASP.Net

答案 10 :(得分:2)

  1. 将设置从内置帐户更改为自定义帐户,然后输入其他服务器的用户名和密码。

  2. 将设置保持为集成(而非经典模式)。

答案 11 :(得分:2)

我的问题是这样的:

FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);

但不是使用路径我应该使用File.FullName ... 我不知道它是否会帮助其他人,只是通过我自己的经验给这个错误!

答案 12 :(得分:1)

也许对您有帮助。

string tempDirectoryPath = @"C:\Users\HOPE\Desktop\Test Folder";
string zipFilePath = @"C:\Users\HOPE\Desktop\7za920.zip";
Directory.CreateDirectory(tempDirectoryPath);
ZipFile.ExtractToDirectory(zipFilePath, tempDirectoryPath);

答案 13 :(得分:0)

我在本地工作站上进行开发时遇到了这个问题。

在多次iisreset次调用失败后,我通过重新启动我的计算机来解决这种情况。

回想起来,打开文件句柄可能会导致问题。

答案 14 :(得分:0)

有一个与我试图写的文件同名的目录,所以人们也可以注意这个。

答案 15 :(得分:0)

在我的情况下,我必须为IIS中的网站添加.NET授权规则。

我添加了允许匿名用户的规则。

.NET Authorization Rules

答案 16 :(得分:0)

将目录 savehere 设为虚拟目录,并从控制面板授予读/写权限

答案 17 :(得分:0)

我遇到了同样的问题,但是我通过将文件保存在其他位置然后复制文件并将其粘贴到我想要的位置来解决此问题。我使用该选项替换了现有文件,这为我成功了。我知道这不是最有效的方法,但是它可以工作并且不到15秒。

答案 18 :(得分:0)

我对此有很多麻烦,特别是与在本地运行的代码有关,但是当我需要在IIS上运行它时,会抛出此错误。我发现向我的代码添加检查,并让应用程序在第一次运行时创建文件夹,从而解决了该问题,而无需弄乱文件夹授权。

在调用使用该文件夹的方法之前,类似这样的事情

bool exists = System.IO.Directory.Exists("mypath");

        if (!exists)
            System.IO.Directory.CreateDirectory("mypath");

答案 19 :(得分:0)

如果在子域中上载文件时遇到此错误,并在localhost中正常工作,请执行以下步骤:

解决方案:

Plesk面板

  • 登录到Plesk面板。选择出现错误的您的子域。
  • 点击 托管设置
  • 选择其他写入/修改权限并应用。

CPanel

  • 我不确定CPanel中可用的选项。但是,如果您授予目录权限(在CPanel中必须为777、755等十进制数字),则可以解决该错误。

For more details refer here

错误原因:

  • 让我们假设FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))是将文件移动到上传路径的代码。
  • Server.MapPath将为您提供目录的物理路径(真实路径)。但是您的Sub域可能没有访问物理路径的权限。

  • 因此,如果您授予子域访问写/修改权限的权限,它将解决此问题。

答案 20 :(得分:0)

您可以尝试检查项目的Web属性是否未切换到IIS Express,然后将其更改回IIS Local

答案 21 :(得分:0)

请确保您在package com.syncfusion; public class Persons { public static void main(String[] args) { Customers customer = new Customers(); customer.addCustomerName("Inteflex Inc"); } } 中的目标文件已存在。 也许您的代码有误;就像您没有将正确的文件名传递给方法一样,或者您的目标是文件夹。在这些情况下,您会看到:“拒绝访问路径错误”。

答案 22 :(得分:0)

就我而言,我试图访问一个设置为只读的文件

enter image description here

我通过禁用只读解决了它,我把它修复了!

enter image description here

希望对我这种情况的人有所帮助。

答案 23 :(得分:-1)

我创建了一个具有完全权限的虚拟目录,并在那里添加了ffmpeg源文件和视频文件,所以最后它是有意义的,因为它可以被任何人访问。