监控程序运行状态,并根据状态启动或重启进程

监控程序运行状态,并根据状态启动或重启进程

需求

根据运行环境要求,我们所做的程序常常会在无人监管的情况下运行几个月之久。所以为了保证程序的正常运行,决定添加一个附属的监控程序。监控程序要求如下:

  1. 当检测到主程序未启动时,启动主程序。
  2. 当检测到主程序进程无响应,且超过一定时间后,重启主程序。
  3. 主程序启动时,会检测监控程序状态,若监控程序未启动,则启动监控程序。
    4基于以上要求,

设计思路

基于以上要求,我编写了基于.NET的监管程序。

  1. 首先,创建Windows窗体应用程序,在其Load事件中,写入
    this.Hide();//隐藏窗体
    this.ShowInTaskBar = false;//使监控程序不在任务栏出现
  1. 使用定时器,
  2. tmr = new System.Threading.Timer(new TimerCallback(Call), null, 0, 5000);

实现

以下是完整代码

 public class MonitorAndRestart
    {
    
    
        //string path = AppDomain.CurrentDomain.BaseDirectory+ "QQ.exe";
        //要启动程序的路径,以qq为例,可将其设置为
        string path = "D:\\Program Files\\QQ\\Bin\\" + "QQ.exe";
        string progressName = "QQ";
        static System.Threading.Timer tmr = null;
        public  void CallTick()
        {
    
    
            // 一个 System.Threading.TimerCallback 委托,表示要执行的方法
            //一个包含回调方法中,要使用信息的对象或 null
            // 在之前的延迟时间量 callback 调用,以毫秒为单位
            // 调用之间的时间间隔 callback
            tmr = new System.Threading.Timer(new TimerCallback(Call), null, 0, 5000);
        }

        private void Call(Object sender)//监听程序
        {
    
    
            try
            {
    
    
                if (System.Diagnostics.Process.GetProcessesByName(progressName).ToList().Count == 0)
                {
    
    
                    System.Diagnostics.Process.Start(path);
                }
                else if (System.Diagnostics.Process.GetProcessesByName(progressName)[0].Responding == false)
                {
    
    
                    System.Diagnostics.Process.GetProcessesByName(progressName)[0].Kill();
                    Thread.Sleep(200);
                    System.Diagnostics.Process.Start(path);
                }
            }
            catch (Exception ex)
            {
    
    

            }
        }
    }

在Load事件中,实例化MonitorAndRestart类,调用CallBack方法即可。

            MonitorAndRestart ms = new MonitorAndRestart();
            ms.CallTick();

在主程序中可是用同样方法,在主程序启动时,将监控程序启动。

猜你喜欢

转载自blog.csdn.net/weixin_42665998/article/details/102906727
今日推荐