내 경험에 의하면. NET은 항상 UNC 경로에 맞았습니다. 때때로 그것은 작동하고 때로는 그렇지 않습니다. 나는 그것에 대한 좋은 설명이있을 것이라고 확신하지만 초기에, 나는 대답을 찾지 않고 수색하고 수색했다.
이 문제를 해결하기보다는 드라이브를 직접 매핑 한 다음 코드 완료시 연결을 끊는 것이 더 나은 방침을 채택했습니다. (답을 찾으면 그 이유를 아는 데 관심이 있지만 작동 솔루션이 있으므로 나 자신을 연구 할만큼 신경 쓰지 않아도됩니다.) 시간당 100 % 효과가 있습니다. 아주 쉽게. 나는 그것을하기위한 수업을 만들었습니다. 왜냐하면 그것은 우리 가게에서 흔히하는 일이기 때문입니다.
아이디어가 마음에 들지는 모르겠지만 관심이 있고 아직 코드를 갖고 있지 않다면 우리 루틴이 아래에 붙여 넣어집니다. 열려있는 드라이브 문자를 확인하고 매핑 한 다음 완료되면 연결을 끊는 것이 매우 간단합니다.
public static class NetworkDrives
{
public static bool MapDrive(string DriveLetter, string Path, string Username, string Password)
{
bool ReturnValue = false;
if(System.IO.Directory.Exists(DriveLetter + ":\\"))
{
DisconnectDrive(DriveLetter);
}
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "net.exe";
p.StartInfo.Arguments = " use " + DriveLetter + ": " + Path + " " + Password + " /user:" + Username;
p.Start();
p.WaitForExit();
string ErrorMessage = p.StandardError.ReadToEnd();
string OuputMessage = p.StandardOutput.ReadToEnd();
if (ErrorMessage.Length > 0)
{
throw new Exception("Error:" + ErrorMessage);
}
else
{
ReturnValue = true;
}
return ReturnValue;
}
public static bool DisconnectDrive(string DriveLetter)
{
bool ReturnValue = false;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "net.exe";
p.StartInfo.Arguments = " use " + DriveLetter + ": /DELETE";
p.Start();
p.WaitForExit();
string ErrorMessage = p.StandardError.ReadToEnd();
string OuputMessage = p.StandardOutput.ReadToEnd();
if (ErrorMessage.Length > 0)
{
throw new Exception("Error:" + ErrorMessage);
}
else
{
ReturnValue = true;
}
return ReturnValue;
}
}
코드를 단계별로 실행할 때 예외가 발생합니까? – cristobalito
내 컴퓨터 (WinXP SP3, Visual C# Express 2008)에서이를 테스트했으며 정상적으로 작동합니다. 실패에 대해 자세히 설명해 주시겠습니까? 시도했을 때 무엇을 보았습니까? 어떤 OS와 C#을 사용하고 있습니까? – sidewinderguy
@cristobalito :이 예외는 발생하지 않으며 기본 폴더 ("내 컴퓨터")보기로 이동합니다. @sidewinderguy : 같은 핀치! Win XP SP3에서 Visual C# Professional Edition 2008을 사용하고 있습니다 ... ShowDialog가 기본적으로 네트워크 위치를 열어 줍니까? –