小弟有个程序需要做个功能是的程序卡死(或被意外终止)时,能够自动重新启动程序。没有好的实现思路,在此请教各位前辈大神了。
    需要一个比较完整的思路,关键代码。
   

解决方案 »

  1.   

    软件看门狗?这个没有涉猎过。
    先不说看门狗的事情
    你的软件卡死的意思是CPU占用率很高?那你首先的读到该程序CPU占用率才行。
      

  2.   

    如果是VB6,可以考虑用DDE,参考:
    http://support.microsoft.com/kb/189498/zh-cn还有常用的内存拷贝方法,参考:
    http://zhidao.baidu.com/question/287503176.html
      

  3.   

    你这到提醒我了,
    可否考虑使用COM端口来操作?计算机上有两个串口,比如:
    1、被监控程序占用COM1、监控程序占用COM2
    2、将两个串口用物理线路连接起来(2-3、3-2)
    3、监控程序定时发送串口通信命令给被监控程序,根据返回时间来判断被监控程序的状态,如果没有返回,表示被监控程序不在了,那么重新启动。如果返回连续超时几次,那么终止掉该进程,再启动。
      

  4.   

    比如你的程序A.exe活着的标志是abc.log文件大小每隔比如5分钟肯定变化的话,
    写另一个程序B.exe,每隔5分钟检查abc.log文件大小发现不变的话:
    shell "TASKKILL /IM A.exe"
    shell "A.exe"
      

  5.   

    是啊 只是模拟这种功能,有点简单我的想法
    主程序有个timer修改一个外部ini文件中的一个值为0,检测程序定时检测这个值来判定主程序运行的状态
    是不是卡死或者已经被关闭了,如果是在重新打开主程序,不知道各位觉得这种想法是否合适,
    其实太难的我也不会
      

  6.   

    那何不?tasklist检查有没有进程,如果没有就taskkill
    然后在运行?
    这个程序可以实现Shell的功能,从而实现tasklist内容的获取
      

  7.   

    个人认为,既然是看门狗,那就的有硬件介入,一点臆想,仅供参阅:
    1、以并口作为看门狗的硬件
    2、自己做一个并口短接头,将其中的一些TTL输入和TTL输出短接(这个全由你自己定义,也只有你自己知道)
    3、被监控程序如果运行,那么就设置某几个输出(通过短接线路,转换为输入),且每次输出不一致,监控程序读取这个输入,看看是否变化。如果不变化,那么表明被监控者挂了。重新启动。如果有变化,那么表明被监控者或者。虽然我没有做过加密狗之类的硬件,但我想他的思想应该差不多。
    这个方法比简单的纯软件方法更可靠,毕竟要懂软件,又要懂硬件设计的人不多。
      

  8.   

    因为有时进程会假死(即tasklist中有但不实际干活)