我自己创建了一个服务程序,启动方式也是设置的“自动”,如果是手工的方式在服务列表中启动或停止服务,我都记录在一个日志文件(文本文件)中,但是我遇到了好几次,服务被莫明其妙的停止了,在我的日志文件中没有记录,在系统的“事件查看器”中也找不到任何记录,请问各位,这个是什么原因?

解决方案 »

  1.   

    我遇到的可能性最大的情况是:.net创建的服务,必须有一个主线程处于运行状态,如果你写的服务里面,处理完所有的事情以后,所有的线程都会退出,那么,你启动服务后不久,服务就会自行终止。尽量保证有一个线程处于运行状态,比如写个空循环,里面定时睡眠一下就好了。如果已经有线程会不停运行,那么就是这个线程会非法退出了。
      

  2.   

    我那服务所做的是通过发送UDP命令来采集数据,它是每隔20秒就会循环执行的。
      

  3.   

    另外,楼主,如果你是用.net1.1版本的timer的话,在计时不需要太精确的前提下,改成Thread的Sleep来替换吧。我遇上过多次timer莫名其妙退出的情况,也是毫无征兆的情况,eventlog也不会记录下来。不光是我自己开发的程序有这个定时器自动退出的情况,即使我用微软官方合作伙伴开发enterprise library里面的cache的时候,定时器也会发生退出的情况。不得以只好修改成sleep,就不再出现问题了。我不知道这和我的操作系统环境有无关系,我在其他机器上也碰到过这个问题。
      

  4.   

    我遇到的可能性最大的情况是:.net创建的服务,必须有一个主线程处于运行状态,如果你写的服务里面,处理完所有的事情以后,所有的线程都会退出,那么,你启动服务后不久,服务就会自行终止。尽量保证有一个线程处于运行状态,比如写个空循环,里面定时睡眠一下就好了。如果已经有线程会不停运行,那么就是这个线程会非法退出了。另外长时间运行的话,尽量用Thread而不要用Timer。