2010-06-23 47 views
7

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

हालांकि, जब मैं विंडोज सेवा से मैप किए गए ड्राइव अक्षर का उपयोग करके इस नेटवर्क स्थान तक पहुंचने का प्रयास करता हूं, तो एक्सेस विफल हो जाती है। विंडोज सेवा को मेरे व्यक्तिगत "लॉग ऑन" खाता प्रमाण-पत्रों का उपयोग करने के लिए कॉन्फ़िगर किया गया है, जो उपरोक्त सभी मामलों में समान है। मैं एक प्रशासक हूँ।

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

मुझे अपनी विंडोज सेवा सेट अप करने के लिए क्या करने की ज़रूरत है, ताकि वह अक्षरों को चलाने के लिए मैप किए गए नेटवर्क साझा फ़ोल्डरों तक पहुंच सके? मेरी विंडोज सेवा सी # में लिखा है।

उत्तर

9

क्षमा करें, you can't access mapped drives from Windows services। जैसा कि शेंग ने सुझाव दिया था, आप यूआईसी पथ को मैप किए गए ड्राइव से यूएनसी पथ प्राप्त करने के लिए उपयोग कर सकते हैं और फिर इसे सेवा में पास कर सकते हैं, जिसे यूएनसी पथ का उपयोग करना चाहिए।

+0

लेख के लिए धन्यवाद। माइक्रोसॉफ्ट यह स्पष्ट करता है कि किसी को विंडोज सेवा से मैप किए गए ड्राइव तक नहीं पहुंचना चाहिए। – Elan

+0

उद्धृत लेख केवल यह कहता है कि सेवाओं को ड्राइव मैपिंग का उपयोग या परिवर्तन नहीं करना चाहिए, जिसका मतलब यह नहीं है कि यह नहीं किया जा सकता है।एमएस केबी आलेख में, यह तब भी इंगित करता है जब यह कहता है: "इसलिए, पुनर्निर्देशित ड्राइव को अलग-अलग उपयोगकर्ता खातों के अंतर्गत चल रही प्रक्रियाओं के बीच साझा नहीं किया जा सकता है।" दूसरे शब्दों में, लॉगिन सत्र और सेवा एक ही प्रमाण पत्र के तहत चलनी चाहिए। यह किया जा सकता है। – Garen

+0

@ गारेन: विंडोज़ की हर बड़ी रिलीज सुरक्षा कारणों से सेवाओं और डेस्कटॉप कोड के बीच अलगाव को बढ़ाती है। अब * काम करने के लिए इसे मजबूर करने के तरीके हैं। पहले विंडोज संस्करणों पर इसे मजबूर करने के तरीके भी थे जो अब काम नहीं करते हैं। यह समर्थित नहीं है; आप केवल एक ऐसा उत्पाद तैयार करेंगे जो भविष्य के विंडोज संस्करण पर टूट सकता है। (मैं अनुभव से बात कर रहा हूं ...) –

4

मैप किए गए ड्राइव प्रति सत्र ऑब्जेक्ट्स हैं। इसलिए प्रत्येक इंटरैक्टिव सत्र में अपना मैपिंग होता है और सेवा सत्र में एक और ड्राइव मैपिंग होता है। मैप किए गए ड्राइव के सही यूएनसी पथ को प्राप्त करने के लिए आपको सही सत्र में WNetGetConnection को कॉल करने की आवश्यकता है।

अगर आपने यह अनुरोध और इस तरह के WCF, नामित पाइप, सॉकेट, आदि के रूप में सेवा, में परिणाम प्राप्त करने के लिए किसी भी अंतर-सत्र संचार तरीकों का उपयोग कर सकते हैं

+0

आपको बहुत बहुत धन्यवाद। मैं पिनवोक और WNetGetConnection का उपयोग कर ड्राइव अक्षर को यूएनसी पथ में परिवर्तित करने में सक्षम था! – Elan

0

हाय Elan मैं अपने प्रोजेक्ट में एक ही समस्या का सामना करना पड़ा और मैं एक समाधान

और काम की उम्मीद है सिर्फ vb एफएसओ फाइल सिस्टम वस्तु

में विरासत आवेदन स्क्रिप्ट का उपयोग कर मेरे कदमों

    if (api.Docusign_download(strDocuSignUserName, strDocuSignPassword, strDocuSignIntegratorKey, EnvelopeID, Environment.ExpandEnvironmentVariables("%temp%")) == true) 
        { 
         if (m_streamWriter1 != null) 
         { 
          m_streamWriter1.WriteLine(" This envelop id is Downloaded and update the table" + EnvelopeID + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "\n"); 
         } 

         fpath1 = Environment.ExpandEnvironmentVariables("%temp%") + '\\' + EnvelopeID + '1' + ".pdf"; 
         fpath2 = Environment.ExpandEnvironmentVariables("%temp%") + '\\' + EnvelopeID + '2' + ".pdf"; 
         if (System.IO.File.Exists(fpath1)) 
         { 
          fso = new FileSystemObject(); 
          // fso.CopyFile(fileLoc, "\\\\Tech-Pro-01\\D\\", true); i download the file in temp folder and copy file to unc path ur expected work on reverse like access file to unc path he does not work directly but work in in direct access like temp folder to services 
          fso.CopyFile(fpath1, UNC, true); 
          fso.CopyFile(fpath2, UNC, true); 
          fso.DeleteFile(fpath1, true); 
          fso.DeleteFile(fpath2, true); 
          //System.IO.File.Move(fileLoc, fileLocMove); 

im का पालन पाया

1, सुनिश्चित करें कि iuser और नेटवर्क सेवा पहुंच में आपका नक्शा पथ पहुंच मैप किए गए मशीन 2 में सक्षम है, संदर्भ प्रणाली स्क्रिप्टिंग

जोड़ना

3, और UNC पथ उदाहरण \ computername \ sharedname \ folder \ फ़ाइल नाम 4, बस fso.copyfile (uncpath, tempfoler, true) 5, यू अस्थायी फ़ोल्डर में एक अपनी फ़ाइल वह पहुँच की उम्मीद है पहुँच सकते हैं और काम सही

अस्थायी फ़ोल्डर पहुँच "c: \ windows \ अस्थायी क्योंकि proceess खिड़कियों अस्थायी फ़ोल्डर केवल

आशा ले जा सकते हैं यू Elan वह काम पूरी तरह से

धन्यवाद और का संबंध

जगदीश Govindaraj पिल्लई [email protected]