2011-07-23 5 views
8

के रूप में चलते समय मैप किए गए नेटवर्क ड्राइव के अस्तित्व से इंकार कर देता है। मैं विंडोज 7 पर एक छोटा .NET प्रोग्राम लिख रहा हूं। एक चीज जो मुझे करने की ज़रूरत है वह प्रतीकात्मक लिंक बनाना है, जो मुझे लगता है कि मुझे प्रबंधक के फ़ायदे। इसे मैप किए गए नेटवर्क ड्राइव के साथ काम करने में भी सक्षम होना चाहिए (उदाहरण के लिए, आर: \, जो मेरे सिस्टम मैप्स पर \\titanium\Private\)।.NET Directory.Exists व्यवस्थापक

मैं यह सत्यापित करने के लिए Directory.Exists(path) का उपयोग कर रहा हूं कि एक पथ मौजूद है।

नियमित उपयोगकर्ता के रूप में प्रोग्राम चलाते समय (व्यवस्थापक खाता, लेकिन "व्यवस्थापक के रूप में नहीं"), यह मैप किए गए नेटवर्क ड्राइव पर ठीक काम करता है।

एक व्यवस्थापक के रूप में प्रोग्राम चलाते समय (यूएसी के साथ), यह मौजूद निर्देशिकाओं को खोजने में विफल रहता है। नतीजतन, कार्यक्रम यह स्वीकार करने से इंकार कर देता है कि R:\Steam Games\ एक निर्देशिका है जो वास्तव में मौजूद है।

मैं थोड़ा सा परेशान हूं कि यह क्यों हो रहा है। पूर्ण यूएनसी पथ (\\titanium\Private\Steam Games\) का उपयोग करना भी काम नहीं करता है।

क्या कोई इससे पहले इसमें भाग लेता है? क्या कोई अच्छा कामकाज है? क्या मुझे पथ अलग-अलग प्रारूपित करना है (नोट: उनमें से अधिकतर वर्तमान में Path.Combine के साथ स्वरूपित हैं, इसलिए सही होना चाहिए)।

आपकी मदद के लिए धन्यवाद।

(उदाहरण के तौर पर, Directory.Exists(@"R:\Steam Games\") व्यवस्थापक के रूप में चलते समय झूठी रिटर्न देता है, लेकिन वह फ़ोल्डर मौजूद है। फ़ंक्शन कॉल नियमित रूप से चलते समय सही ढंग से सत्य लौटाता है)।

संपादित करें: वास्तव में यह मुद्दा यह प्रतीत होता है कि एक व्यवस्थापक तकनीकी रूप से एक अलग उपयोगकर्ता खाता है। मैं यूएनसी पथों का भी उपयोग नहीं कर सका, क्योंकि मैं अपने नियमित उपयोगकर्ता के तहत केवल "प्रशासक" के तहत नहीं, मेरे फाइलरवर में लॉग इन था। एक (अपेक्षाकृत हैकिश) वर्कअराउंड के रूप में, मैं अपने प्रोग्राम को नियमित विशेषाधिकारों के साथ चलाता हूं और फिर Process.Start का उपयोग प्रतीकात्मक लिंक बनाने के लिए cmd.exe के उदाहरण को आमंत्रित करने के लिए करता हूं (और यूएसी प्रॉम्प्ट प्राप्त करने के लिए क्रिया "रनस")।

+0

ऑफ़-विषय के रूप में बंद करने के लिए वोट दिया गया। यहां समस्या यूएसी है (और यूएसी उपयोगकर्ता गैर-यूएसी-उपयोगकर्ता के समान सत्र में नहीं है), और इसका प्रोग्रामिंग के साथ कुछ लेना देना नहीं है। – Lucero

+9

मुझे लगता है कि यह बहुत ही विषय पर है, एक प्रोग्रामर के रूप में आपको उन मुद्दों से दूर रहने की आवश्यकता है जो एक अंतिम उपयोगकर्ता आपके प्रोग्राम को बढ़ाने का फैसला करता है। –

+0

मैं स्कॉट से सहमत हूं। यह एक आम प्रोग्रामिंग समस्या है और मेरी राय में यह इसके लिए एक महान साइट है। –

उत्तर

7

विंडोज़ में मैप किए गए ड्राइव उपयोगकर्ता संदर्भ से बंधे हैं। एक खाते में मैप किए गए ड्राइव: उपयोगकर्ता ए, उपयोगकर्ताबी के लिए सुलभ नहीं होगा। हालांकि आप अलग-अलग उपयोगकर्ताओं के तहत एक ही ड्राइव अक्षर में मैप किए गए एक ही unc पथ को बना सकते हैं।

पूर्ण unc पथ का उपयोग करना चाहिए हालांकि काम करना चाहिए।

support.microsoft.com पर अधिक जानकारी: 1, 2

+0

पूर्ण यूएनसी पथ या तो काम नहीं कर रहे हैं। मुझे संदेह है कि किसी भी तरह से नेटवर्क शेयर में मेरा लॉगिन सिर्फ मेरे उपयोगकर्ता से जुड़ा हुआ है, ताकि अगर मैं एक ही शेयर तक पहुंचने का प्रयास करता हूं, तो "प्रशासक" कहें, यह मुझे अपने आप को पुनः प्राधिकृत करने की अपेक्षा करेगा। क्या इसके चारों ओर एक रास्ता है? – Ethan

+0

जो भी उपयोगकर्ता एप्लिकेशन को बिना पथ के लिए अनुमति की अनुमति के तहत चल रहा है। यदि आप उस उपयोगकर्ता के रूप में लॉग इन करते समय पथ तक पहुंच सकते हैं, तो एप्लिकेशन को निर्देशिका के माध्यम से प्रोग्रामेटिक रूप से उसी पथ तक पहुंचने में सक्षम होना चाहिए। एक्सपीक्स ... – mservidio

+0

आप एक व्यवस्थापक खाते का उपयोग कर रहे हैं, लेकिन क्या यह एक स्थानीय व्यवस्थापक खाता है? क्या इस व्यवस्थापक खाते के पास दूरस्थ पथ तक पहुंच है? क्या आप इसे सत्यापित कर सकते हैं? – mservidio

1

इस पर चर्चा की गई है here। जाहिर है, नेट फ्रेमवर्क the documentation के पुराने संस्करणों में स्पष्ट रूप से उल्लेख किया गया है कि यह संभव नहीं है ("मौजूदा विधि नेटवर्क प्रमाणीकरण नहीं करती है। अगर आप पूर्व-प्रमाणीकृत किए बिना मौजूदा नेटवर्क शेयर से पूछताछ करते हैं, तो मौजूदा विधि गलत हो जाएगी।")। 4.0 दस्तावेज में अब यह वाक्य नहीं है, लेकिन व्यवहार नहीं बदला है।

मुझे एक वर्कअराउंड here मिला (लेकिन इसका उपयोग करने का फैसला किया गया)।

0

मूल कारण यह क्यों काम नहीं करता है यह है कि आईआईएस उपयोगकर्ता को पथ तक पहुंचने की अनुमति नहीं है। नियमित उपयोगकर्ता के रूप में चलते समय उपयोगकर्ता को पहुंच दी जाती है I।ई यह आप आईआईएस के लिए फ़ोल्डर के लिए अनुमति देने के लिए आईआईएस द्वारा चलाए सेवाओं में काम करने के लिए यूएनसी पथ के लिए नीचे के रूप में पालन की जरूरत है काम करने के लिए:

गुण -> सुरक्षा -> संपादित करें -> जोड़ें - -> IIS_WPG

संबंधित मुद्दे