【问题标题】:How to Map a Drive using C#?如何使用 C# 映射驱动器?
【发布时间】:2010-08-12 06:23:38
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    使用本机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);
    

    【讨论】:

      【解决方案2】:

      看看@NetShareAdd Windows 的 API。当然,您需要使用 PInvoke 来获得它。

      【讨论】:

      • NetShareAdd 创建一个共享。问题是关于如何映射现有共享。
      【解决方案3】:

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

      【讨论】:

      • 链接已失效。在 codeguru 上给出 404。
      【解决方案4】:

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

      【讨论】:

      • 更简单的版本 - 确保您“使用 System.Diagnostics;”对于 System.Diagnostics.Process:char DriveLetter = 'R';string Path = @"\\contoso\share\things";Process.Start(new ProcessStartInfo(@"C:\Windows\System32\net.exe", "use " + DriveLetter + ": " + Path));
      • 这违背了编程而不是脚本的全部目的。
      猜你喜欢
      • 1970-01-01
      • 2016-06-17
      • 2017-03-28
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多