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 }