У меня есть веб-сайт ASP.NET, который работает под локальной системой.Я пытаюсь перезагрузить текущую машину, запустив новый процесс shutdown.exe из потока запросов, например:
var psi = new ProcessStartInfo
{
FileName = "shutdown.exe",
Arguments = "-r -f",
UseShellExecute = false,
CreateNoWindow = true
};
Process.Start(psi);
Это происходит с ошибкой «Отказано в доступе».Я думал, что речь идет о пропущенных привилегиях - но включение его с помощью кода C # или PowerShell не помогло (основываясь на найденных ответах здесь ).Я также попытался добавить SYSTEM в список пользователей / групп, у которых есть разрешение на отключение системы ( на основе этого ).
Поэтому я попытался запустить приведенный выше код, включая имя пользователя и пароль, кProcessStartInfo (обычная учетная запись администратора).Я также сделал несколько проверок, чтобы убедиться, что процесс на самом деле выполняется под этим пользователем (не LocalSystem) - и это так.Перезагрузка все еще не работает.То же самое происходит, когда я пытаюсь сделать это с powershell.exe
(а затем с командлетом Restart-Computer
) или с cmd.exe
и /c shutdown
в качестве аргументов.Я попробовал это на 2 компьютерах (один экземпляр EC2, один частный сервер со свежей Windows Server 2016).
Теперь самая запутанная часть: как только я изменю свою учетную запись пула приложений на веб-сайте вместо обычной учетной записи администратораLocalSystem это начинает работать.Как это возможно?Является ли проблема родительско-дочерних процессов проблемой?Есть ли какие-либо права доступа / привилегии, которые мне не хватает, когда родительский процесс выполняется как LocalSystem?