2009-09-17 19 views
8

कैसे उपयोग कर सकता हूं मेरे पास एक मशीन पर चलने वाली एक विंडोज़ फॉर्म ऐप है जो किसी डोमेन पर नहीं है, जिसे स्थानीय फाइल सिस्टम से फ़ाइल को यूएनसी पथ में स्थानांतरित करने में सक्षम होना आवश्यक है। मेरे पास उस पथ के लिए उपयोगकर्ता नाम और पासवर्ड है। मैं सोच रहा था कि net.exe कमांड निष्पादित करने के साथ सीधे ऐसा करने का कोई तरीका है?मैं प्रोग्राम साझा करने के लिए प्रोग्रामेटिक रूप से

आदर्श रूप में मुझे ड्राइव को मानचित्र बनाना नहीं होगा।

उत्तर

4

इस प्रश्न पर स्वीकृत उत्तर here ऐसा लगता है कि यह देखने लायक होगा; यह Win32 API फ़ंक्शन WNetUseConnection का उपयोग करने का सुझाव देता है।

MSDN से:

WNetUseConnection समारोह एक नेटवर्क संसाधन के लिए एक कनेक्शन बनाता है। फ़ंक्शन एक स्थानीय डिवाइस को नेटवर्क संसाधन पर रीडायरेक्ट कर सकता है।

जो आप खोज रहे हैं उसे पूरा करने के लिए प्रतीत होता है, net.exe का कोई उल्लेख नहीं है। क्या यह मदद करता है?

+0

धन्यवाद टिप के लिए मैं इस पर उसकी समीक्षा करेंगे। मुझे आश्चर्य है कि क्यों .NET में पहले से कुछ ऐसा नहीं है। – Mykroft

1

मुझे लगता है कि आपको ड्राइव को मैप करने की आवश्यकता होगी। मैंने अभी तक इसके चारों ओर एक रास्ता नहीं बढ़ाया है। हालांकि, इस पोस्ट देखें:

Asp.net Access To Network Share

किसी अन्य व्यक्ति के जवाब स्वीकार कर लिया गया है, लेकिन मैं कोड एक नेटवर्क ड्राइव को सरल बनाने के लिए एक और जवाब में तैनात किया है।

0

this पोस्ट पर नज़र डालें। यह Win32 API LogonUser() और दोस्तों को कॉल करने के लिए पी/Invoke का उपयोग करता है। प्रदान किए गए कुछ उदाहरण कोड भी हैं।

11

आप इसे पूरा करने के लिए WNetAddConnection का उपयोग कर सकते हैं। आपको pInvoke करना होगा। PInvoke घोषणाओं को स्थापित करने के बाद नीचे दिया गया कोड मेरे लिए काम करता है। कोड (नीचे) के दूसरे ब्लॉक में पिनवोक घोषणाएं होती हैं - बस इसे कक्षा के अंदर चिपकाएं।

 

     public static void CopyFile(string from, string shareName, string username, string password) 
     { 
      NETRESOURCE nr = new NETRESOURCE(); 
      nr.dwType = ResourceType.RESOURCETYPE_DISK; 
      nr.lpLocalName = null; 
      nr.lpRemoteName = shareName; 
      nr.lpProvider = null; 

      int result = WNetAddConnection2(nr, password, username, 0); 
      System.IO.File.Copy(from, System.IO.Path.Combine(shareName, System.IO.Path.GetFileName(from))); 
     } 

 

आपको निम्नलिखित सहायक कोड को कक्षा (PInvoke.Net से लिया गया) में पेस्ट करने की आवश्यकता होगी। अपने कोड में एक बयान का उपयोग कर जोड़ने के लिए सुनिश्चित करें:

using System.Runtime.InteropServices 
 

     [DllImport("Mpr.dll", EntryPoint = "WNetAddConnection2", CallingConvention = CallingConvention.Winapi)] 
     private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword, 
             string lpUsername, System.UInt32 dwFlags); 

     [StructLayout(LayoutKind.Sequential)] 
     private class NETRESOURCE 
     { 
      public ResourceScope dwScope = 0; 
      public ResourceType dwType = 0; 
      public ResourceDisplayType dwDisplayType = 0; 
      public ResourceUsage dwUsage = 0; 
      public string lpLocalName = null; 
      public string lpRemoteName = null; 
      public string lpComment = null; 
      public string lpProvider = null; 
     }; 

     public enum ResourceScope 
     { 
      RESOURCE_CONNECTED = 1, 
      RESOURCE_GLOBALNET, 
      RESOURCE_REMEMBERED, 
      RESOURCE_RECENT, 
      RESOURCE_CONTEXT 
     }; 

     public enum ResourceType 
     { 
      RESOURCETYPE_ANY, 
      RESOURCETYPE_DISK, 
      RESOURCETYPE_PRINT, 
      RESOURCETYPE_RESERVED 
     }; 

     public enum ResourceUsage 
     { 
      RESOURCEUSAGE_CONNECTABLE = 0x00000001, 
      RESOURCEUSAGE_CONTAINER = 0x00000002, 
      RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004, 
      RESOURCEUSAGE_SIBLING = 0x00000008, 
      RESOURCEUSAGE_ATTACHED = 0x00000010, 
      RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED), 
     }; 

     public enum ResourceDisplayType 
     { 
      RESOURCEDISPLAYTYPE_GENERIC, 
      RESOURCEDISPLAYTYPE_DOMAIN, 
      RESOURCEDISPLAYTYPE_SERVER, 
      RESOURCEDISPLAYTYPE_SHARE, 
      RESOURCEDISPLAYTYPE_FILE, 
      RESOURCEDISPLAYTYPE_GROUP, 
      RESOURCEDISPLAYTYPE_NETWORK, 
      RESOURCEDISPLAYTYPE_ROOT, 
      RESOURCEDISPLAYTYPE_SHAREADMIN, 
      RESOURCEDISPLAYTYPE_DIRECTORY, 
      RESOURCEDISPLAYTYPE_TREE, 
      RESOURCEDISPLAYTYPE_NDSCONTAINER 
     }; 
 
संबंधित मुद्दे