首页 新闻 赞助 找找看

什么情况下程序会悄无声息地结束?

0
悬赏园豆:50 [已解决问题] 解决于 2017-10-26 15:11

写了个服务安装在客户机器上定时执行一些任务,有少数机器上程序会莫名结束,所有代码都用try catch包住也捕获不到异常, Windows 日志中也看不到异常日志,甚至又写了一个监控服务,两个服务互相监控,发现服务不在运行状态就启动,居然两个都不运行了。求各位支招,非常感谢!

Season2009的主页 Season2009 | 初学一级 | 园豆:152
提问于:2017-10-25 22:52
< >
分享
最佳答案
0

看下系统日志吧,那里面会记录服务相关信息的。短期内的解决方案是直接改windows对应服务的配置,让其关闭后的三次及后续策略都为重新启动。

收获园豆:30
Daniel Cai | 专家六级 |园豆:10424 | 2017-10-26 10:31

谢谢 Daniel, 查看过系统日志,没有异常信息。有设置对应的策略都为重新启动。

Season2009 | 园豆:152 (初学一级) | 2017-10-26 10:37

@Season2009: 是windows服务么?windows服务不管是如何开启退出都会在系统日志中记录一把的,你看下是不是你找的姿势不对。

Daniel Cai | 园豆:10424 (专家六级) | 2017-10-26 10:43

@Daniel Cai: 不是,正常的启动和结束服务能看到日志。只是莫名结束如果是由异常引起的,操作系统应该有日志。

Season2009 | 园豆:152 (初学一级) | 2017-10-26 10:57

@Season2009: 是有日志啊,我随便kill掉一个进程就可以看到日志了

Daniel Cai | 园豆:10424 (专家六级) | 2017-10-26 11:08

@Daniel Cai: 查到一条这样记录:

Season2009 | 园豆:152 (初学一级) | 2017-10-26 12:42

@Season2009: 这种就很简单了,启动的时候就跪那就看你代码启动的时候干了什么咯。

Daniel Cai | 园豆:10424 (专家六级) | 2017-10-26 13:38

@Daniel Cai: 应该是被360拦截了,查到360的拦截记录了。

Season2009 | 园豆:152 (初学一级) | 2017-10-26 15:08
其他回答(2)
0

检查下是否是因为多线程异常,以及全局异常处理

收获园豆:10
hahanonym | 园豆:1460 (小虾三级) | 2017-10-26 09:14
0
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事件的用处就出来了,不过绑定这个时间并不能让程序不崩溃,只能让你把导致程序崩溃的异常记录下来。

还有一点,主线程是无法捕获到子线程的异常的,所以用如果用了多线程的话,需要注意一下

收获园豆:10
海之殇 | 园豆:500 (菜鸟二级) | 2017-10-26 09:27

谢谢回复!主线程是无法捕获到子线程的异常,这个有注意到,在各自线程中有处理异常。全局异常捕获我也加上它试下。之前没加是因为要担心客户端升级exe文件会被360拦截。

支持(0) 反对(0) Season2009 | 园豆:152 (初学一级) | 2017-10-26 09:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册