我希望能够关闭或重新启动运行我的ASP.NET应用程序的服务器。以下代码在调试模式下运行良好:
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "shutdown";
startInfo.Arguments = "/r /f /t 0";
startInfo.UseShellExecute = true;
startInfo.Verb = "runas";
process.StartInfo = startInfo;
process.Start();
我也试过这段代码,但是我收到以下错误“Process对象必须将UseShellExecute属性设置为false才能以用户身份启动进程”:
var info = new ProcessStartInfo("shutdown.exe", "/r /t 0");
info.UserName = "administrator";
//A not-so-secure use of SecureString
var secureString = new SecureString();
var password = "password";
foreach (var letter in password)
{
secureString.AppendChar(letter);
}
info.Password = secureString;
var restart = new Process();
restart.StartInfo = info;
restart.Start();
我将以下内容添加到我的代码中:
info.UseShellExecute = false;
然后错误“Process对象必须将UseShellExecute属性设置为false才能以用户身份启动进程”消失,但代码执行方式与第一个代码块一样
当我在调试模式下执行代码或运行命令cmd时,服务器将重新启动。但是,当我在服务器上运行应用程序时,它不会重新启动。我没有收到任何错误,或弹出说服务器是或不打算重新启动。有人可以告诉我,我做错了吗?
更新:我添加了try-catch
,应用永远不会抛出异常。但是,当我查找事件日志时,我发现了shutdown.exe
答案 0 :(得分:0)
运行应用程序池的帐户没有足够的权限来重新启动系统,这就是它不会发生的原因。
您可以通过登录服务器然后转到Control Panel > Administrative Tools > Local Security Policy
,展开Security Settings > Local Policies > User Rights Assignment
节点并转到Shut down the system
设置来更改此设置。将应用程序池帐户(或其父组,如果您有一个组)添加到该列表中。