Вопрос:
Можно ли сохранить файл в сетевую директорию используя учетную запись другого пользователя?
Подробности:
Есть служба, работающая под учетно записью System.
Служба, кроме прочего, занимается синхронизацией со сторонним сервисом из которого нужно выкачивать файлы и складывать в сетевую папку.
Но у System нет прав доступа к сетевой папке.
Зато служба знает логин/пароль пользователя, у которого такие права есть.
(Пока видится только сохранение файла в temp и запуск копирования через Process.Start
, но может быть есть что-то более элегантное?)
Вы можете выполнить код внутри своего процесса от другого пользователя. Сначала импортируем WinAPI функцию LogonUser
:
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
out IntPtr phToken);
А дальше вот так:
IntPtr token;
if (LogonUser("SomeUser", "SomeDomain", "SomePwd", 2, 0, out token))
{
var identity = new WindowsIdentity(token);
using (identity.Impersonate())
{
// здесь вы можете убедиться, что код выполняется под другим юзером
Console.WriteLine(Environment.UserName);
// делаем что-то
File.WriteAllText(@"path.txt", "hello!");
}
}
else
{
Console.WriteLine("Invalid credentials");
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При выполнении запроса назад возвращает сообщение о том, что неверный тип данныхКак это можно исправить? Таблица SQL в Oracle SQL Database XE 11g release-2:
Читаю о LinkedList, затем в коде появляется LinkedListNodeВ книге используется, но не объясняется что это
Есть такой скрипт(рисует треугольник по заданным координатам и вставляет его в изображение) -