Как сопоставить сетевой диск, для которого требуется имя пользователя и пароль в .NET?

Мне нужно отобразить сетевой диск из .NET-приложения. Мне нужно будет использовать имя пользователя и пароль AD для аутентификации. Обычно я просто использую командный файл с командой net use. Как это сделать из кода С# или VB.NET?

Ответ 1

Вы смотрели на это?

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

Кроме того, вы можете просто использовать net.exe через Process.Start() и передать ему параметры, которые вы всегда использовали в приведенном ниже коде:

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

Это также можно использовать без буквы диска, а затем получить доступ по пути UNC.

 System.Diagnostics.Process.Start("net.exe", @"use @"\\Server\URI\path\here");
 System.IO.File.Copy(@"\\Server\URI\path\here\somefile.abc", destFile, true);

Ответ 2

Смотрите этот сайт: http://www.blackwasp.co.uk/MapDriveLetter.aspx

Он покажет вам, как программировать карту с С#, включая учетные данные, такие как имя пользователя и пароль

Ответ 3

Вот какой код, который вы должны найти, немного более надежным, чем просто обстреливать консоль.

''' <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