How do I map a network drive that requires a username and password in .NET?

前端 未结 2 1873
情歌与酒
情歌与酒 2020-12-09 12:27

I need to map a network drive from within a .NET application. I\'m going to need to use an AD Username and Password to authenticate. Usually I just use a batch file with t

相关标签:
2条回答
  • 2020-12-09 12:51

    Heres some code that you should find to be a bit more reliable than just shelling out to the console.

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="driveLetter"></param>
    ''' <param name="uncName"></param>
    ''' <remarks>This was hand tested. We cannot automate because it messes with the OS</remarks>
     Sub MapDrive(ByVal driveLetter As Char, ByVal uncName As String)
        Dim driveLetterFixed = Char.ToLower(driveLetter)
        If driveLetterFixed < "a"c OrElse driveLetterFixed > "z"c Then Throw New ArgumentOutOfRangeException("driveLetter")
        If uncName Is Nothing Then Throw New ArgumentNullException("uncName")
        If uncName = "" Then Throw New ArgumentException("uncName cannot be empty", "uncName")
    
        Dim fixedUncName As String = uncName
        'This won't work if the unc name ends with a \
        If fixedUncName.EndsWith("\") Then fixedUncName = fixedUncName.Substring(0, fixedUncName.Length - 1)
    
        Dim oNetWork As New IWshRuntimeLibrary.IWshNetwork_Class
        Try 'This usually isn't necessary, but we can't detect when it is needed.
            oNetWork.RemoveNetworkDrive(driveLetter, True, True)
        Catch ex As Runtime.InteropServices.COMException
            'Ignore errors, it just means it wasn't necessary
        End Try
    
        oNetWork.MapNetworkDrive(driveLetter, fixedUncName, True)
    End Sub
    

    http://clrextensions.codeplex.com/SourceControl/changeset/view/55677#666894

    0 讨论(0)
  • 2020-12-09 12:56

    Have you looked at this?

    http://www.codeguru.com/csharp/csharp/cs_network/windowsservices/article.php/c12357

    Also, you could just use net.exe via Process.Start() and pass it the parameters you've always used in the code below:

    System.Diagnostics.Process.Start("net.exe", "use K: \\\\Server\\URI\\path\\here");
    

    This can also be used without a drive letter and then accessed through the UNC path.

     System.Diagnostics.Process.Start("net.exe", @"use @"\\Server\URI\path\here");
     System.IO.File.Copy(@"\\Server\URI\path\here\somefile.abc", destFile, true);
    
    0 讨论(0)
提交回复
热议问题