[紧急求助]求Windows程序崩溃后自动重启的解决方法

三五月儿 2015-10-12 08:27:19
我们的系统是使用WPF开发的Windows应用程序,在客户环境中,会每隔一段时间崩溃掉,就是出现一个系统错误提示框(什么“要不要向微软发送错误报告"的这个东东),现在怀疑是使用第三方dll导致的,一时半会找不到根本原因,现在就想折中处理一下,一旦崩溃,程序就自动重启,有没有哪位高人做过,有没有什么好建议。另外,自动重启程序时,那个系统错误提示框该怎么处理?
...全文
1783 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
漠落雨 2015-10-17
  • 打赏
  • 举报
回复
可以写一个看门狗程序 每隔一个时间间隔和主程序进行通讯确认 监视主程序 如果主程序没有回应 就对程序进行重新启动 或者 在客户电脑设置一个任务计划 每隔多久进行一次电脑重启 把你的程序添加到任务计划中就可以了 其实做好的解决办法还是解决一下程序的异常并加上看门狗程序比较好
xian_wwq 2015-10-13
  • 打赏
  • 举报
回复
引用 5 楼 tiana0 的回复:
我怀疑代码出现问题出现在第三方使用C++开发的一个dll中,我在调用它们方法的地方加异常处理应该没有用吧?

的确没有用
重启是下下策,除非c ++ dll 开发者不提供技术支持
正确的方法是重现错误,找到bug解决问题
具体什么错误代码呢?
ajianchina 2015-10-12
  • 打赏
  • 举报
回复
已经将解决方案发到你另一个帖子中了,你可以试一下,我通过调用非托管dll程序的测试效果不错。
ajianchina 2015-10-12
  • 打赏
  • 举报
回复
你倒是该研究一下你是如何调用非托管组件的,资源是如何释放的,你的情况可能不是说在客户的电脑上才这样,只是你还没有认真测试,没有经过一个像样的测试用例来测试。
gis_99 2015-10-12
  • 打赏
  • 举报
回复
你可以加个全局异常处理并记录异常。
再者,你可以把你怀疑的第三方控件,去掉,测试下。
三五月儿 2015-10-12
  • 打赏
  • 举报
回复
我怀疑代码出现问题出现在第三方使用C++开发的一个dll中,我在调用它们方法的地方加异常处理应该没有用吧?
ajianchina 2015-10-12
  • 打赏
  • 举报
回复
你做一个保姆程序,主程序启动时通过ServiceController启动你的服务,窗体退出前停止你的服务。 服务的代码大致如下:

System.Timers.Timer timer = new System.Timers.Timer(500);
timer.Elapsed += Nurse;
timer.AutoReset = true;
timer.Start();
private void Nurse(object sender, System.Timers.ElapsedEventArgs e)
{
	if (Process.GetProcessesByName("报错窗体进程名称").Where(s => s.MainWindowHandle != IntPtr.Zero).Count() > 0)
	{
		//杀死该进程
	}
	if (Process.GetProcessesByName("你的应用进程名称").Where(s => s.MainWindowHandle != IntPtr.Zero).Count() == 0)
	{
		//重启你的程序
	}

}
  • 打赏
  • 举报
回复
winform可以有两个事件来捕获主线程异常和线程异常,Application.ThreadException和Application.SetUnhandledExceptionMode,wpf应该也可以吧
忘丿殇 2015-10-12
  • 打赏
  • 举报
回复
程序奔溃的话,都会在入口函数出现异常~处理一下应该就可以了~~~
BitCoffee 2015-10-12
  • 打赏
  • 举报
回复
另外做一个服务或者程序定时监控系统进程。
ajianchina 2015-10-12
  • 打赏
  • 举报
回复
你要先想办法在本地制造出异常出来
ajianchina 2015-10-12
  • 打赏
  • 举报
回复
动态加载只是变个方式从文件流加载而已,最终调用方法还是非托管的。 [DllImport("xxx.dll", CallingConvention = CallingConvention.Cdecl)] CallingConvention.Cdecl加了吗?
三五月儿 2015-10-12
  • 打赏
  • 举报
回复
还有,调用这种第三方dll中的方法,这种第三方的dll占用的资源该怎样释放
三五月儿 2015-10-12
  • 打赏
  • 举报
回复
我也有捕获全局异常的代码,但是压根就没有捕获到任何异常,我怀疑,c++dll中出现的异常是不是捕获不了啊
三五月儿 2015-10-12
  • 打赏
  • 举报
回复
回复是“引用”按钮不起效果啊?
我这个问题会不会是c#调用C++的dll时,加载dll的方式导致的?
我使用的是静态加载的方式,要是改为动态加载呢?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