207 votes

L'accès au chemin est refusé

Je sais que cette question a été posée de nombreuses fois ici, mais je n'arrive pas à trouver une solution à mon problème. J'essaie d'enregistrer l'image dans le dossier en .net c# mais j'obtiens cette exception :

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)

J'ai donné le contrôle total de ce dossier (savehere) à network service et iis_iusrs et a même donné le contrôle total à everyone mais je reçois toujours cette exception. J'ai essayé de donner l'accès via l'explorateur et via le gestionnaire IIS, mais toujours pas de chance.

Je le fais sur un serveur Windows 2008 R2 et IIS 7.5. A qui dois-je donner l'accès ?

Merci

0 votes

Avez-vous essayé d'utiliser un chemin relatif à votre application ? Je ne connais pas bien le serveur Windows, mais il se peut qu'il n'autorise pas l'accès à un chemin racine `C:`.

2 votes

Futurs lecteurs : Vérifiez les autorisations sur le fichier.

281voto

Hans Passant Points 475940

Accès au chemin ' C:\inetpub\wwwroot\mysite\images\savehere est refusé

Lisez attentivement le message. Vous essayez d'enregistrer dans un fichier qui a le même nom que le répertoire. Ce n'est pas autorisé. Vous devez utiliser un nom comme ' C:\inetpub\wwwroot\mysite\images\savehere\mumble.jpg '.

28 votes

@Hans Passant Merci pour votre déclaration, un peu dure. Cela m'a fait regarder dans mon code pour me rendre compte que j'avais fait la même erreur.

0 votes

Pour moi, le problème était que le fichier était existant et que l'utilisateur ne pouvait pas le remplacer

2 votes

Hah ! J'ai fait exactement la même chose.

102voto

Oded Points 271275

Vous devez trouver dans le pool d'applications du site web l'identité sous laquelle il est exécuté (par défaut, c'est la suivante Application Pool Identity ) et lui accorder les permissions correctes.

0 votes

Ok, merci, j'ai 5 pools, ils ont tous l'identité suivante ApplicationPoolIdentity Comment puis-je lui donner des autorisations ?

22 votes

@Burjua - cherchez le IIS APPPOOL\DefaultAppPool l'utilisateur. Voir cet article sur le site officiel d'IIS : learn.iis.net/page.aspx/624/application-pool-identities

1 votes

Ok, comme écrit dans cet article j'ai ajouté DefaultAppPool et a donné full control mais j'obtiens toujours la même erreur.

25voto

Leniel Macaferi Points 38324

J'ai eu le même problème en essayant de créer un fichier sur le serveur (en fait un fichier qui est une copie d'un modèle).

Voici le message d'erreur complet :

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

J'ai ajouté un nouveau dossier appelé Templates dans le dossier de l'application IIS. Une chose très importante dans mon cas est que je devais donner la permission d'écrire (Gravar) à l'utilisateur IUSR sur ce dossier. Vous pouvez également avoir besoin de donner Network Service et ASP.NET v$.# la même autorisation d'écriture.

enter image description here

Après avoir fait cela, tout fonctionne comme prévu.

18voto

Ruskin Points 979

J'ai eu exactement le même problème.

La solution était que le fichier auquel j'essayais d'accéder était en lecture seule car il a été copié à partir d'un fichier modèle qui était en lecture seule.

<facepalm />

0 votes

C'est la classe d'application Altova AltovaXML (DCOM) qui s'en charge. Cela m'a causé des problèmes.

0 votes

Je veux dire par là qu'il doit utiliser quelque chose de similaire à la ligne suivante, ce qui signifie que XSLT ne doit pas être en lecture seule. FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);'

1 votes

Voici un <facepalm /> de ma part également. Oh et Merci, readonly était mon problème aussi.

4voto

kd7 Points 16740

Quelle est l'identité de votre pool d'applications pour l'application Web, pour résoudre le problème, essayez de créer un nouveau pool d'applications avec le service réseau comme identité et faites en sorte que votre application Web utilise le nouveau pool d'applications que vous avez créé et voyez si l'erreur persiste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X