Yola erişim reddedildi


165

Bu sorunun burada birçok kez sorulduğunu biliyorum, ama sorunuma bir çözüm bulamıyorum. .Net c # klasörüne görüntü kaydetmeye çalışıyorum ama bu istisna olsun:

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)

Bu klasöre (savehere) tam kontrol verdim network serviceve iis_iusrshatta tam kontrol verdim everyoneama yine de bu istisnayı alıyorum. Explorer ve IIS yöneticisi aracılığıyla erişim sağlamaya çalıştım, hala şans yok

Windows Server 2008 R2 ve IIS 7.5 üzerinde yapıyorum, kime erişim vermeliyim?

Teşekkürler


Uygulamanıza göre bir yol kullanmayı denediniz mi? Windows sunucusu hakkında çok şey bilmiyorum, ancak bir `C:` kök yoluna erişime izin vermiyor olabilir.
Michael K

1
Gelecekteki okuyucular: Dosyadaki izinleri kontrol edin.
Ruskin

Yanıtlar:


94

Web sitesi için uygulama havuzundan, altında çalıştığı kimliğin ne olduğunu (varsayılan olarak bu Application Pool Identity) bulmanız ve doğru izinleri vermeniz gerekir .


Tamam, teşekkürler, 5 havuzum var, hepsinin kimliği var ApplicationPoolIdentity, nasıl izin verebilirim?
Burjua

22
@Burjua - IIS APPPOOL\DefaultAppPoolkullanıcıyı arayın . Resmi IIS sitesindeki bu makaleye bakın: learn.iis.net/page.aspx/624/application-pool-identities
Oded

1
Tamam, bu makalede yazıldığı gibi ekledim DefaultAppPoolve full controlbuna izin verdim , ama yine de aynı hatayı alıyorum
Burjua

2
Çok geç kaldığımı biliyorum. Ama aynı sorunla karşı karşıyayım. OP everyone, Tam kontrole sahip olduğunu açıkça söylemişti . Biz verirsek everyoneTam kontrol, o zaman bile biz erişim izni gerekiyor DefaultAppPool? Kafa karıştırıcı.
Kurban

3
@stom - elbette en iyi uygulama değil. Web sitesini her türlü güvenlik açığına açıyorsunuz. Sadece Imagesweb sitesini çalıştıran kullanıcı / kimlik için dizinde okuma / yazma izinleri istersiniz (ana makine sağlayıcınızdan bunu sormanız gerekir).
Oded

223

'C: \ inetpub \ wwwroot \ sitem \ images \ savehere' yoluna erişim reddedildi

Mesajı dikkatlice okuyun. Dizin ile aynı ada sahip bir dosyaya kaydetmeye çalışıyorsunuz. Bu işe yaramazsa, yeni bir dosya içeren dosyalarla dolu bir dizinin üzerine yazamazsınız. Bu, giderilemez veri kaybına neden olur, "Yola erişim engellendi", bunun olmasını önlemek için mücadele eden dosya sistemidir.

İstisna mesajı ideal değildir, ancak doğrudan işletim sisteminden gelir ve taş dökülür. Çerçeve genellikle daha iyi mesajlar üretmek için ekstra kontroller ekler, ancak bu bir ağ üzerinde pahalı bir testtir. Perf de bir özelliktir.

'C: \ inetpub \ wwwroot \ sitem \ images \ savehere \ mumble.jpg' gibi bir ad kullanmanız gerekir. Yol adını güvenilir bir şekilde oluşturmak için Path.Combine () yöntemini göz önünde bulundurun .


19
@Hans Passant Biraz sert ifadeniz için teşekkürler. Bu da aynı hatayı yapmış olduğumu farketmek benim kod içine bakmak yaptı.
LosManos

benim için sorun, dosyanın mevcut olması ve kullanıcının yerini değiştirebilmesiydi
VinnyG 15

Hah! Ben de aynısını yaptım.
jakejgordon

Belki de "Ben de!" Yanıtlar. Çünkü ben de! Benim durumumda, bir HttpPostedFileBase nesnesinin SaveAs yönteminin adı nesnenin üzerinde başka bir özellik olduğunu düşünerek, yola ek olarak bir ad gerektirdiğini rahatsız olduğunu eklemeliyim. Tabii ki bu şekilde farklı bir isim verebilirsin.
Ralph

1
Bir birim test (IIS veya web ile ilgili bir şey ile ilgisi yok) bir dosya yazmaya çalışırken bu hatayı aldım ve hata iletisi çok belirsiz. Neden "\ path \ to \ file dosyası olarak açılamıyor" satırları arasında bir şey söylemiyor?
MarioDS

22

Sunucuda (aslında bir şablondan bir kopya olan bir dosya) bir dosya oluşturmaya çalışırken aynı sorunu yaşıyordum.

İşte hata iletisinin tamamı:

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

