पथ पर पहुँचना अस्वीकार है


165

मुझे पता है कि यह सवाल यहां कई बार पूछा गया था, लेकिन मैं अपनी समस्या का हल नहीं ढूंढ सकता। मैं .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)

मैं के लिए इस फ़ोल्डर (savehere) करने के लिए पूर्ण नियंत्रण दिया network serviceऔर iis_iusrs, यहां तक कि करने के लिए पूर्ण नियंत्रण दिया everyone, लेकिन अभी भी यह अपवाद हो रही। मैंने खोजकर्ता के माध्यम से और IIS प्रबंधक के माध्यम से पहुंच देने की कोशिश की, फिर भी कोई भाग्य नहीं

मैं इसे विंडोज सर्वर 2008 आर 2 और आईआईएस 7.5 पर कर रहा हूं, मुझे एक्सेस देने की क्या जरूरत है?

धन्यवाद


क्या आपने अपने आवेदन के सापेक्ष पथ का उपयोग करने की कोशिश की है? मैं विंडोज सर्वर के बारे में ज्यादा नहीं जानता, लेकिन यह हो सकता है कि यह एक `सी:` रूट पथ तक पहुंच की अनुमति नहीं देता है।
माइकल के

1
भविष्य के पाठक: फ़ाइल पर अनुमतियों की जाँच करें।
रस्किन

जवाबों:


94

आपको वेबसाइट के लिए एप्लिकेशन पूल से यह पता लगाने की आवश्यकता है कि यह किस पहचान के तहत चल रहा है (डिफ़ॉल्ट रूप से यह है Application Pool Identity) और सही अनुमति दें।


ठीक है, धन्यवाद, मेरे पास 5 पूल हैं, वे सभी पहचान के रूप में हैं ApplicationPoolIdentity, मैं इसे कैसे अनुमति देता हूं?
बुर्जुआ

22
@ बुर्जुआ - IIS APPPOOL\DefaultAppPoolउपयोगकर्ता के लिए देखो । इस लेख को आधिकारिक IIS साइट पर देखें: learn.iis.net/page.aspx/624/application-pool-identities
Oded

1
ठीक है, जैसा कि इस लेख में मैंने लिखा था DefaultAppPoolऔर इसे full controlअनुमति दी थी, लेकिन अभी भी एक ही त्रुटि मिल रही है
बुर्जुआ

2
मुझे पता है कि मुझे बहुत देर हो चुकी है। लेकिन मैं उसी समस्या का सामना कर रहा हूं। ओपी ने स्पष्ट रूप से उल्लेख किया था कि उसने everyoneपूर्ण नियंत्रण दिया था । यदि हम everyoneपूर्ण नियंत्रण प्रदान करते हैं, तो भी हमें पहुँच प्रदान करने की आवश्यकता है DefaultAppPool? यह भ्रमित करने वाला है।
क़ुर्बान

3
@stom - बेशक यह सबसे अच्छा अभ्यास नहीं है। आप सभी प्रकार की कमजोरियों के लिए वेबसाइट खोल रहे हैं। आप बस Imagesउस उपयोगकर्ता / पहचान के लिए निर्देशिका को पढ़ना / लिखना चाहते हैं जो वेबसाइट चला रहा है (आपको उस बारे में अपने होस्ट प्रदाता से पूछना होगा)।
ओडेड

223

पथ 'C: \ inetpub \ wwwroot \ mysite \ images \ savehere' तक पहुँच अस्वीकृत है

संदेश को ध्यान से पढ़ें। आप उस फ़ाइल को सहेजने का प्रयास कर रहे हैं जिसमें निर्देशिका के समान नाम है। यह काम नहीं कर सकता, आप एक नई फ़ाइल के साथ फ़ाइलों से भरी निर्देशिका को अधिलेखित नहीं कर सकते। ऐसा करने से डेटा हानि हो सकती है, "पथ से प्रवेश निषेध है" ऐसा करने से रोकने के लिए फ़ाइल सिस्टम वापस लड़ रहा है।

