如何使用C#映射网络驱动器。我不想使用net use
或任何第三方API。
听说C#代码中的UNC路径,但不太确定如何去做。
答案 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