Вопрос:
Можно ли сохранить файл в сетевую директорию используя учетную запись другого пользователя?
Подробности:
Есть служба, работающая под учетно записью 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");
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При выполнении запроса назад возвращает сообщение о том, что неверный тип данныхКак это можно исправить? Таблица SQL в Oracle SQL Database XE 11g release-2:
Читаю о LinkedList, затем в коде появляется LinkedListNodeВ книге используется, но не объясняется что это
Есть такой скрипт(рисует треугольник по заданным координатам и вставляет его в изображение) -