Windows Network folder 를 오픈하는 방법은
그냥
net use 명령어를 배치파일로 떨궈서 실행시켜 오픈하는 방법과
API 를 통해서 오픈하는 방법이 있다.
> net use 명령어를 배치파일로 만들어 실행하는 방법
string batPath = System.Environment.CurrentDirectory + @"\NetworkDrive_Connect.bat";
string netStr = @"net use " + NDServerPath + " /User:" + NDUserID + " " + NDPassword;
using (FileStream fs = new FileStream(batPath, FileMode.Create))
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] bytes = encoding.GetBytes(netStr);
fs.Write(bytes, 0, bytes.Length);
fs.Close();
fs.Dispose();
}
if (File.Exists(batPath))
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = batPath;
proc.Start();
proc.WaitForExit();
File.Delete(batPath);
}
proc.WaitForExit(); 를 통해서 프로세스가 종료될 때 까지 기둘리는데
종종 배치파일을 통해서 실행된 cmd 창이 한동안 종료가 안될 때가 있어서
한동안 멈춰있는 경우가 생길 수 있다.
> API 를 이용한 방법
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private struct NETRESOURCE
{
public uint dwScope;
public uint dwType;
public uint dwDisplayType;
public uint dwUsage;
public string lpLocalName;
public string lpRemoteName;
public string lpComment;
public string lpProvider;
}
[DllImport("mpr.dll", CharSet = CharSet.Auto)]
private static extern int WNetUseConnection(
IntPtr hwndOwner,
[MarshalAs(UnmanagedType.Struct)] ref NETRESOURCE lpNetResource,
string lpPassword,
string lpUserID,
uint dwFlags,
System.Text.StringBuilder lpAccessName,
ref int lpBufferSize,
out uint lpResult);
[DllImport("mpr.dll", EntryPoint = "WNetCancelConnection2", CharSet = CharSet.Auto)]
private static extern int WNetCancelConnection2A(string lpName, int dwFlags, int fForce);
.......................
: Connection
int capacity = 64;
uint resultFlags = 0;
uint flags = 0;
System.Text.StringBuilder sb = new System.Text.StringBuilder(capacity);
NETRESOURCE ns = new NETRESOURCE();
ns.dwType = 1;
ns.lpLocalName = null;
ns.lpRemoteName = sPath; // 폴더 경로
ns.lpProvider = null;
int result = WNetUseConnection(
IntPtr.Zero, ref ns, pw, id, flags, sb, ref capacity, out resultFlags);
: Disconnection
WNetCancelConnection2A(sPath, 1, 0);
'Dev::DotNet > C#' 카테고리의 다른 글
System.Environment.CurrentDirectory 의 경로 (0) | 2012.08.04 |
---|---|
Assembly 의 Version 을 날짜로 바꾸기 (1) | 2012.08.03 |
실수를 정수로 형변환 할때 (0) | 2012.07.31 |
다중 실행 방지를 위한 Mutex (0) | 2012.07.23 |
Unhandled Exception 에 대한 처리 (1) | 2012.07.21 |