Доступ к пути запрещен - PullRequest
       70

Доступ к пути запрещен

152 голосов
/ 02 февраля 2011

Я знаю, что этот вопрос задавался здесь много раз, но я не могу найти решение своей проблемы.Я пытаюсь сохранить изображение в папке в .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 service и iis_iusrs, даже дал полныйконтролировать everyone, но все еще получаю это исключение.Я пытался дать доступ через проводник и через диспетчер IIS, но все же не повезло

Я делаю это на Windows Server 2008 R2 и IIS 7.5, Кому мне нужно дать доступ?

Спасибо

Ответы [ 19 ]

204 голосов
/ 02 февраля 2011

Доступ к пути 'C: \ inetpub \ wwwroot \ mysite \ images \ savehere' запрещен

Внимательно прочитайте сообщение. Вы пытаетесь сохранить файл, имя которого совпадает с именем каталога. Это не может работать, вы не можете перезаписать каталог, заполненный файлами, одним новым файлом. Это может привести к неустранимой потере данных: «Доступ к пути запрещен» - это файловая система, борющаяся за предотвращение этого.

Сообщение об исключении не является идеальным, но оно исходит прямо из ОС и отлито из камня. Платформа часто добавляет дополнительные проверки для создания более качественных сообщений, но это дорогостоящий тест в сети. Перф это тоже особенность.

Вам необходимо использовать имя типа «C: \ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg». Рассмотрим Path.Combine () , чтобы надежно сгенерировать имя пути.

85 голосов
/ 02 февраля 2011

Вам нужно узнать из пула приложений для веб-сайта, под каким именем он работает (по умолчанию это Application Pool Identity), и предоставить ему правильные разрешения.

20 голосов
/ 08 августа 2012

У меня возникла та же проблема при попытке создать файл на сервере (на самом деле это файл, который является копией шаблона).

Вот полное сообщение об ошибке:

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

Я добавил новую папку с именем Templates в папку приложения IIS.В моем случае очень важно то, что мне нужно было дать разрешение на запись (Gravar) для пользователя IUSR в этой папке.Вам также может понадобиться дать Network Service и ASP.NET v$.# одно и то же разрешение на запись.

enter image description here

После этого все работает как положено.

11 голосов
/ 16 июля 2012

У меня была точно такая же проблема.

Решением было то, что файл, к которому я пытался получить доступ, был только для чтения , так как он был скопирован из файла шаблона, который был доступен только для чтения.*

7 голосов
/ 10 февраля 2016

У меня возникла эта проблема при попытке сохранить файл без указания имени файла.

Старый код

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

Рабочий код

File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));
5 голосов
/ 29 августа 2017

пожалуйста, добавьте IIS_IUSERS разрешение на полный доступ к вашей папке. Вы найдете эту опцию на вкладке безопасности в свойствах папки. find this option and user in this image

5 голосов
/ 26 февраля 2013

Моя проблема заключалась в том, что мне нужно было запрашивать только чтение:

FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);
4 голосов
/ 02 февраля 2011

Каким удостоверением является ваш пул приложений для веб-приложения, в котором для устранения неполадок попробуйте создать новый пул приложений, скажем, в качестве идентификатора сетевой службы, и заставить ваше веб-приложение использовать созданный вами новый пул приложений и посмотреть, не исчезнет ли ошибка,

4 голосов
/ 25 августа 2011

Следующий совет не является ответом на оригинальный вопрос этой темы, но может помочь некоторым другим пользователям, попавшим на эту веб-страницу, после совершения той же глупой ошибки, которую я только что сделал ...

Я пытался получить элемент управления ASP.Net FileUpload для загрузки его файла на сетевой адрес, который содержал « скрытый общий ресурс », а именно:

\ MyNetworkServer\ c $ \ SomeDirectoryOrOther

Я не понял этого.Если бы я запускал веб-страницу в режиме отладки в Visual Studio, она бы работала нормально.Но когда проект был развернут и запущен через пользователя пула приложений, он отказался найти этот сетевой каталог.

Я проверил, под каким пользователем работает мой сайт IIS, дал этому пользователю полные разрешения для этого каталога.на сервере " MyNetworkServer " и т. д., но ничего не помогло.

Причина (конечно!) в том, что только администраторы могут "видеть" эти скрытые общие папки.

Моим решением было просто создать «нормальный» общий ресурс для

\ MyNetworkServer \ SomeDirectoryOrOther

, и это избавило от «Доступа кпуть ... запрещен "ошибка.FileUpload смог успешно выполнить команду

fileUpload.SaveAs(networkFilename);

Надеюсь, что это поможет некоторым другим пользователям, которые совершают ту же ошибку, что и я!

Обратите внимание, что если вы загружаете большие файлы (более4Mb), то IIS7 требует, чтобы вы изменили файл web.config в двух местах.Нажмите на эту ссылку, чтобы прочитать, что вам нужно сделать: Загрузка больших файлов в ASP.Net

4 голосов
/ 21 ноября 2017

Я решил с помощью этой настройки:

IIS> Пулы приложений> [ваш сайт]> Расширенные настройки ...> Идентификация> Встроенный доступ> LocalSystem

...