.net重启iis线程池和iis站点程序代码分享

  重启站点:

  

复制代码 代码如下:

  /// <summary>

  /// 根据名字重启站点.(没重启线程池)

  /// </summary>

  /// <param name="sitename"></param>

  static void RestartWEbSite(string sitename)

  {

  try

  {

  var server = new ServerManager();

  var site = server.Sites.FirstOrDefault(s => s.Name == sitename);

  if (site != null)

  {

  site.Stop();

  if (site.State == ObjectState.Stopped)

  {

  }

  else

  {

  Console.WriteLine("Could not stop website!");

  throw new InvalidOperationException("Could not stop website!");

  }

  site.Start();

  }

  else

  {

  Console.WriteLine("Could not find website!");

  throw new InvalidOperationException("Could not find website!");

  }

  }

  catch (Exception e)

  {

  Console.WriteLine(e);

  }

  }

  /// <summary>

  /// 重启完之后.要再检测下.是否开启了

  /// </summary>

  /// <param name="sitename"></param>

  static void FixWebsite(string sitename)

  {

  try

  {

  var server = new ServerManager();

  var site = server.Sites.FirstOrDefault(s => s.Name == sitename);

  if (site != null)

  {

  if (site.State != ObjectState.Started)

  {

  Thread.Sleep(500);

  //防止状态为正在开启

  if (site.State != ObjectState.Started)

  {

  site.Start();

  }

  }

  }

  }

  catch (Exception e)

  {

  Console.WriteLine(e);

  }

  }

  重启iis线程池:

  

复制代码 代码如下:

  /// <summary>

  /// 线程池名字

  /// </summary>

  /// <param name="name"></param>

  static void RestartIISPool(string name)

  {

  string[] cmds = { "c:", @"cd %windir%\system32\inetsrv", string.Format("appcmd stop apppool /apppool.name:{0}", name), string.Format("appcmd start apppool /apppool.name:{0}", name) };

  Cmd(cmds);

  CloseProcess("cmd.exe");

  }

  /// <summary>

  /// 运行CMD命令

  /// </summary>

  /// <param name="cmd">命令</param>

  /// <returns></returns>

  public static string Cmd(string[] cmd)

  {

  Process p = new Process();

  p.StartInfo.FileName = "cmd.exe";

  p.StartInfo.UseShellExecute = false;

  p.StartInfo.RedirectStandardInput = true;

  p.StartInfo.RedirectStandardOutput = true;

  p.StartInfo.RedirectStandardError = true;

  p.StartInfo.CreateNoWindow = true;

  p.Start();

  p.StandardInput.AutoFlush = true;

  for (int i = 0; i < cmd.Length; i++)

  {

  p.StandardInput.WriteLine(cmd[i]);

  }

  p.StandardInput.WriteLine("exit");

  string strRst = p.StandardOutput.ReadToEnd();

  //Debug.Print(strRst);

  p.WaitForExit();

  p.Close();

  return strRst;

  }

  /// <summary>

  /// 关闭进程

  /// </summary>

  /// <param name="ProcName">进程名称</param>

  /// <returns></returns>

  public static bool CloseProcess(string ProcName)

  {

  bool result = false;

  var procList = new ArrayList();

  foreach (Process thisProc in Process.GetProcesses())

  {

  var tempName = thisProc.ToString();

  int begpos = tempName.IndexOf("(") + 1;

  int endpos = tempName.IndexOf(")");

  tempName = tempName.Substring(begpos, endpos - begpos);

  procList.Add(tempName);

  if (tempName == ProcName)

  {

  if (!thisProc.CloseMainWindow())

  thisProc.Kill(); // 当发送关闭窗口命令无效时强行结束进程

  result = true;

  }

  }

  return result;

  }