अपवाद संदेश आदर्श नहीं है, लेकिन यह सीधे ओएस से आता है और वे पत्थर में डाले जाते हैं। फ्रेमवर्क अक्सर बेहतर संदेश उत्पन्न करने के लिए अतिरिक्त चेक जोड़ता है, लेकिन यह एक नेटवर्क पर एक महंगा परीक्षण है। पर्फेक्ट एक फीचर भी है।

आपको 'C: \ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg' जैसे नाम का उपयोग करने की आवश्यकता है। Path.Combine () पर विचार करने के लिए मज़बूती से पथ का नाम उत्पन्न करें।


19
@ हेंस पासेंट थैंक्स फॉर योर बिट, हार्ड, स्टेटमेंट। इससे मुझे अपने कोड में पता चला कि मुझे वही त्रुटि हुई थी।
१०:१५ पर लॉसमनोस

मेरे लिए, समस्या यह थी कि फ़ाइल मौजूद थी और उपयोगकर्ता इसे बदल सकता था
VinnyG

हा! मैंने बिलकुल वैसा ही किया।
जेकजगार्डन

शायद "मुझे भी!" जवाब। क्योंकि मैं भी! मेरे मामले में मुझे यह जोड़ना चाहिए कि मुझे गुस्सा आ रहा है कि HttpPostedFileBase ऑब्जेक्ट के सेवर्स मेथड को पथ के अतिरिक्त एक नाम की आवश्यकता है, नाम पर विचार करना ऑब्जेक्ट पर एक अन्य गुण है। बेशक, मुझे लगता है कि आप इसे इस तरह एक अलग नाम दे सकते हैं।
राल्फ

1
एक यूनिट टेस्ट (IIS या कुछ भी वेब से संबंधित कुछ भी नहीं करने) में एक फ़ाइल लिखने की कोशिश करते समय मुझे यह त्रुटि मिली, और त्रुटि संदेश इतना अस्पष्ट है। यह "फ़ाइल के रूप में \ path \ to \ file नहीं खोल सकता" की तर्ज पर कुछ क्यों नहीं कहता है?
मारियोड्स

22

सर्वर पर एक फ़ाइल बनाने की कोशिश करते समय मुझे वही समस्या हो रही थी (वास्तव में एक फ़ाइल जो टेम्पलेट से कॉपी है)।

यहां संपूर्ण त्रुटि संदेश दिया गया है:

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

मैंने TemplatesIIS ऐप फ़ोल्डर के अंदर एक नया फ़ोल्डर जोड़ा । मेरे मामले में एक बहुत महत्वपूर्ण बात यह है कि मुझे उस फ़ोल्डर पर IUSR उपयोगकर्ता के लिए राइट (Gravar) अनुमति देने की आवश्यकता थी। आपको देने की भी आवश्यकता हो सकती है Network Serviceऔर ASP.NET v$.#वही लिखने की अनुमति भी दी जा सकती है।

यहां छवि विवरण दर्ज करें

ऐसा करने के बाद सब कुछ उम्मीद के मुताबिक काम करता है।


12

मेरे साथ भी ठीक यही समस्या आई.

समाधान यह था कि जिस फ़ाइल को मैं एक्सेस करने की कोशिश कर रहा था , वह आसानी से थी , क्योंकि इसे एक टेम्पलेट फ़ाइल से कॉपी किया गया था, जो आसानी से पढ़ी जा रही थी ।

<फेसपालम />


Altova AltovaXML एप्लीकेशन क्लास (DCOM) यह कर रही है। जिससे मुझे परेशानी हुई।
माइक डी।

जिससे मेरा मतलब है, यह निम्नलिखित लाइन के समान कुछ का उपयोग करना चाहिए, जिसका अर्थ है कि XSLT को आसानी से नहीं पढ़ा जाना चाहिए। 'FileStream ms = नया FileStream (पथ, FileMode.Open, FileAccess.ReadWrite);'
माइक डी

