[研究][WinForm][C#]偵測網站是否 Service Unavailable並 Reboot
2022-05-08
環境:Visual Studio 2022 + C# + WinForm + Console
********************************************************************************
Program.cs
using System;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Threading;
namespace CheckAndRestart
{
class Program
{
static void Main(string[] args)
{
//方法三:使用System.Threading.Timer
//Timer構造函數參數說明:
//Callback:一個 TimerCallback 委托,表示要執行的方法。
//State:一個包含回調方法要使用的信息的對象,或者為空引用(Visual Basic 中為 Nothing)。
//dueTime:調用 callback 之前延遲的時間量(以毫秒為單位)。指定 Timeout.Infinite 以防止計時器開始計時。指定零 (0) 以立即啟動計時器。
//Period:調用 callback 的時間間隔(以毫秒為單位)。指定 Timeout.Infinite 可以禁用定期終止。
Program obj = new Program();
//Console.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString());
// 1秒=1000毫秒,預計5分鐘監控一次
System.Threading.Timer threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(obj.Method3), null, 0, 5 * 60 * 1000);
// 測試觸發狀況
//while (true)
//{
// //Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString());
// //Console.WriteLine(DateTime.Now.ToString());
// Thread.Sleep(100);
//}
/*
// 忽略 https 憑證驗證
// https://blog.alantsai.net/posts/2017/12/csharp-ssl-remote-validation-error
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
// 讀取網頁內容
string html = string.Empty;
string url = "https://localhost";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "C# console client";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
html = reader.ReadToEnd();
}
//Service Unavailable
//HTTP Error 503.The service is unavailable.
//Console.WriteLine(DateTime.Now.ToString() + " 檢察網站是 Service Unavailable,是則重新啟動 Windows。");
//Console.WriteLine(html);
// 重新啟動 Windows
//System.Diagnostics.Process.Start("C:\\WINDOWS\\system32\\shutdown.exe", "-f -r -t 0");
// 另一種方法
//https://asd0961296920.pixnet.net/blog/post/318508838
// https://king39461.pixnet.net/blog/post/400285133
//ProcessStartInfo ps = new ProcessStartInfo();
//ps.FileName = "shutdown.exe";
//ps.Arguments = "-s -t 1";
//Process.Start(ps);
// http://www.blueshop.com.tw/board/FUM20050124192253INM/BRD2007032912332212M.html
*/
Console.ReadLine();
}
void Method3(Object state)
{
Console.WriteLine(DateTime.Now.ToString() + " 每5分鐘檢察網站是 Service Unavailable,是則重新啟動 Windows。");
//Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString());
//Console.WriteLine(DateTime.Now.ToString());
try
{
// 忽略 https 憑證驗證
// https://blog.alantsai.net/posts/2017/12/csharp-ssl-remote-validation-error
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
// 讀取網頁內容
string html = string.Empty;
// 網路環境關係,不可用真實網址,用 localhost
string url = "https://localhost";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "C# console client";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
html = reader.ReadToEnd();
}
//var client = new SmtpClient("smtp.gmail.com", 587)
//var client = new SmtpClient("127.0.0.1", 25)
var client = new SmtpClient("xxx.xxx.xxx.xxx", 25)
{
//EnableSsl = true,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential("Email帳號", "密碼")
};
//client.Send("測試信<xxx@gmail.com>", "to address", "test", "testbody");
if (html.Contains("Service Unavailable"))
{
client.Send("user1@abc.def", "user2@abc.def", "【XX網站】發現 Service Unavailable", "重新啟動 Windows"); |
(完)
相關
[研究][C#]呼叫 Windows Update 更新和 Reboot
https://shaurong.blogspot.com/2022/05/c-windows-update-reboot.html
[研究][WinForm][C#]偵測網站是否 Service Unavailable並 Reboot
https://shaurong.blogspot.com/2022/05/winformc-service-unavailable-reboot.html
沒有留言:
張貼留言