2010-08-12 4 views
7

Как я могу сопоставить сетевой диск с помощью C#. Я не хочу использовать net use или любой сторонний API.Как создать карту с помощью C#?

Слышал о UNC-путях в коде C#, но не совсем уверен, как это сделать.

ответ

7

Используйте функции WnetAddConnection, имеющиеся в наличии mpr.dll.

Вам нужно будет написать сигнатуры и структуры P/Invoke для вызова неуправляемой функции. Вы можете найти ресурсы на P/Invoke на pinvoke.net.

Это the signature for WNetAddConnection2 on pinvoke.net:

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

Посмотрите @NetShareAdd Windows 'API. Разумеется, вам нужно будет использовать PInvoke.

+4

'NetShareAdd' создает общий ресурс. Вопрос заключается в том, как сопоставить существующую долю. –

2

Более прямолинейно решение заключается в использовании 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); 
+0

Простая версия - убедитесь, что вы используете System.Diagnostics; для System.Diagnostics.Process: \t 'символ DriveLetter = 'R',' ' \t строку Path = @ "\\ Contoso \ доля \ вещи";' ' \t Process.Start (новый ProcessStartInfo (@" C: \ Windows \ System32 \ net.exe "," использовать "+ DriveLetter +": "+ Path));' – omJohn8372

Смежные вопросы