Conecte-se à unidade de rede com nome de usuário e senha

Como faço para fornecer credenciais para que eu possa se conectar a uma unidade de rede no .net?

Eu estou tentando recuperar arquivos de uma unidade de rede e precisa fornecer credenciais de usuário para acessar a unidade.

A melhor maneira de fazer isso é p / invocar o WNetUseConnection .

[StructLayout(LayoutKind.Sequential)] private class NETRESOURCE { public int dwScope = 0; public int dwType = 0; public int dwDisplayType = 0; public int dwUsage = 0; public string lpLocalName = ""; public string lpRemoteName = ""; public string lpComment = ""; public string lpProvider = ""; } [DllImport("Mpr.dll")] private static extern int WNetUseConnection( IntPtr hwndOwner, NETRESOURCE lpNetResource, string lpPassword, string lpUserID, int dwFlags, string lpAccessName, string lpBufferSize, string lpResult ); 

Exemplo de código aqui .

Solução muito elegante inspirada em http://social.msdn.microsoft.com/Forums/vstudio/pt-BR/287ca606-86da-4794-baed-2ad5db9bc833/access-to-remote-folder . Este usa apenas a biblioteca .Net e não precisa usar nenhuma linha de comando ou API do Win32.

Código para referência pronta:

 NetworkCredential theNetworkCredential = new NetworkCredential(@"domain\username", "password"); CredentialCache theNetCache = new CredentialCache(); theNetCache.Add(new Uri(@"\\computer"), "Basic", theNetworkCredential); string[] theFolders = Directory.GetDirectories(@"\\computer\share"); 

Você pode usar a class WindowsIdentity (com um token de logon ) para representar durante a leitura e gravação de arquivos.

 var windowsIdentity = new WindowsIdentity(logonToken); using (var impersonationContext = windowsIdentity.Impersonate()) { // Connect, read, write } 

você pode usar system.diagnostocs.process para chamar ‘net use …. com userid e password’ ou para um shell de comando que os utiliza.

Você pode usar a class WebClient para se conectar ao driver de rede usando credenciais. Inclua o namespace abaixo:

 using System.Net; WebClient request = new WebClient(); request.Credentials = new NetworkCredential("domain\username", "password"); string[] theFolders = Directory.GetDirectories(@"\\computer\share");