C#如何能否实现:当其他一个程序死了以后自动重启他

时间:2021-10-09 12:44:55
具体的说:
就是电脑上已经有一个程序A,能否用C#写个程序用来实现当A出现问题了后就重启A。

29 个解决方案

#1


写个服务

#2


写个监控程序,用杀不死的服务来包装

#3


具体如何实现,有代码吗?

#4


没有这方面的具体代码,但相信很简单吧

#5


可以 Process监视进程

#6


System.Process下面  自己翻MSDN吧

#7


说错了
System.Diagnostics.Process

#8


你可以在程序崩溃推出之前,在Schedule里加一个计划任务,然后程序死掉,计划任务执行,程序就又活过来了


以上内容,纯属虚构,如有雷同,纯属巧合

#9


学习单片机编程上的方法,设一个看门狗,定时喂狗,不喂就杀死那个程序的进程,然后再执行...

#10


另外写一个应用程序或windows服务来定时扫描A程序进程,如果发现该程序有问题就进行操作,比如杀除A,再重新启动A。这些代码都比较容易实现,不过需要定制一个契约,怎么样让B发现A运行有异常。

简单的实现可以在A中定时的向外部存储(比如文件或数据库)记录运行时间或状态,由B定时读取记录的数据进行分析,然后控制程序A进行下一步的动作。

B简单的实现可以实用计划任务。

#11


同意楼上的,契约就可以用楼上的楼上担的定时喂狗

#12


mark

#13


定时向A发送信息,如果没有回应,kill了

#14


try catch
然后在异常中统一用Application.Restart

#15


根据线程表现状态用另外线程管理杀死重启

#16


try catch
然后在异常中统一用Application.Restart

还没异常呐。。。

#17


是出现了问题才重启,你可以造一个异常出来,测试一下。

#18


写一个监控程序,在目标程序意外停止后,立即激活它

#19


做个service监控,

#20


判断程序是否死了?
必须订制一个标准,
比如多少秒没响应就杀死他

不过有些时候程序在进行大规模运算时
cpu 100 一段时间也不是死掉了,如果这个时候杀死他就不对了。

还有 如果某个线程 死掉了 
主线程还是可以响应的!

#21


to:wongjay() ( 一级(初级))

看门狗很有趣
以前没有想过
嘿嘿

#22


写个监控程序,同时你的A程序中设立一个通讯机制,如果你的监控程序在若干长时间爱探测不到回应的话,就认为是死了,清除出去,再次启动它

#23


服务程序监控A程序进程,A有问题时杀除并重启A。
应该不难,主要看你以什么作为A死掉或有问题的对象或状态来检查了。

#24


只有有窗口的应用程序才能判断是否响应,没有窗口的应用程序一律返回true

#25


不知道啊

#26


都没给  代码  谈理论我会

#27


首先判断某程序是不是停止响应,然后重新启动它吧?
Process[] ps=Process.GetProcesses();
//如果是指定进程可以用Process.GetProcessesByName("yourprocessname")
foreach(Process p in ps)
{
if(!p.Responding)
//根据p.MainModule.FileName重新用Process启动它
}
不知道楼主是不是这个意思?

#28


判断一个进程是不是停止响应方法很多,比如SendMessageTimeout发送WM_NULL消息==

#29


方法很多,看你如何试想

#1


写个服务

#2


写个监控程序,用杀不死的服务来包装

#3


具体如何实现,有代码吗?

#4


没有这方面的具体代码,但相信很简单吧

#5


可以 Process监视进程

#6


System.Process下面  自己翻MSDN吧

#7


说错了
System.Diagnostics.Process

#8


你可以在程序崩溃推出之前,在Schedule里加一个计划任务,然后程序死掉,计划任务执行,程序就又活过来了


以上内容,纯属虚构,如有雷同,纯属巧合

#9


学习单片机编程上的方法,设一个看门狗,定时喂狗,不喂就杀死那个程序的进程,然后再执行...

#10


另外写一个应用程序或windows服务来定时扫描A程序进程,如果发现该程序有问题就进行操作,比如杀除A,再重新启动A。这些代码都比较容易实现,不过需要定制一个契约,怎么样让B发现A运行有异常。

简单的实现可以在A中定时的向外部存储(比如文件或数据库)记录运行时间或状态,由B定时读取记录的数据进行分析,然后控制程序A进行下一步的动作。

B简单的实现可以实用计划任务。

#11


同意楼上的,契约就可以用楼上的楼上担的定时喂狗

#12


mark

#13


定时向A发送信息,如果没有回应,kill了

#14


try catch
然后在异常中统一用Application.Restart

#15


根据线程表现状态用另外线程管理杀死重启

#16


try catch
然后在异常中统一用Application.Restart

还没异常呐。。。

#17


是出现了问题才重启,你可以造一个异常出来,测试一下。

#18


写一个监控程序,在目标程序意外停止后,立即激活它

#19


做个service监控,

#20


判断程序是否死了?
必须订制一个标准,
比如多少秒没响应就杀死他

不过有些时候程序在进行大规模运算时
cpu 100 一段时间也不是死掉了,如果这个时候杀死他就不对了。

还有 如果某个线程 死掉了 
主线程还是可以响应的!

#21


to:wongjay() ( 一级(初级))

看门狗很有趣
以前没有想过
嘿嘿

#22


写个监控程序,同时你的A程序中设立一个通讯机制,如果你的监控程序在若干长时间爱探测不到回应的话,就认为是死了,清除出去,再次启动它

#23


服务程序监控A程序进程,A有问题时杀除并重启A。
应该不难,主要看你以什么作为A死掉或有问题的对象或状态来检查了。

#24


只有有窗口的应用程序才能判断是否响应,没有窗口的应用程序一律返回true

#25


不知道啊

#26


都没给  代码  谈理论我会

#27


首先判断某程序是不是停止响应,然后重新启动它吧?
Process[] ps=Process.GetProcesses();
//如果是指定进程可以用Process.GetProcessesByName("yourprocessname")
foreach(Process p in ps)
{
if(!p.Responding)
//根据p.MainModule.FileName重新用Process启动它
}
不知道楼主是不是这个意思?

#28


判断一个进程是不是停止响应方法很多,比如SendMessageTimeout发送WM_NULL消息==

#29


方法很多,看你如何试想