2011-10-06 25 views
5

मुझे अपने डेल्फी कार्यक्रम से विंडोज 7 में एक मैप किए गए नेटवर्क ड्राइव (पी :) में लिखने में कुछ समस्याएं हैं। जब मैं कोशिश करता हूं, उदाहरण के लिए, ForceDirectories('P:\test\folder'), मुझे एक त्रुटि मिलती है (पथ नहीं मिला)।मेरा प्रोग्राम मैप किए गए यूएनसी पथों को क्यों पहचानता नहीं है?

मैंने कोड (ForceDirectories('\\computername\share\test\folder')) में यूएनसी पथ में टाइप करने का प्रयास किया है और यह काम करता है। हालांकि, ExpandUNCFileName('P:\') काम नहीं कर रहा है; यह 'पी: \' देता है। विंडोज एक्सपी पर, ExpandUNCFileName('P:\') यूएनसी पथ लौटाता है।

मैं विंडोज 7 पर डेल्फी में यूएनसी पथ कैसे प्राप्त करूं, या अन्यथा मैप किए गए नेटवर्क ड्राइव पर लिखूं?

आगे की जांच के बाद, ऐसा लगता है कि मुझे विंडोज़ में कुछ प्रकार की शुरुआत याद आ रही है। मेरे पास एक और एप्लिकेशन (एप 2) है जो TcxShellComboBox (एक DevExpress घटक) का उपयोग करता है। पी के लिए नेविगेट करने के बाद: उस combobox में, app2 में, ExpandUNCFileName पर कॉल पहले आवेदन में सही ढंग से काम करते हैं। पी के तहत फाइलों पर FileExists के साथ समान: पी पर नेविगेट करने से पहले झूठा रिटर्न: ऐप 2 में, कंप्यूटर पुनरारंभ होने के बाद और बाद में सत्य लौटाता है।

+0

क्या यह किसी भी अवसर से सेवा है? आपके द्वारा वर्णित व्यवहार में डेल्फी के साथ कुछ लेना देना नहीं है और ऐसा इसलिए होता है क्योंकि ड्राइव मैपिंग प्रक्रिया के लिए सेटअप नहीं है। –

+0

सत्यापित करें कि आपके पास शेयर में मैप किए गए ड्राइव अक्षर हैं।मैं केवल आपकी समस्या को पुन: उत्पन्न करने में सक्षम था अगर ड्राइव अक्षर मैप नहीं किया गया था (डेल्फी 7, ​​2007 एक्सई)। – crefird

+0

यह एक सेवा नहीं है, यह एक वीसीएल फॉर्म आवेदन है। – MGH

उत्तर

10

Microsoft KB Article के अनुसार, यदि उपयोगकर्ता खाता नियंत्रण सक्षम है, और यदि आप Windows Explorer (गैर-उन्नत) से नेटवर्क ड्राइव मैप करते हैं, तो उन्नत प्रोग्रामों को उस ड्राइव तक पहुंच नहीं होगी। उद्धरण:

एक उपयोगकर्ता Windows Vista के लिए या विंडोज 7 पर लॉग इन कर रहा है, और यदि उपयोगकर्ता खाता नियंत्रण सक्षम किया गया है, एक कार्यक्रम टोकन उपयोगकर्ता के फ़िल्टर किए गए पहुँच का उपयोग करता है और एक प्रोग्राम उपयोगकर्ता के पूर्ण व्यवस्थापक पहुँच टोकन का उपयोग करता है एक ही समय में चला सकते हैं। चूंकि एलएसए ने दो अलग-अलग लॉगऑन सत्रों के दौरान एक्सेस टोकन बनाया, इसलिए एक्सेस टोकन में अलग लॉगऑन आईडी होती हैं।

जब नेटवर्क शेयर मैप किए जाते हैं, तो वे वर्तमान प्रक्रिया एक्सेस टोकन के लिए वर्तमान लॉगऑन सत्र से जुड़े होते हैं। इसका अर्थ यह है कि, यदि कोई उपयोगकर्ता कमांड प्रॉम्प्ट (Cmd.exe) का उपयोग नेटवर्क साझा करने के लिए फ़िल्टर किए गए एक्सेस टोकन के साथ करता है, तो नेटवर्क शेयर को पूर्ण व्यवस्थापक एक्सेस टोकन के साथ चलने वाली प्रक्रियाओं के लिए मैप नहीं किया जाता है।

चूंकि आपने टिप्पणियों में उल्लेख किया है कि आप डेल्फी "प्रशासक के रूप में" (उन्नत) चलाते हैं, यह आपकी समस्या है।

समाधान:

  1. डेल्फी भागो मत, अगर आप की जरूरत नहीं है ऊपर उठाया। यदि आपको अपने सॉफ़्टवेयर में ऊंचाई की आवश्यकता है, तो इसे दो भागों (ऊंचा और गैर-उन्नत) में विभाजित करें, और पहले भाग से मैप किए गए नेटवर्क ड्राइव तक पहुंचें। फिर एक उन्नत COM ऑब्जेक्ट का उपयोग करके दूसरे भाग तक पहुंचें, या बस एक अलग निष्पादन योग्य निष्पादित करके।

  2. एक ऊंचा नेटवर्क शीघ्र से एक नेटवर्क ड्राइव मैप करें, तो मैप किया गया नेटवर्क ड्राइव ऊंचा उपयोगकर्ता के लिए उपलब्ध हो जाएगा:

    एक। ओपन एलिवेटेड कमांड प्रॉम्प्ट (प्रशासक के रूप में "cmd.exe" चलाएं)

    बी। टाइप net use p: \\computername\share\test\folder

+2

यदि आप दूसरा समाधान चुनते हैं, तो आपको आमतौर पर इसे अपने नियमित उपयोगकर्ता (बिना ऊंचाई के) से दूसरी बार मैप करना होगा यदि आपको आमतौर पर इसकी आवश्यकता होती है ... – Whiler