是否可以从LocalSystem或LocalService帐户托管的ASP.NET应用程序重新启动服务器?这在我创建自定义管理帐户并将AppPool放在该帐户下运行时起作用:
Process.Start("shutdown", "/r /d 4:1 /t 10");
但是,我不想拥有自定义帐户(因为密码过期,需要在更改用户密码时更新所有AppPools - 我需要维护多个服务器)。
那么,这可能吗?
答案 0 :(得分:6)
您始终可以使用可以重新启动服务器的其他标识启动该过程:
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的情况下重启服务器时,可以参考this MSDN post。
答案 1 :(得分:2)
您可以让您的代码在拨打电话时模拟特定帐户,或使用一个帐户启动网络服务。我推荐网络服务,最糟糕的情况是你更新一个应用程序池。您还可以在内部将Web服务锁定为仅应用程序。