在LocalSystem或LocalService帐户下运行AppPool时,从ASP.NET应用程序重新启动服务器
是否可以从LocalSystem或LocalService帐户托管的ASP.NET应用程序重新启动服务器? 当我创建自定义管理帐户并将AppPool放在该帐户下运行时,这是有效的:
Process.Start("shutdown", "/r /d 4:1 /t 10");
但是,我不想拥有自定义帐户(因为密码过期,需要在更改用户密码时更新所有AppPools – 我需要维护多个服务器)。
那么,这可能吗?
您始终可以使用可以重新启动服务器的其他标识启动该进程:
var info = new ProcessStartInfo("shutdown.exe", "/r /t 0"); info.UserName = "accountWithAdminPermissions"; //A not-so-secure use of SecureString var secureString = new SecureString(); var password = "abc123"; foreach (var letter in password) { secureString.AppendChar(letter); } info.Password = secureString; var restart = new Process(); restart.StartInfo = info; restart.Start();
如果您只想为非管理员帐户授予重新启动服务器的权限:
- 打开
secpol.msc
。 - 导航到“本地策略\用户权限分配”。
- 找到
Shutdown The System
。 - 添加帐户。
这可能是使用帐户获得最低权限的好方法。 这样,您就不必像管理员组中的帐户那样使用非常大的锤子。
Shutdown.exe
(我相信)总是需要管理员权限。 在没有shutdown.exe的情况下重启服务器时,可以参考此MSDNpost 。
您可以让您的代码在拨打电话时模拟特定帐户,或使用一个帐户启动网络服务。 我推荐网络服务,最糟糕的情况是你更新一个应用程序池。 您还可以在内部将Web服务锁定为仅应用程序。
用于模拟用户的小型C#类