1
यहाँ एक <facepalm /> मुझसे भी है। ओह और .. धन्यवाद, आसानी से मेरी समस्या भी थी।
केल्टीन रियॉडी

7

फ़ाइल नाम सेट किए बिना फ़ाइल को सहेजने का प्रयास करने पर मुझे यह समस्या हुई।

पुराना कोड

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

कार्य कोड

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

6

मेरी समस्या यह थी कि मुझे रीड एक्सेस के लिए पूछना था:

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

1
बिंगो - यह एक बिट मुझे भी! इस पोस्ट के लिए धन्यवाद!
पल्सम 4

4

वेब एप्लिकेशन के लिए आपका एप्लिकेशन पूल क्या है, समस्या निवारण के लिए, अपनी पहचान के रूप में नेटवर्क सेवा के साथ एक नया ऐप पूल बनाने का प्रयास करें और अपने वेब एप्लिकेशन का उपयोग उस नए ऐप पूल को करें जिसे आपने बनाया था और देखें कि क्या त्रुटि बनी रहती है।


4

निम्नलिखित टिप इस थ्रेड के मूल प्रश्न का उत्तर नहीं है , लेकिन कुछ अन्य उपयोगकर्ताओं की मदद कर सकता है जो इस वेबपेज पर समाप्त होते हैं, वही बेवकूफ बनाने के बाद जो मैंने किया था ...

मैं एक ASP.Net FileUpload नियंत्रण प्राप्त करने का प्रयास कर रहा था ताकि यह एक नेटवर्क पते पर फ़ाइल अपलोड किया जा सके जिसमें " छिपा हुआ हिस्सा " शामिल हो:

\ MyNetworkServer \ ग $ \ SomeDirectoryOrOther

मुझे यह समझ में नहीं आया। अगर मैं विजुअल स्टूडियो में डिबग मोड में वेबपेज चलाता हूं, तो यह ठीक काम करेगा। लेकिन जब परियोजना को तैनात किया गया था, और एक अनुप्रयोग पूल उपयोगकर्ता के माध्यम से चल रहा था, तो उसने इस नेटवर्क निर्देशिका को खोजने से इनकार कर दिया।

मैंने जाँच की थी कि मेरी IIS साइट किस उपयोगकर्ता के अंतर्गत चल रही थी, इस उपयोगकर्ता को " MyNetworkServer " सर्वर आदि पर इस निर्देशिका की पूर्ण अनुमति दी , लेकिन कुछ भी काम नहीं किया।

कारण (निश्चित रूप से!) यह है कि केवल व्यवस्थापक ही इन छिपे हुए ड्राइव शेयरों को "देख" सकते हैं।

मेरा समाधान बस एक "सामान्य" हिस्सा बनाने के लिए था

\ MyNetworkServer \ SomeDirectoryOrOther

और इससे "पथ तक पहुंच ... अस्वीकृत है" त्रुटि से छुटकारा मिला। FileUpload कमांड को सफलतापूर्वक चलाने में सक्षम था

fileUpload.SaveAs(networkFilename);

आशा है कि यह कुछ अन्य उपयोगकर्ताओं को मदद करता है जो मैंने वही गलती की थी!

ध्यान दें कि यदि आप बड़ी फाइलें (4Mb से अधिक) अपलोड कर रहे हैं, तो IIS7 के लिए आवश्यक है कि आप web.config फ़ाइल को दो स्थानों पर संशोधित करें । आपको क्या करना है यह पढ़ने के लिए इस लिंक पर क्लिक करें: ASP.Net में बड़ी फ़ाइलों को अपलोड करना


4

कृपया अपने फ़ोल्डर में IIS_IUSERS पूर्ण नियंत्रण अनुमति जोड़ें। आपको यह विकल्प फ़ोल्डर गुणों में सुरक्षा टैब से मिलता है। इस छवि में यह विकल्प और उपयोगकर्ता खोजें


