优化监测程序逻辑

监控程序的逻辑:
定时1min监控上位机程序有没有掉线,掉线了对程序的几个端口号进行扫描,若存在占用则进行5分钟的扫描,5分钟后还在就重启工控机;若不存在占用则重新打开上位机程序
This commit is contained in:
春风过客 2023-09-22 16:05:17 +08:00
parent 8cd91e6fd8
commit 19da9de4ff
13 changed files with 101 additions and 42 deletions

View File

@ -5,9 +5,13 @@ using System.Data;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Net.NetworkInformation;
using System.Net;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace MonitoringProgram namespace MonitoringProgram
{ {
@ -22,10 +26,26 @@ namespace MonitoringProgram
this.Left = -10000; this.Top = -10000;//宽高属性窗口位置放置到桌面界面外 this.Left = -10000; this.Top = -10000;//宽高属性窗口位置放置到桌面界面外
this.Opacity = 0;//最重要的一个属性 不透明度 this.Opacity = 0;//最重要的一个属性 不透明度
string exePath = "F:\\Code\\yibayiyi\\ZTTMS_Manage_yibayiyi_KeepaliveTest3_DN_V1.0\\ZTTMS_Manage_yibayiyi_20230320\\bin\\Debug\\ZTTMS_Manage_yibayiyi_20230320.exe"; Process[] process = Process.GetProcessesByName("ZTTMS_Manage_yibayiyi_20230320");
if (process.Length == 0)
var target = Process.Start(exePath, "auto"); {
targetProcessId = target.Id; bool isUse = PortInUse(55000);
Console.WriteLine("端口占用情况:" + isUse.ToString());
if (isUse)
{
//端口被占用
portInUseTime++;
}
else
{
var target = Process.Start(exePath, "auto");
targetProcessId = target.Id;
}
}
else
{
targetProcessId = process[0].Id;
}
Console.WriteLine(targetProcessId); Console.WriteLine(targetProcessId);
@ -37,31 +57,26 @@ namespace MonitoringProgram
//PID //PID
int targetProcessId = 0; int targetProcessId = 0;
string exePath = "F:\\Code\\yibayiyi\\20230201_1811_upperpc\\ZTTMS_Manage_yibayiyi_KeepaliveTest3_GKJ_V1.2\\ZTTMS_Manage_yibayiyi_20230320\\bin\\Debug\\ZTTMS_Manage_yibayiyi_20230320.exe";
//通过exe的允许路径 查找对应的进程 int portInUseTime = 0;
private Process FindMainProcessByPath(string exePath)
//判断端口是否被占用
public static bool PortInUse(int port)
{ {
Process target = null; bool inUse = false;
IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
foreach (var p in Process.GetProcesses()) IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();
foreach (IPEndPoint endPoint in ipEndPoints)
{ {
try if (endPoint.Port == port)
{ {
if (p.MainModule.FileName == exePath) inUse = true;
{ break;
if (p.Id != Process.GetCurrentProcess().Id)
{
target = p;
break;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
} }
} }
return target; return inUse; // 返回true说明端口被占用
} }
@ -107,36 +122,69 @@ namespace MonitoringProgram
} }
} }
private void timerCheckProcessState_Tick(object sender, EventArgs e) private void timerCheckProcessState_Tick(object sender, EventArgs e)
{ {
Process process = null; Process[] process = null;
try try
{ {
// 获取指定ID的进程 // 获取指定ID的进程
process = Process.GetProcessById(targetProcessId); //process = Process.GetProcessById(targetProcessId);
process = Process.GetProcessesByName("ZTTMS_Manage_yibayiyi_20230320");
} }
catch { } catch (Exception ex)
if (process == null)
{ {
Console.WriteLine("进程不存在或已退出,需要重启!"); Console.WriteLine("GetProcessByIdError:" + ex.Message);
// 进程不存在 已退出 ,需要重启
// 重启代码
string exePath = "F:\\Code\\yibayiyi\\ZTTMS_Manage_yibayiyi_KeepaliveTest3_DN_V1.0\\ZTTMS_Manage_yibayiyi_20230320\\bin\\Debug\\ZTTMS_Manage_yibayiyi_20230320.exe";
var target = Process.Start(exePath, "auto");
targetProcessId = target.Id;
} }
else if(checkProcess(process)==false)
try
{ {
//进程卡死 if (process == null || process.Length == 0)
process.Kill(); {
Console.WriteLine("进程不存在或已退出,开始监测端口是否被占用!");
//重启进程 bool isUse = PortInUse(55000);
string exePath = "F:\\Code\\yibayiyi\\ZTTMS_Manage_yibayiyi_KeepaliveTest3_DN_V1.0\\ZTTMS_Manage_yibayiyi_20230320\\bin\\Debug\\ZTTMS_Manage_yibayiyi_20230320.exe"; Console.WriteLine("端口占用情况:" + isUse.ToString());
if (isUse)
{
//端口被占用
portInUseTime++;
var target = Process.Start(exePath, "auto"); if (portInUseTime > 4)
targetProcessId = target.Id; {
//重启工控机30s后重启
Process.Start("shutdown", "/r /t 30"); // 参数 /r 的意思是要重新启动计算机
}
}
else
{
//端口未被占用
portInUseTime = 0;
// 进程不存在 已退出 ,需要重启
// 重启代码
var target = Process.Start(exePath, "auto");
targetProcessId = target.Id;
}
}
else if (checkProcess(process[0]) == false)
{
Console.WriteLine("进程卡死30后重启计算机");
//进程卡死
process[0].Kill();
//重启工控机30s后重启
Process.Start("shutdown", "/r /t 30"); // 参数 /r 的意思是要重新启动计算机
}
else
{
Console.WriteLine("进程继续运行!");
}
}
catch (Exception ex)
{
Console.WriteLine("CheckProcessStateError:" + ex.Message);
} }
} }
} }

View File

@ -9,3 +9,14 @@ F:\Code\yibayiyi\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram
F:\Code\yibayiyi\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.exe F:\Code\yibayiyi\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.exe
F:\Code\yibayiyi\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.pdb F:\Code\yibayiyi\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.pdb
F:\Code\yibayiyi\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.Form1.resources F:\Code\yibayiyi\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.Form1.resources
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\bin\Debug\MonitoringProgram.exe.config
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\bin\Debug\MonitoringProgram.exe
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\bin\Debug\MonitoringProgram.pdb
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.csproj.AssemblyReference.cache
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.csproj.SuggestedBindingRedirects.cache
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.Form1.resources
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.Properties.Resources.resources
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.csproj.GenerateResource.cache
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.csproj.CoreCompileInputs.cache
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.exe
F:\Code\yibayiyi\20230201_1811_upperpc_Monitor\MonitoringProgram\MonitoringProgram\obj\Debug\MonitoringProgram.pdb