You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.8 KiB
91 lines
2.8 KiB
using System;
|
|
using System.Diagnostics;
|
|
using System.Timers;
|
|
|
|
namespace WebMvcEF
|
|
{
|
|
/// <summary>
|
|
/// 監控程序是否卡死
|
|
/// </summary>
|
|
public sealed class ProcessKiller : IDisposable
|
|
{
|
|
private readonly Timer Timer;
|
|
private Process[] ProcessList;
|
|
private readonly string ProcessName;
|
|
|
|
public static ProcessKiller StartNew(string processName, int interval)
|
|
{
|
|
var process = new ProcessKiller(processName, interval);
|
|
process.Start();
|
|
return process;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 產生計時器去監控指定程序
|
|
/// </summary>
|
|
/// <param name="processName">程序名稱</param>
|
|
/// <param name="interval">每幾秒檢查一次</param>
|
|
private ProcessKiller(string processName, int interval)
|
|
{
|
|
// 設定時間及監控程序名
|
|
Timer = new Timer(interval * 1000);
|
|
ProcessList = Array.Empty<Process>();
|
|
ProcessName = processName;
|
|
|
|
// 計時檢查程序卡死問題
|
|
Timer.Elapsed += new ElapsedEventHandler(CheckProcess);
|
|
Timer.AutoReset = true;
|
|
}
|
|
|
|
private void CheckProcess(object sender, ElapsedEventArgs e)
|
|
{
|
|
// 判斷是不是為空
|
|
if (ProcessList.Length >= 1)
|
|
{
|
|
// 把當下電腦執行soffice取回來
|
|
var currentProcesses = Process.GetProcessesByName(ProcessName);
|
|
|
|
if (currentProcesses.Length > 0)
|
|
{
|
|
try
|
|
{
|
|
// 把上次抓的List跟當下抓的List做比對
|
|
for (var i = 0; i < ProcessList.Length; i++)
|
|
{
|
|
for (var j = 0; j < currentProcesses.Length; j++)
|
|
{
|
|
// 如果有相同id的就刪除
|
|
if (ProcessList[i].Id == currentProcesses[j].Id)
|
|
{
|
|
ProcessList[i].Kill();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
// 關不掉也沒關係
|
|
}
|
|
}
|
|
}
|
|
// 重抓一次程序,下一次可以比對
|
|
ProcessList = Process.GetProcessesByName(ProcessName);
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
Timer.Start();
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
Timer.Stop();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Timer?.Dispose();
|
|
}
|
|
}
|
|
}
|