Как я могу сопоставить сетевой диск с помощью C#. Я не хочу использовать net use
или любой сторонний API.Как создать карту с помощью C#?
Слышал о UNC-путях в коде C#, но не совсем уверен, как это сделать.
Как я могу сопоставить сетевой диск с помощью C#. Я не хочу использовать net use
или любой сторонний API.Как создать карту с помощью C#?
Слышал о UNC-путях в коде C#, но не совсем уверен, как это сделать.
Используйте функции 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);
Посмотрите @NetShareAdd Windows 'API. Разумеется, вам нужно будет использовать PInvoke.
Там нет стандартной функции в .net для отображения networkdrives, но вы можете найти хорошую обертку здесь, если вы не хотите, чтобы выполнить Native звонков сам: http://www.codeguru.com/csharp/csharp/cs_network/windowsservices/article.php/c12357
Более прямолинейно решение заключается в использовании 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: \t 'символ DriveLetter = 'R',' ' \t строку Path = @ "\\ Contoso \ доля \ вещи";' ' \t Process.Start (новый ProcessStartInfo (@" C: \ Windows \ System32 \ net.exe "," использовать "+ DriveLetter +": "+ Path));' – omJohn8372
'NetShareAdd' создает общий ресурс. Вопрос заключается в том, как сопоставить существующую долю. –