Как указать логин и пароль, чтобы моя программа открыла файл для чтения? Программа, которой необходим доступ к файлу, запускается из-под учетной записи, у которой нет доступа для чтения к папке, в которой находится файл. Программа написана на C# и .NET 2, работает под XP, а файл находится на компьютере с Windows Server 2003.
Как предоставить учетные данные для открытия файла?
Ответы (3)
Вы хотите выдать себя за пользователя, у которого есть права доступа к файлу.
Я рекомендую использовать такой класс: http://www.codeproject.com/KB/cs/zetaimpersonator.aspx. Он скрывает всю неприятную реализацию олицетворения.
using (new Impersonator("myUsername", "myDomainname", "myPassword"))
{
string fileText = File.ReadAllText("c:\test.txt");
Console.WriteLine(fileText);
}
person
James Newton-King
schedule
30.10.2008
Это прекрасно работает. Я обнаружил, что пути к файлам должны быть в формате UNC, если они расположены на другом компьютере.
- person ; 30.10.2008
У меня тоже работает, мне потребовалось некоторое время, чтобы заставить его работать, потому что я пропустил замечание, сделанное на странице, на которую ссылаются: Обратите внимание: пользовательский контекст, который инициирует олицетворение (т. е. не пользовательский контекст, на который он переключается) должен иметь Act как часть набора привилегий операционной системы.
- person rael_kid; 07.03.2012
Жаль, что автор codeproject так и не перенес его в Nuget. Комментарий моего ответа был предназначен только для развлечения; ибо понятно, что вы ответили на это 8 лет назад до Nuget.
- person ΩmegaMan; 19.02.2016
Я использовал пакет Nuget NuGet Gallery | Простая библиотека олицетворения 1.1.0, но есть и другие; поиск на Олицетворение для других.
Пример использования интерактивного входа для работы с файловыми структурами:
using (Impersonation.LogonUser("{domain}",
"{UserName}",
"{Password}",
LogonType.Interactive))
{
var directory = @"\\MyCorpServer.net\alpha\cars";
Assert.IsTrue(Directory.Exists(directory));
}
Ответ Джеймса ниже был до Nuget и до того, как он позже получит самый загружаемый пакет в Nuget. Иронично, да?
person
ΩmegaMan
schedule
18.02.2016
Вы можете выдавать себя за пользователя, имеющего необходимые права. В MSDN есть статья, в которой описывается, как это сделать.
person
Joe
schedule
30.10.2008