写了个服务安装在客户机器上定时执行一些任务,有少数机器上程序会莫名结束,所有代码都用try catch包住也捕获不到异常, Windows 日志中也看不到异常日志,甚至又写了一个监控服务,两个服务互相监控,发现服务不在运行状态就启动,居然两个都不运行了。求各位支招,非常感谢!
看下系统日志吧,那里面会记录服务相关信息的。短期内的解决方案是直接改windows对应服务的配置,让其关闭后的三次及后续策略都为重新启动。
谢谢 Daniel, 查看过系统日志,没有异常信息。有设置对应的策略都为重新启动。
@Season2009: 是windows服务么?windows服务不管是如何开启退出都会在系统日志中记录一把的,你看下是不是你找的姿势不对。
@Daniel Cai: 不是,正常的启动和结束服务能看到日志。只是莫名结束如果是由异常引起的,操作系统应该有日志。
@Season2009: 是有日志啊,我随便kill掉一个进程就可以看到日志了
@Daniel Cai: 查到一条这样记录:
@Season2009: 这种就很简单了,启动的时候就跪那就看你代码启动的时候干了什么咯。
@Daniel Cai: 应该是被360拦截了,查到360的拦截记录了。
检查下是否是因为多线程异常,以及全局异常处理
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Exception error = e.ExceptionObject as Exception; //记录日志 }
在Main函数中绑定应用程序域的UnhandledException事件,如果有未处理的异常,会触发该事件,你就可以写日志记录这些异常
正所谓百密必有一疏,你以为你所有代码都用try{}catch{}覆盖了,但总会有遗漏的地方,这时候,UnhandledException事件的用处就出来了,不过绑定这个时间并不能让程序不崩溃,只能让你把导致程序崩溃的异常记录下来。
还有一点,主线程是无法捕获到子线程的异常的,所以用如果用了多线程的话,需要注意一下
谢谢回复!主线程是无法捕获到子线程的异常,这个有注意到,在各自线程中有处理异常。全局异常捕获我也加上它试下。之前没加是因为要担心客户端升级exe文件会被360拦截。