如何避免关键程序被意外关闭?

1,问题的提出

最近公司开发了一个数据上传程序,要求24小时运行不能中断。但实际部署后,发现有时被windows认定为程序异常,从而被关闭。

由于机器绑定了固定IP,程序必须在此固定Ip的服务器上运行。因此不能更换为其它服务器。

在服务器上安装杀毒软件后,异常退出情况有所好转,但仍不能100%保证。

重装系统也是非常繁琐,且需中断程序执行,即使重装问题也不一定能得到解决。

2,解决思路

一个简单的解决方案是,不去保证程序不会退出,但保证程序退出后能立即重新运行。显然,后一项保证容易实现得多。因此,问题变成了实现程序运行监控的问题。

首先,运行一个监控程序,与上传程序同时运行,监控程序每隔5分钟检查上传程序是否退出,如果退出就重新启动运行它。

显然,这个方案存在缺陷,如果监控程序被意外关闭了呢?比如人工意外关闭,或被操作系统关闭。

因此,考虑再加一个监控程序的监控程序。我们把前一个监控程序称为“监控程序1”,这后一个监控程序称为“监控程序2”。

显然,监控程序1需要同时监控1个程序:上传程序和监控程序2,而监控程序2只需要监控“监控程序1”即可。

监控程序1和监控程序2相互监控,相互启动。人为关闭监控程序不可能了,系统也不太可能同时关闭两个程序。因此保证了监控程序1的运行,从而也就保证了上传程序的持续运行。

那么如何退出呢?比如现在确实需要停止上传程序的运行,以便进行程序的更新。

为此,要在监控程序1的界面加上启动监控和停止监控2个按钮。在停止监控按钮按下后,监控程序1不再监控“上传程序”和“监控程序2”,此时可以关闭“上传程序”和“监控程序2”,然后再关闭“监控程序1”。

3,程序实现

程序采用delphi编写,此处不再详述。需要说明的一点,因为监控操作频繁发生,为防止界面失去响应,应在子线程中实现。

时间: 2024-10-29 21:07:03

如何避免关键程序被意外关闭?的相关文章

linux_后台启动多个java -jar 程序,及关闭

启动脚本 startup.sh #!/bin/bash x=$(($1)) while (($x>0)) do java -jar /home/chenpenghui/crawler/crawler-hb/StartUpIp.jar & sleep 3 x=$(($x-1)) done 线程数 等于 输入值 启动如下 ./startup.sh 10 停止脚本 clean.sh #!/bin/bash kill -9 `ps ax|grep /home/chenpenghui/crawler/

WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟踪处理.本文介绍我在我在我的框架里面使用WCF服务的时候,出现的一个常见错误的处理方法,它的提示信息是:基础连接已经关闭: 连接被意外关闭.这种情况我碰到的有两种,一种是返回DataTable的时候出现的,一种是返回实体类

httpWebRequest请求错误,基础连接已经关闭: 连接被意外关闭

win10下,C# 用httpWebRequest 执行post请求出现"请求错误,基础连接已经关闭: 连接被意外关闭",经测试设置 //Post请求方式 System.Net.HttpWebRequest request;            request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);            //Post请求方式            request.Method = "P

微信 连接被意外关闭

http://www.cnblogs.com/zwb800/p/4182983.html 解决后报另一个错误 基础连接已关闭 连接被意外关闭 其实是没访问到证书 解决方法是 1.开始-运行 输入mmc 2.文件-添加/删除管理单元 在可用的管理单元中选择 证书 添加到右侧 弹框选择计算机帐户 3.展开个人-证书 选择你导入的证书或从这里右键导入 4.右击证书-所有任务-管理私钥 5.添加IIS_IUser 勾选读取就行 域用户,把自己用户名加入即正常. --

减小Delphi2010程序的尺寸(关闭RTTI反射机制)

自从Delphi2010增强了RTTI反射机制后,编译出来的程序变得更大了,这是因为默认情况下 Delphi2010 给所有类都加上了RTTI信息(呵呵,不管你用不用它,好像实用价值确实不高,至少目前我不会去用的).虽说对程序的运行速度影响不大,但会增加安装程序的大小,这也是我们不愿看到的.有没有办法禁用RTTI信息,从而减小编译后程序的大小呢?,从文档中我们找到了方法. 一.在工程中用编译指令禁用RTTI 禁用的方法很简单,就是要在工程(dpr文件中.Delphi2010下项目文件是dproj

c#中 HttpWebRequest请求抛异常,基础连接已经关闭: 连接被意外关闭

在用httpWebRequest模拟请求的时候有时因为服务器等方面做了请求的限制, 在请求会出现基础连接已经关闭: 接收时发生意外错误的错误 一般原因是因为服务器不允许与 Internet 资源建立持久性连接连接和http的版本造成 做如下简单修改httpWebRequest即可解决 request.KeepAlive = false; //设置不建立持久性连接连接 request.ProtocolVersion = HttpVersion.Version10; //http的版本有2个,一个是

Windows Server 2012升级R2过程中意外关闭恢复原系统方法

2012升级R2过程中强制关闭了计算机,导致再次启动后蓝屏提示"BAD_SYSTEM_CONFIG_INFO".用2012安装盘进入尝试修复失败(安全模式什么的都不用想),进入命令提示符查看错误日志发现是由注册表意外损坏引起(本想上调试器). 由于Windows在升级时会对原有注册表进行备份,可以在对应操作系统盘符+"\Windows\System32\config\RegBack"下找到(例如:C:\Windows\System32\config\RegBack)

winform程序登陆后关闭登录窗体

用winform做程序的时候,我们一般都是在Program先启动登录窗体,然后登录成功后才创建主窗体,结果这就导致了登录窗体无法关闭 所以如果我们不在Program的程序入口先创建登录窗体的话就能完美实现登录成功后关闭登录窗体的功能了,直接贴代码 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; n

Macbook怎么强制关闭后台程序?Macbook强制关闭后台程序的方法

有时候我们的Macbook电脑运行某个程序卡在那里耗了很长时间,程序本身有可能提供了取消按钮,点了也没有反应,这时候我们就很想强制关闭它了,那么Macbook怎么强制关闭后台运行的程序呢?下面完美小编就给大家带来几种关于Macbook怎么关闭后台程序的方法. 1.方法1: 我觉得最好得办法,按下快捷键:Command+Option+Esc来打开"强制退出应用程序"的窗口,然后选中你需要退出的程序,再点右下方的"强制退出"即可. 2.方法2: 如果你非常确定你正处于当