C#重启IIS指定网站和指定应用程序池

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading;
  6 using System.IO;
  7 using Microsoft.Web.Administration;
  8
  9
 10 namespace RecoveryWebSite
 11 {
 12     class Program
 13     {
 14         const string AppPoolName = "POD";
 15         const string WebSiteName = "POD";
 16         const int SleepTime = 1000 * 60;
 17
 18         static void Main(string[] args)
 19         {
 20
 21             Thread tAppPool = new Thread(() => RecoveryAppPool());
 22             tAppPool.IsBackground = true;
 23             tAppPool.Start();
 24
 25             Thread tWebSite = new Thread(() => RecoveryWebSite());
 26             tWebSite.IsBackground = true;
 27             tWebSite.Start();
 28
 29             //防止程序退出
 30             while (true)
 31             {
 32                 Thread.Sleep(SleepTime);
 33             }
 34         }
 35
 36         static void RecoveryAppPool()
 37         {
 38             while (true)
 39             {
 40                 var sm = new ServerManager();
 41                 var pool = sm.ApplicationPools[AppPoolName];
 42                 if (pool != null && pool.State == ObjectState.Stopped)
 43                 {
 44                     WriteLog("检测到应用池" + AppPoolName + "停止服务");
 45                     WriteLog("正在启动应用池" + AppPoolName);
 46                     if (pool.Start() == ObjectState.Started)
 47                     {
 48                         WriteLog("成功启动应用池" + AppPoolName);
 49                     }
 50                     else
 51                     {
 52                         WriteLog("启动应用池" + AppPoolName + "失败. " + SleepTime / 60 + "秒后重试启动");
 53                     }
 54                 }
 55                 sm.Dispose();
 56                 sm = null;
 57                 Thread.Sleep(SleepTime);
 58             }
 59         }
 60
 61         static void RecoveryWebSite()
 62         {
 63             while (true)
 64             {
 65                 var sm = new ServerManager();
 66                 var site = sm.Sites[WebSiteName];
 67                 if (site != null && site.State == ObjectState.Stopped)
 68                 {
 69                     WriteLog("检测到网站" + WebSiteName + "停止服务");
 70                     WriteLog("正在启动网站" + WebSiteName);
 71                     if (site.Start() == ObjectState.Started)
 72                     {
 73                         WriteLog("成功启动网站" + WebSiteName);
 74                     }
 75                     else
 76                     {
 77                         WriteLog("启动网站" + WebSiteName + "失败. " + SleepTime / 60 + "秒后重试启动");
 78                     }
 79                 }
 80                 sm.Dispose();
 81                 sm = null;
 82                 Thread.Sleep(SleepTime);
 83             }
 84         }
 85
 86         static void WriteLog(string msg)
 87         {
 88             var fPath = "c:\\RecoveryWebsiteLog.txt";
 89             if (!File.Exists(fPath))
 90             {
 91                 File.Create(fPath).Close();
 92             }
 93
 94             using (StreamWriter sw = new StreamWriter(fPath, true, Encoding.UTF8))
 95             {
 96                 sw.WriteLine(string.Format("{0} , 时间{1}", msg, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")));
 97             }
 98         }
 99     }
100 }

注意:

Microsoft.Web.Administration 命名空间,可以通过Nuget包管理器找到并添加.这个启动网站和应用池的功能也可以通过cmd 给 appcmd.exe发送命令,读取cmd执行后的返回值来实现有待改进的地方:1,没做成服务.2,程序运行时间长,内存会有略微的增加,不知道什么原因.
时间: 2025-01-11 01:34:34

C#重启IIS指定网站和指定应用程序池的相关文章

入侵指定网站的一些方法(思路篇)

如何入侵指定网站! 首先,观察指定网站. 入侵指定网站是需要条件的: 要先观察这个网站是动态还是静态的. 首先介绍下什么样站点可以入侵:我认为必须是动态的网站 如ASP.PHP. JSP等代码编写的站点 如果是静态的(.htm或html),一般是不会成功的. 如果要入侵的目标网站是动态的,就可以利用动态网站的漏洞进行入侵. Quote:以下是入侵网站常用方法: 1.上传漏洞 如果看到:选择你要上传的文件 [重新上传]或者出现“请登陆后使用”,80%就有漏洞了! 有时上传不一定会成功,这是因为Co

如何搜索指定网站内信息

转自http://jingyan.baidu.com/article/5bbb5a1b3deb1413eba179ac.html 前言: 人们在上网查询资料时,经常用到搜索引擎,如Google搜索.百度搜索: 各搜索引擎均能根据你所输入的查询关键字搜索到大量丰富多彩的内容,真是看得人眼花缭乱,有时只想查看特定网站的内容,但大量链接不便于查询: 那么,如何搜索特定网站的内容呢? 方法一:利用搜索运算符: 1 如果你想搜索特定网站的内容,可以在查询关键字后,加入“site:”; 格式如下: 查询关键

IIS6.0必须重启IIS后才能管理网站

发现问题: IIS网站全部消失了.原因不明. 报错:The Path specified cannot be used at this time 解决步骤: 为IIS添加localhost,报错:The Path specified cannot be used at this time 查找原因:得出需要重启sharepoint timer服务. 重启后未果. 再查找原因:得出这是IIS的一个bug,需要安装一个修复补丁.补丁的现象描述里说重启IIS就好了,OK 重启IIS:iisreset

301跳转:IIS服务器网站整站301永久重定向设置方法(阿里云)

欢迎来到重庆SEO俱乐部:搜索引擎优化学习交流QQ群224306761. 承接:seo优化.网站建设.论坛搭建.博客制作.全网营销 博主可接:百度百家.今日头条.一点资讯等软文发布,有需要请联系PE! 点击与站长互动 301跳转:IIS服务器网站整站301永久重定向设置方法(阿里云) 首页 > 主机 > 正文 Panoeade / 2016-04-24 / 1975 views / 0 Replies / 悦读模式 / 百度已收录 欢迎投稿SEO/SEM及互联网相关文章:百度百家.今日头条.一

IIS部署网站后, 无法正常访问网站问题

IIS部署网站后, 无法正常访问网站问题,并且提示503错误,而且对应的应用程序池自动停止 在系统日志中可以跟踪到错误信息 "应用程序池"Lee_Integration_web"将被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误." "Windows Process Activation Service 未能为应用程序池"Lee_Integration_web"创建工作进程.数据字段包含错误号." 错误代码:80

IIS日志-网站运维的好帮手

原文:IIS日志-网站运维的好帮手 对于一个需要长期维护的网站来说,如何让网站长久稳定运行是件很有意义的事情. 有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了,这也是很正常的. 还有些时候,我们希望不断地优化网站,让网站更快速的响应用户请求, 这些事情都发生在开发之后的运维阶段. 与开发阶段不同的,运维阶段不可能让你去调试程序,发现各类问题, 我们只能通过各种系统日志来分析网站的运行状况, 对于部署在IIS上的网站来说,IIS日志提供了最有价值的信息,我们可以通过它来分析网站的响应情况,

重启IIS服务的方法

WINDOWS提供WEB服务的IIS有时候会出现访问过大导致网站打不开,这时重启IIS是最好的选择. 1.界面操作 打开"控制面板"->"管理工具"->"服务".找到"IIS Admin Service" 右键点击"重新启动" 弹出 "停止其它服务" 窗口,点击"是". 2.Net 命令操作 点击 "开始"->"运行&q

Windows服务器Pyton辅助运维--02.远程重启IIS服务器

Windows服务器Pyton辅助运维 02.远程重启IIS服务器 开发环境: u  Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u  运维服务器: Python 2.7.8 组件:pywin32(219)  wmi(1.4.9) 工作内容说明: 每次排除故障的时候开发人员都会要求重启Web服务器上的IIS,有很多台IIS服务器需要重启,当然Google知道bat可以搞定这件事,但是本文用python来搞定. 实现过程: 先准备以下几个问题 使用Wind

C#后台程序重启IIS,发邮件通知

应用场景:IIS网站挂掉,系统自动重启IIS,通知相关联系人: 主要代码: 监控类 public class monitoringiis { EmailSend send = new EmailSend(); public void MonitoringISSAppPool(object obj) { string method_Start = "Start"; string ISSAppPoolName = ""; string iislist = System.