通过用户名和密码访问域中的目录
我已经在c#中使用visual studio 2015开发了一个应用程序,它将一些文件从一个目录(源)复制到另一个(目标)。 我的问题是源路径是域中的另一台计算机。 我希望能够访问该目录并获取我的文件,使用源计算机的域名,用户名和密码。 我已经看到了一些解决方案,但我无法得到他们如何访问其他计算机。 我曾经通过使用目录获取我的文件。 GetDirectories(路径),我现在使用它太深,不能改变它平滑。 感谢您帮助解决我的问题,我现在真的被阻止了好几天。
string[] folder1;
string[] folder2;
folder1 = Directory.GetDirectories(path);
foreach (string fld1 in folder1)
{
folder2 = Directory.GetDirectories(fld);
foreach(string fld2 in folder2)
{
for(int i = 0; i < MyList.Count(); i++)
{
if(fld2.Contains("nok") || fld2.Contains("Nok"))
LNok = Directory.GetFiles(fld2, picList[i]);
else
Lok = Directory.GetFiles(fld2, picList[i]);
}
}
}
由于System.IO.File
和System.IO.Directory
方法不支持传递凭证,因此首选解决方案是模拟授权用户帐户。 这需要使用pInvoke从advapi32.dll和kernel32.dll中导入两个方法:
//Impersonation functionality
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
//Disconnection after file operations
[DllImport("kernel32.dll")]
private static extern Boolean CloseHandle(IntPtr hObject);
以下代码使用这些方法创建WindowsImpersonationContext
const int LOGON_TYPE_NEW_CREDENTIALS = 9;
const int LOGON32_PROVIDER_WINNT50 = 3;
//User token that represents the authorized user account
IntPtr token = IntPtr.Zero;
bool result = LogonUser("username", "domainname", "password", LOGON_TYPE_NEW_CREDENTIALS , LOGON32_PROVIDER_WINNT50, ref token);
if (result == true)
{
//Use token to setup a WindowsImpersonationContext
using (WindowsImpersonationContext ctx = new WindowsIdentity(token).Impersonate())
{
//Your file operations
string[] files = Directory.GetFiles(@"remotemachinesharefolder");
//Release the context, and close user token
ctx.Undo();
CloseHandle(token);
}
}
在这里你可以找到LogonUser函数的MSDN文档
链接地址: http://www.djcxy.com/p/6129.html上一篇: access a directory in a domain by username and password