TemplatesIIS uygulama klasörünün içine yeni bir klasör ekledim . Benim durumumda çok önemli bir şey, o klasördeki IUSR kullanıcısı için Yaz (Gravar) izni vermem gerektiğidir. Ayrıca vermek gerekebilir Network Serviceve ASP.NET v$.#aynı Yazma izni.

resim açıklamasını buraya girin

Bunu yaptıktan sonra her şey beklendiği gibi çalışır.


12

Ben tam olarak aynı problem vardı.

Çözüm, erişmeye çalıştığım dosyanın salt okunur olmasıydı bir şablon dosyasından kopyalandığı için salt okunur olmasıydı.

<facepalm />


Altova AltovaXML Uygulama Sınıfı (DCOM) bunu yapıyor. Bana sorun yarattı.
Mike D

Yani, aşağıdaki satıra benzer bir şey kullanıyor olmalı, yani XSLT salt okunur olmamalıdır. 'FileStream ms = new FileStream (yol, FileMode.Open, FileAccess.ReadWrite);'
Mike D

1
İşte benden da bir <facepalm />. Oh ve .. Teşekkürler, salt sorunum da buydu.
Cătălin Rădoi

7

Dosya adı ayarlanmadan dosyayı kaydetmeye çalıştığımda bu sorunu aldım.

Eski Kod

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

Çalışma Kodu

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

6

Benim sorunum sadece Okuma erişimi için sormak zorunda oldu:

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

1
Bingo - bu da beni biraz ısırdı! Gönderi için teşekkürler!
paulsm4

4

Hangi Kimlik, sorun gidermek için kimliğini Ağ Hizmeti olan yeni bir Uygulama Havuzu oluşturmayı deneyin ve web uygulamanızın oluşturduğunuz yeni Uygulama Havuzunu kullanmasını sağlayın ve hatanın devam edip etmediğini görün.


4

Aşağıdaki ipucu bu konunun orijinal sorusunun bir cevabı değildir , ancak yaptığım aynı aptal hatayı yaptıktan sonra bu web sayfasında bulunan bazı diğer kullanıcılara yardımcı olabilir ...

Bu dosyayı bir " gizli paylaşım " içeren bir ağ adresine yüklemek için bir ASP.Net FileUpload kontrolü almaya çalışıyordum , yani:

\ MyNetworkServer \ c $ \ SomeDirectoryOrOther

Ben anlamadım. Web sayfasını Visual Studio'da Hata Ayıklama modunda çalıştırırsam, düzgün çalışır. Ancak proje dağıtıldığında ve bir Uygulama Havuzu kullanıcısı aracılığıyla çalıştırıldığında, bu ağ dizinini bulmayı reddetti.

IIS sitemin hangi kullanıcı altında çalıştığını kontrol ettim, bu kullanıcıya " MyNetworkServer " sunucusunda vb . Bu dizine tam izinler verdim , ama hiçbir şey işe yaramadı.

Sebebi (elbette!) Yalnızca Yöneticilerin bu gizli disk paylaşımlarını "görebilmeleri" dir.

Benim çözümüm sadece "normal" bir paylaşım yaratmaktı.

\ MyNetworkServer \ SomeDirectoryOrOther

Bu da "Yola erişim reddedildi" hatasından kurtuldu. FileUpload komutu başarıyla çalıştırabildi

fileUpload.SaveAs(networkFilename);

Umarım yaptığım aynı hatayı yapan diğer bazı kullanıcılara yardımcı olur!

Ayrıca büyük dosyalar (4Mb üzerinde) yüklüyorsanız, IIS7'nin web.config dosyasını iki yerde değiştirmeniz gerektiğini unutmayın . Yapmanız gerekeni okumak için bu bağlantıyı tıklayın: ASP.Net'te büyük dosyalar yükleme


4

lütfen klasörünüze IIS_IUSERS tam denetim izni ekleyin. bu seçeneği klasör özelliklerindeki güvenlik sekmesinden bulabilirsiniz. bu görüntüde bu seçeneği ve kullanıcıyı bul


Kötü tavsiye. Dikkatli bir değerlendirme yapmadan - - Keyfi IIS_USERS "tam kontrol" veriyor diyerek ahlaki eşdeğer "Hemşire - testereyi";)
paulsm4

4

Bu ayar ile Çözdüm:

IIS> Uygulama Havuzları> [siteniz]> Gelişmiş Ayarlar ...> Kimlik> Yerleşik hesap> LocalSystem


2
Bu, Web Sitenize LocalAdmin izinlerini verir. Bu bir güvenlik sorunudur.
Rich-Lang

1
Web sitenizi HİÇBİR ZAMAN LocalSystem hesabı altında çalıştırmayın. HİÇ. SÜRESİ.
Mihail Shishkov

@MihailShishkov neden?
Mohammad Hossein Ganjyar

