日期:2014-05-18  浏览次数:20448 次

如何用.NET写一个程序来重启服务器
private void runCmd(string docCmd)
  {
  Process proc = new Process();
  proc.StartInfo.FileName = "cmd.exe";
  proc.StartInfo.UseShellExecute = false;
  proc.StartInfo.RedirectStandardInput = true;
  proc.StartInfo.RedirectStandardOutput = true;
  proc.StartInfo.CreateNoWindow = true;
  try
  {
  if (proc.Start())
  {
  proc.StandardInput.WriteLine(docCmd);
  string output = proc.StandardOutput.ReadToEnd();//读取进程的输出
  WriteText(docCmd+output);
  }
  }
  catch (Exception ex)
  {
  WriteText(ex.Message);
  }
  finally
  {
  if (proc != null)
  proc.Close();
  }
  }

这是我的代码。我在本地测试没有问题,我把代码放到服务器上运行,执行runCmd("SHUTDOWN /R");也没问题。。但是我在本地发布以后上传到服务器就没反应了。我郁闷啊。。求解答!

我的意思是想能通过网页的形式传入特定的参数来重启服务器。。是不是权限问题?如果是应该怎么设置,因为我在服务器上直接用VS测试我的代码,是可以运行的。也会正常重启。。但是发布后通过网页的形式传入参数就发现代码也运行了。我做了日志记录。。但是发现服务器没重启。代码运行过程中也没报错!!

------解决方案--------------------
权限不足。
------解决方案--------------------
本地安全策略--本地策略--安全选项--网络访问:本地帐户的共享和安全模式
--属性 选择:经典-本地用户以自己的身份验证。


------解决方案--------------------
你的服务器系统是什么??
------解决方案--------------------
用VS测试时,执行的帐号是当前登录用户权限,如果你放网页上远程执行,是IIS运行的默认帐号ASPNET(xp)或者network service(win2000,win7)
------解决方案--------------------
我觉得你可以换一个思路来做这个程序,因为你想用ASP.NET 程序来实现这个有点难度,因为ASP.NET的安全机制可能都不会允许你这样去做,不如你ASP.NET插入数据,再做一个本地执行WinForm程序循环检测数据库中该字段是否被更新,发现更新抵用系统API重启。可以保证不会有问题,但是CMD就不确定了
------解决方案--------------------
你可以在服务器中通过Remoting的方式进行重启
------解决方案--------------------
探讨

我是用管理员账户登录的,所以应该没问题

------解决方案--------------------
把network service 加入到 administrators试试吧。