#c# #cmd #network-drive
#c# #.net
Вопрос:
Как я могу сопоставить сетевой диск с помощью C #. Я не хочу использовать net use
или какой-либо сторонний API.
Слышал о UNC-путях в коде C #, но не совсем уверен, как это сделать.
Ответ №1:
Используйте WnetAddConnection
функции, доступные в native mpr.dll
.
Вам нужно будет написать подписи и структуры P / Invoke для вызова неуправляемой функции. Вы можете найти ресурсы на P / Invoke на pinvoke.net .
Это подпись для WNetAddConnection2
on pinvoke.net:
[DllImport("mpr.dll")]
public static extern int WNetAddConnection2(
ref NETRESOURCE netResource,
string password,
string username,
int flags);
Ответ №2:
Взгляните на API NetShareAdd для Windows. Конечно, вам нужно будет использовать PInvoke, чтобы получить доступ к нему.
Комментарии:
1.
NetShareAdd
создает общий ресурс. Вопрос заключается в том, как сопоставить существующий общий ресурс.
Ответ №3:
В .net нет стандартной функции для сопоставления сетевых дисков, но вы можете найти хорошую оболочку здесь, если вы не хотите выполнять собственные вызовы самостоятельно: http://www.codeguru.com/csharp/csharp/cs_network/windowsservices/article.php/c12357
Комментарии:
1. Ссылка мертва. Выдает 404 в codeguru.
Ответ №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: \servershare", null);
Converter.RunProcess("net.exe", "use Q: /delete", null);
Комментарии:
1.Более простая версия — убедитесь, что вы «используете System.Диагностика;» для системы.Диагностика.Процесс:
char DriveLetter = 'R';
string Path = @"\contososharethings";
Process.Start(new ProcessStartInfo(@"C:WindowsSystem32net.exe", "use " DriveLetter ": " Path));
2. Это сводит на нет всю цель программирования вместо написания сценариев.