1 using Jinher.AMP.BTP.Deploy; 2 using Microsoft.Web.Administration; 3 using Redis.Helper; 4 using System; 5 using System.Collections.Generic; 6 using System.Configuration; 7 using System.IO; 8 using System.Linq; 9 using System.Text; 10 using System.Threading; 11 using System.Threading.Tasks; 12 13 namespace Redis 14 { 15 16 public class Program 17 { 18 static readonly string AppPoolName = ConfigurationManager.AppSettings["ApplicationPoolName"].ToString(); 19 static readonly string WebSiteName = ConfigurationManager.AppSettings["WebSiteName"].ToString(); 20 static readonly int SleepTime = int.Parse(ConfigurationManager.AppSettings["SleepTime"].ToString()); 21 static ServerManager sm; 22 23 static void Main(string[] args) 24 { 25 Console.WriteLine($"检测程序启动,【{WebSiteName}】当网站或其应用池停下后,会自动启动。"); 26 sm = new ServerManager(); 27 new Thread(RecoveryWebSite).Start(); 28 } 29 30 static void RecoveryWebSite() 31 { 32 while (true) 33 { 34 try 35 { 36 var pool = sm.ApplicationPools[AppPoolName]; 37 if (pool != null && pool.State == ObjectState.Stopped) 38 { 39 Console.WriteLine("检测到应用池" + AppPoolName + "停止服务"); 40 Console.WriteLine("正在启动应用池" + AppPoolName); 41 if (pool.Start() == ObjectState.Started) 42 { 43 Console.WriteLine("成功启动应用池" + AppPoolName); 44 } 45 else 46 { 47 Console.WriteLine("启动应用池" + AppPoolName + "失败. " + SleepTime / 60 + "秒后重试启动"); 48 } 49 } 50 51 var site = sm.Sites[WebSiteName]; 52 if (site != null && site.State == ObjectState.Stopped) 53 { 54 Console.WriteLine("检测到网站" + WebSiteName + "停止服务"); 55 Console.WriteLine("正在启动网站" + WebSiteName); 56 if (site.Start() == ObjectState.Started) 57 { 58 Console.WriteLine("成功启动网站" + WebSiteName); 59 } 60 else 61 { 62 Console.WriteLine("启动网站" + WebSiteName + "失败. " + SleepTime / 60 + "秒后重试启动"); 63 } 64 } 65 } 66 catch (Exception ex) 67 { 68 Console.WriteLine(ex.Message.ToString()); 69 } 70 71 GC.Collect(); 72 Thread.Sleep(SleepTime); 73 } 74 } 75 } 76 }