如何使用VB.NET打开受密码保护的共享网络文件夹?

8
我需要打开网络上一个受密码保护的共享文件夹,以便访问Access 97数据库。我该如何打开文件夹并输入密码?
2个回答

6

这里可以找到详细的说明: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

开箱即用,完美运行。在剪切和粘贴时,使用链接中的代码格式更好。 - user38349

3
一种解决方法是将网络文件夹映射到可用的驱动器号。您可以使用Windows操作系统命令来完成这个任务:
System.Diagnostics.Process.Start("net.exe", "use K: \\Server\URI\path\here /USER:<username> <password>" )

只需用您需要的凭据替换用户名和密码,并确保驱动器字母可用。

要断开连接,可以调用

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

在我的情况下,只需发出此命令而不指定驱动器名称即可:Process.Start("net.exe", "use \\Server\URI\path\here /USER:<username> <password>")。然后,任何后续尝试访问此路径都不会要求凭据。 - Monsignor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接