Процесс, запущенный с сайта ASP.NET, принадлежащего LocalSystem, не может перезагрузить локальный компьютер - PullRequest
0 голосов
/ 16 января 2019

У меня есть веб-сайт 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?

...