बुरी सलाह। मनमाने ढंग से IIS_USERS को "पूर्ण नियंत्रण" देना - बिना सावधानी के विचार - "नर्स" या चेनसा कहने का नैतिक समकक्ष है;)
Paulsm4

4

मैंने इस सेटिंग के साथ हल किया:

IIS> एप्लिकेशन पूल> [आपकी साइट]> उन्नत सेटिंग्स ...> पहचान> अंतर्निहित लहजा> लोकल सिस्टम


2
यह आपकी वेबसाइट LocalAdmin अनुमतियाँ दे रही है। यह एक सुरक्षा चिंता है।
रिच-लैंग

1
कभी भी लोकल सिस्टम खाते के तहत अपनी वेबसाइट न चलाएं। कभी। अवधि।
मिहेल शिशकोव


2
@MohammadHosseinGanjyar LocalSystem के पास सिस्टम पर अधिकार हैं। उस खाते के तहत वेबसाइट को चलाकर आप मूल रूप से इसे पूरे सिस्टम की कुंजी देते हैं और शायद पूरे स्थानीय नेटवर्क को जिस पर सर्वर रहता है। इसका मतलब यह है कि अगर कोई हमलावर आपकी वेबसाइट का फायदा उठाने का तरीका ढूंढता है - वेबसाइट और पूरी प्रणाली खराब हो जाती है। यही कारण है कि विशेषाधिकार / अधिकार और खाते पहले स्थान पर मौजूद हैं। अंगूठे के एक नियम के रूप में यह याद रखें - कोई भी सॉफ़्टवेयर अधिक विशेषाधिकारों के साथ नहीं चलना चाहिए, फिर उसे अपना काम करने की आवश्यकता है। उदाहरण के लिए ब्लॉग साइट को D: ड्राइव
Mihail Shishkov

2

मेरी समस्या कुछ इस तरह थी:

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

लेकिन रास्ते का उपयोग करने के बजाय मुझे File.FullName का उपयोग करना चाहिए ... मुझे नहीं पता कि यह किसी और की मदद करने जा रहा है, बस दिए गए इस इरो के साथ अपना खुद का अनुभव पारित कर रहा हूं!


2
  1. बिल्ट-इन अकाउंट से कस्टम अकाउंट में सेटिंग बदलें और दूसरे सर्वर का यूजर नेम और पासवर्ड डालें।

  2. सेटिंग को एकीकृत (क्लासिक मोड के बजाय) रखें।


1

शायद यह आपकी मदद करे।

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

0

निर्देशिका को वर्चुअल निर्देशिका बनाने के लिए सुरक्षित रखें और नियंत्रण कक्ष से पढ़ने / लिखने की अनुमति दें


InetMgr.exe चलाएं, फिर mysite (IIS में वेब एप्लिकेशन / वेब साइट) के तहत अपने फ़ोल्डर पर जाएं। यह बाएं हाथ की तरफ होगा जहां DefaultApp स्थित है, मुझे आशा है कि मुझे मिल गया है
हर्ष बैद

0

उसी नाम से एक निर्देशिका थी जिस फ़ाइल को मैं लिखने की कोशिश कर रहा था, इसलिए लोग उसके लिए भी देख सकते हैं।


0

मुझे अपने स्थानीय कार्य केंद्र पर विकास करते समय इस समस्या का सामना करना पड़ा।

कई असफल iisresetआक्रमणों के बाद , मैंने अपनी मशीन को रिबूट करके इस स्थिति को सुधार लिया ।

रेट्रोस्पेक्ट में, एक खुला फ़ाइल हैंडल समस्याएँ पैदा कर रहा होगा।


0

मेरे मामले में मुझे IIS में वेब साइट के लिए एक .NET प्राधिकरण नियम जोड़ना था।

मैंने अनाम उपयोगकर्ताओं को अनुमति देने के लिए एक नियम जोड़ा है।

.NET प्राधिकरण नियम