2
@MohammadHosseinGanjyar LocalSystem sistem üzerinde yönetici haklarına sahiptir. Web sitesini bu hesap altında çalıştırarak, ona tüm sistemin ve muhtemelen sunucunun bulunduğu tüm yerel ağın anahtarlarını verirsiniz. Bu, bir saldırgan web sitenizi kullanmanın bir yolunu bulursa - web sitesinin ve tüm sistemin vidalandığı anlamına gelir. İlk etapta ayrıcalıkların / hakların ve hesapların var olmasının nedeni budur. Başparmak kuralı olarak bunu hatırlayın - hiçbir yazılım daha büyük ayrıcalıklarla çalışmamalıdır, o zaman işini yapması gerekir. Örneğin, blog sitesi D'yi biçimlendirme hakkına ihtiyaç duymaz: sürücü
Mihail Shishkov

2

Benim sorunum böyle bir şeydi:

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

ama yolu kullanmak yerine File.FullName kullanmalıyım ... Başka birine yardım edip etmeyeceğini bilmiyorum, sadece verilen bu hata ile kendi deneyimimi geçerek!


2
  1. Ayarı yerleşik hesaptan özel hesaba değiştirin ve diğer sunucunun kullanıcı adını ve şifresini girin.

  2. Ayarı entegre olarak saklayın (klasik mod yerine).


1

Belki sana yardım eder.

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

0

Dizin olun savehere sanal dizin olması ve kontrol panelinden okuma / yazma iznine vermek


Run Inetmgr.exe Klasörünüz sonra gitmek savehere altında mysite o DefaultApp bulunduğu sol tarafta olacak (web uygulaması IIS içinde / web sitesi) i u ı söylüyorum got umut
Sert Baid

0

Yazmaya çalıştığım dosyayla aynı ada sahip bir dizin vardı, böylece insanlar da bunun için bakabilirler.


0

Yerel iş istasyonumda gelişirken bu sorunla karşılaştım.

Birkaç başarısız iisresetçağrının ardından , makinemi yeniden başlatarak bu durumu düzelttim .

Geriye bakıldığında, açık bir dosya tanıtıcısı sorunlara neden olmuş olabilir.


0

Benim durumumda, IIS'deki web sitesi için bir .NET Yetkilendirme Kuralı eklemek zorunda kaldım.

Anonim kullanıcılara izin vermek için bir kural ekledim.

.NET Yetkilendirme Kuralları


0

Aynı sorunu vardı ama dosyayı farklı bir konuma kaydedip sonra dosyayı kopyalayıp olmasını istediğim yere yapıştırarak düzelttim. Mevcut dosyayı değiştirme seçeneğini kullandım ve bu benim için hile yaptı. Bunun en etkili yol olmadığını biliyorum ama çalışıyor ve 15 saniyeden daha kısa sürüyor.


0

Özellikle yerel olarak çalışan kodum ile ilgili, bu konuda bir sürü sorun vardı ama IIS üzerinde çalıştırmak gerektiğinde bu hatayı atıyordu. Koduma bir onay eklemenin ve uygulamanın ilk çalıştırmada klasör oluşturmasına izin vermenin klasör yetkileriyle uğraşmak zorunda kalmadan sorunu çözdüğünü buldum.

klasörü kullanan yönteminizi çağırmadan önce böyle bir şey

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

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

0

Alt etki alanına dosya yüklerken ve cihazınızda doğru çalışırken bu hatayı alırsanız localhost, aşağıdaki adımları izleyin:

Çözüm:

Plesk Paneli

  • Plesk Panelinize giriş yapın. Hata veren Alt alan adınızı seçin.
  • Barındırma ayarları'nı tıklayın .
  • Seç / Ek yazma izinlerini değiştirmek ve uygulayın.

CPanel

  • CPanel'de mevcut seçenekler hakkında emin değilim. Ancak dizine izin verirseniz (CPanel'de 777, 755 gibi ondalık sayı olmalıdır) hatayı çözecektir.

Daha fazla ayrıntı için buraya bakın

Hata Nedeni:

  • FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))Dosyalarınızı yükleme yoluna taşımak için kodunuz olacağını varsayalım .
  • Server.MapPathdizinin fiziksel yolunu (Gerçek Yol) verecektir. Ancak Alt alan adınızın fiziksel yollara erişim izni olmayabilir.

  • Bu nedenle, alt etki alanına yazma / değiştirme iznine erişim izni verirseniz, sorun çözülecektir.


0

Proje için web mülklerinizin IIS Express'e geçip geçmediğini kontrol etmeyi ve tekrar IIS Yerel olarak değiştirmeyi deneyebilirsiniz


0

Hedefinizin System.IO.Delete(string file)var olan bir dosya olduğundan emin olun . Belki kodunuzda bir hata var; Yönteme doğru dosya adını vermiyorsunuz veya hedefiniz bir klasör. Bu durumlarda şunu görürsünüz: "yola erişim engellendi".


-1

Tam izinli bir sanal dizin oluşturdum ve ffmpeg kaynağı ve video dosyalarını oraya ekledim, bu yüzden sonunda herkes tarafından erişilebileceği için mantıklı geldi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.