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
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
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);