我有一个在LocalSystem下运行的ASP.NET网站。我试图通过这样的请求线程启动新的shutdown.exe进程来重启当前计算机:
var psi = new ProcessStartInfo
{
FileName = "shutdown.exe",
Arguments = "-r -f",
UseShellExecute = false,
CreateNoWindow = true
};
Process.Start(psi);
此操作失败,并显示“访问被拒绝”错误。我认为这与丢失特权有关-但是通过C#代码或PowerShell启用它并没有帮助(基于找到的here答案)。我还尝试将SYSTEM添加到有权关闭系统(based on this)的用户/组列表中。
因此,我尝试运行以上代码,包括ProcessStartInfo(常规Adminsitrator帐户)的用户名和密码。我还做了一些检查,以确保该进程实际上是在该用户(不是LocalSystem)下执行的。重新启动仍然不起作用。当我尝试使用powershell.exe
(然后使用cmdlet Restart-Computer
)或使用cmd.exe
和/c shutdown
作为参数时,也会发生同样的情况。我在2台计算机(一台EC2实例,一台带有最新Windows Server 2016的私有服务器)上尝试了此操作。
现在最令人困惑的部分是:一旦我将网站应用程序池帐户更改为常规的Administrator用户帐户而不是LocalSystem,它便开始工作。这怎么可能?父子过程关系有问题吗?当父进程作为LocalSystem运行时,我是否缺少任何权限/特权?