Я разработал приложение в С# с помощью visual studio 2015, которое копирует некоторые файлы из одного каталога (источника) в другое (назначение) в целом. Моя проблема в том, что исходный путь - это другой компьютер в домене. Я хочу иметь возможность получить доступ к каталогу и получить мои файлы, указать домен, имя пользователя и пароль для исходного компьютера. Я видел какое-то решение, но не могу получить доступ к другому компьютеру. Я использовал, чтобы получить мои файлы, используя Directory. 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
не поддерживают передачу учетных данных, предпочтительным решением является выдача авторизованной учетной записи пользователя. Для этого необходимо импортировать два метода из файла advapi32.dll и kernel32.dll с помощью pInvoke:
//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(@"\\remotemachine\share\folder");
//Release the context, and close user token
ctx.Undo();
CloseHandle(token);
}
}
Здесь вы можете найти документацию MSDN функции LogonUser
const int LOGON_TYPE_NEW_CREDENTIALS = 9; const int LOGON32_PROVIDER_WINNT50 = 3; bool returnValue = LogonUser(user, domain, password, LOGON_TYPE_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, ref token);