2008-11-26 9 views

Odpowiedz

6

znaleźć tutaj http://www.mredkj.com/vbnet/vbnetmapdrive.html

Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" _ 
(ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, _ 
    ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer 

Public Declare Function WNetCancelConnection2 Lib "mpr" Alias "WNetCancelConnection2A" _ 
    (ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer 

    <StructLayout(LayoutKind.Sequential)> _ 
Public Structure NETRESOURCE 
     Public dwScope As Integer 
     Public dwType As Integer 
     Public dwDisplayType As Integer 
     Public dwUsage As Integer 
     Public lpLocalName As String 
     Public lpRemoteName As String 
     Public lpComment As String 
     Public lpProvider As String 
    End Structure 

Public Const ForceDisconnect As Integer = 1 
Public Const RESOURCETYPE_DISK As Long = &H1 

Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String) As Boolean 

     Dim nr As NETRESOURCE 
     Dim strUsername As String 
     Dim strPassword As String 

     nr = New NETRESOURCE 
     nr.lpRemoteName = UNCPath 
     nr.lpLocalName = DriveLetter & ":" 
     strUsername = Nothing '(add parameters to pass this if necessary) 
     strPassword = Nothing '(add parameters to pass this if necessary) 
     nr.dwType = RESOURCETYPE_DISK 

     Dim result As Integer 
     result = WNetAddConnection2(nr, strPassword, strUsername, 0) 

     If result = 0 Then 
      Return True 
     Else 
      Return False 
     End If 
    End Function 

Public Function UnMapDrive(ByVal DriveLetter As String) As Boolean 
    Dim rc As Integer 
     rc = WNetCancelConnection2(DriveLetter & ":", 0, ForceDisconnect) 

     If rc = 0 Then 
      Return True 
     Else 
      Return False 
     End If 

    End Function 
+0

Działa doskonale, zaraz po wyjęciu z pudełka. Wykorzystano kod z linku, ponieważ lepiej się formował podczas wycinania i wklejania. – user38349

3

Jednym z rozwiązań byłoby odwzorowanie folderu sieciowego na dostępną literę dysku. Można tego dokonać za pomocą poleceń systemu operacyjnego Windows:

System.Diagnostics.Process.Start("net.exe", "use K: \\Server\URI\path\here /USER:<username> <password>") 

Wystarczy wymienić nazwy użytkownika i hasła z poświadczeniami trzeba i upewnij się, że litera dysku jest dostępna.

Aby odłączyć można nazwać

System.Diagnostics.Process.Start("net.exe", "use /delete K:") 
+0

W moim przypadku wystarczyło wydać polecenie bez określania nazwy napędu 'Process.Start („net.exe” , "użyj \\ Server \ URI \ path \ here/USER: ") '. Następnie każda kolejna próba uzyskania dostępu do tej ścieżki nie będzie wymagać danych uwierzytelniających. – Monsignor

Powiązane problemy