如何使用C#映射驱动器?

时间:2010-08-12 06:23:38

标签: c# .net

如何使用C#映射网络驱动器。我不想使用net use或任何第三方API。

听说C#代码中的UNC路径,但不太确定如何去做。

4 个答案:

答案 0 :(得分:8)

使用原生mpr.dll中提供的WnetAddConnection功能。

您必须编写P / Invoke签名和结构以调用非托管函数。您可以在pinvoke.net上找到P / Invoke上的资源。

这是the signature for WNetAddConnection2 on pinvoke.net

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

答案 1 :(得分:1)

更直接的解决方案是使用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;
    }
}

完成上述操作后,请根据需要使用以下创建/删除映射驱动器。

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

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

答案 2 :(得分:0)

看看@ NetShareAdd Windows'API。当然,你需要使用PInvoke来掌握它。

答案 3 :(得分:0)

.net中没有用于映射网络驱动器的标准功能,但如果您不想自己执行Native调用,可以在此处找到一个好的包装器:http://www.codeguru.com/csharp/csharp/cs_network/windowsservices/article.php/c12357