Simsons
Simsons

Reputation: 12745

How to Map a Drive using C#?

How can I map a network drive using C#. I don't want to use net use or any third party API.

Heard about UNC paths in C# code but not quite sure how to go about it.

Upvotes: 9

Views: 17865

Answers (4)

WiSeeker
WiSeeker

Reputation: 842

More straight-forward solution is to use Process.Start()

internal static int RunProcess(string fileName, string args, string workingDir)
{
    var startInfo = new ProcessStartInfo
    {
        FileName = fileName,
        Arguments = args,
        UseShellExecute = false,
        RedirectStandardError = true,
        RedirectStandardOutput = true,
        CreateNoWindow = true,
        WorkingDirectory = workingDir
    };

    using (var process = Process.Start(startInfo))
    {
        if (process == null)
        {
            throw new Exception($"Failed to start {startInfo.FileName}");
        }

        process.OutputDataReceived += (s, e) => e.Data.Log();
        process.ErrorDataReceived += (s, e) =>
            {
                if (!string.IsNullOrWhiteSpace(e.Data)) { new Exception(e.Data).Log(); }
            };

        process.BeginOutputReadLine();
        process.BeginErrorReadLine();

        process.WaitForExit();

        return process.ExitCode;
    }
}

Once you have the above, use below create/delete mapped drive as necessary.

Converter.RunProcess("net.exe", @"use Q: \\server\share", null);

Converter.RunProcess("net.exe", "use Q: /delete", null);

Upvotes: 0

fletcher
fletcher

Reputation: 13780

Use the WnetAddConnection functions available in the native mpr.dll.

You will have to write the P/Invoke signatures and structures to call through to the unmanaged function. You can find resources on P/Invoke on pinvoke.net.

This is the signature for WNetAddConnection2 on pinvoke.net:

[DllImport("mpr.dll")]    
public static extern int WNetAddConnection2(
   ref NETRESOURCE netResource,
   string password, 
   string username, 
   int flags);

Upvotes: 9

Wouter Janssens
Wouter Janssens

Reputation: 1613

There is no standard feature in .net to map networkdrives but you can find a good wrapper here if you dont want to execute the Native calls by yourself: http://www.codeguru.com/csharp/csharp/cs_network/windowsservices/article.php/c12357

Upvotes: 0

Will A
Will A

Reputation: 25008

Take a look @ the NetShareAdd Windows' API. You'll need to use PInvoke to get your hands on it, of course.

Upvotes: 0

Related Questions