明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理
 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 }