解决方案 »

  1.   

    通常的Solution都是使用两个服务,一个服务Maintenance监视另一个服务,如果发现被监视的服务意外退出就自动重启,如果发现挂死,就杀掉再自动重启。
    比如RemotelyAnywhere的两个服务:
    RemotelyAnywhere Maintenance Service
    RemotelyAnywhere
      

  2.   

    http://bbs.csdn.net/topics/390787357
      

  3.   

    这种只能通过watchdog的机制了,有一个守护进程,发现进程退出了,再次启动。同时不在加载有问题的dll
      

  4.   

    同意楼上几位的说法,这也是为什么很多Web浏览器都用上了多进程技术,一个选项卡一个进程,一旦其中一个页面卡死或崩溃,主进程就结束并重启它。
      

  5.   

    自己为自己顶下,求demo,求源代码
      

  6.   

    还有一种方法,弄个中间进程去调用DLL,你的服务器和中间进程通信。
      

  7.   

    用别人的东西,搞进自己的进程了,就难免不出问题,不可控。所以可以考虑对服务做监视,Windows服务的话,windows本身是提供服务的故障自动回复的,在服务配置里面有设置。比如退出后几秒自动启动之类的。
      

  8.   

    我建议接管异常处理,在出问题的时候自动恢复。可以参考下面的框架,具体的处理根据需要补充。
    http://www.cnblogs.com/wxxweb/archive/2011/10/09/2203488.html楼上提到的方法是无法应对这种问题的,因为崩溃时,程序进程是仍然存在的,仍然占用了一定的内存和线程数,判断程序是否仍然正常只能靠相互通讯,而这种处理又增加了不少工作量而且可靠性差。