0

मुझे भी यही समस्या थी, लेकिन मैंने फ़ाइल को किसी भिन्न स्थान पर सहेज कर और फिर फ़ाइल की प्रतिलिपि बनाकर उसे उस स्थान पर चिपका दिया, जहाँ मैं चाहता था। मैंने मौजूदा फ़ाइल को बदलने के लिए विकल्प का उपयोग किया और उसने मेरे लिए चाल चली। मुझे पता है कि यह सबसे कुशल तरीका नहीं है, लेकिन यह काम करता है और 15 सेकंड से कम समय लेता है।


0

मुझे इससे बहुत परेशानी हुई, विशेष रूप से स्थानीय रूप से चलने वाले मेरे कोड से संबंधित, लेकिन जब मुझे इसे IIS पर चलाने की आवश्यकता हुई तो यह त्रुटि फेंक रहा था। मैंने पाया कि मेरे कोड में एक चेक जोड़ने और एप्लिकेशन को पहले प्राधिकरण पर फ़ोल्डर बनाने की अनुमति देता है, फ़ोल्डर प्राधिकरणों के साथ गड़बड़ किए बिना समस्या को ठीक किया।

कुछ इस तरह से आप अपने तरीके से कहते हैं कि फ़ोल्डर का उपयोग करता है

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

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

0

यदि आपको उप डोमेन में फ़ाइलें अपलोड करते समय और अपने में सही काम करते हुए यह त्रुटि मिलती है localhost, तो नीचे दिए गए चरणों का पालन करें:

उपाय:

Plesk पैनल

  • अपने Plesk पैनल में लॉगिन करें। आपका उप डोमेन चुनें जो त्रुटि दे रहा है।
  • होस्टिंग सेटिंग्स पर क्लिक करें
  • अतिरिक्त लेखन / अनुमतियों को संशोधित करें और लागू करें का चयन करें।

CPanel

  • मैं CPanel में उपलब्ध विकल्पों के बारे में निश्चित नहीं हूं। लेकिन यदि आप निर्देशिका को अनुमति देते हैं (CPanel में इसे 777, 755 की तरह दशमलव संख्या होना चाहिए) तो त्रुटि का समाधान होगा।

अधिक जानकारी के लिए यहां देखें

त्रुटि का कारण:

  • मान लें FileUpload.SaveAs(Server.MapPath("~/uploads/" + *YOUR_FILENAME*))कि पथ अपलोड करने के लिए आपकी फ़ाइलें स्थानांतरित करने के लिए आपका कोड होगा।
  • Server.MapPathआपको निर्देशिका का भौतिक पथ (रियल पाथ) देगा। लेकिन आपके उप डोमेन में भौतिक पथ तक पहुँचने की अनुमति नहीं हो सकती है।

  • इसलिए, यदि आप उप डोमेन के लिए लिखने / संशोधित करने की अनुमति देते हैं, तो यह समस्या को हल करेगा।


0

आप यह जांचने की कोशिश कर सकते हैं कि क्या प्रोजेक्ट के लिए आपकी वेब प्रॉपर्टी IIS एक्सप्रेस में स्विच नहीं हुई और इसे वापस IIS लोकल में बदल दिया


0

सुनिश्चित करें कि आप अपने लक्ष्य में System.IO.Delete(string file)एक फ़ाइल है जो मौजूद है। हो सकता है कि आपके कोड में कोई गलती हो, जैसे आप विधि के लिए सही फ़ाइल का नाम नहीं देते हैं, या आपका लक्ष्य एक फ़ोल्डर है। इन मामलों में आप देखेंगे: "पथ का उपयोग त्रुटि से वंचित है"।


-1

मैंने पूरी अनुमति के साथ एक आभासी dir बनाया और ffmpeg स्रोत और वीडियो फ़ाइलों को वहां जोड़ा, इसलिए अंत में इसका अर्थ हुआ क्योंकि यह किसी के द्वारा भी किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.