Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何捕获应用程序崩溃/不正常退出?_Vb.net_Winforms_Error Handling_Crash - Fatal编程技术网

Vb.net 如何捕获应用程序崩溃/不正常退出?

Vb.net 如何捕获应用程序崩溃/不正常退出?,vb.net,winforms,error-handling,crash,Vb.net,Winforms,Error Handling,Crash,我有一个VB.NET WinForms应用程序,它从存储在网络共享上的可执行文件运行。在该应用程序中,我在ApplicationEvents中定义了UnhandledException处理程序(Private Sub-MyApplication\u UnhandledException(发送方作为对象,e作为unhandledexceptionventargs)处理我。UnhandledException)。在我的处理程序中,我有一个方法,在提示用户确认退出应用程序之前,将异常详细信息记录到文本

我有一个VB.NET WinForms应用程序,它从存储在网络共享上的可执行文件运行。在该应用程序中,我在
ApplicationEvents
中定义了
UnhandledException
处理程序(
Private Sub-MyApplication\u UnhandledException(发送方作为对象,e作为unhandledexceptionventargs)处理我。UnhandledException
)。在我的处理程序中,我有一个方法,在提示用户确认退出应用程序之前,将异常详细信息记录到文本文件中

但是,此应用程序“随机”崩溃并完全退出,没有创建任何日志或显示任何消息框。这种行为发生在应用程序中不同的可执行点上,我正在拼命寻找原因。我猜问题可能是由于网络连接暂时中断或与PostgreSQL数据库通信的其他问题造成的,但我无法确认来源,因为在应用程序从用户屏幕消失之前,没有提供堆栈跟踪或消息详细信息

这应该是“简单的”,但我已经尝试了一些事情,包括在
Try…Catch
块中包装大量代码块,以及向错误处理程序添加额外的日志记录功能,因此我感到不知所措。我已经尝试在我的
UnhandledException
处理程序中重新排列代码,以避免新对象实例化出现任何问题(对于我的
ErrorHandler
对象)。我在错误处理中添加了一个检查,用于在网络不可用时本地记录错误。我甚至在主窗体的
FormClosing
事件中添加了一个简单的消息框,如果关闭不是由用户直接发起的,那么至少在完全关闭之前让应用程序执行一些操作

无论到目前为止我尝试了什么,应用程序仍然会在看似随机的时间强制退出。用户将按下按钮来执行通常正常工作的许多方法中的任何一种。如果用户在被踢出后重新启动应用程序,并再次执行完全相同的操作,则它可以正常工作。我需要完成的是某种形式的“白痴证明”错误处理,以便捕获并记录导致应用程序退出的任何原因。我确信在这一点上我没有想到一些事情,所以如果需要进一步的澄清,请告诉我


代码 应用程序的
启动
事件处理程序:

Private Sub MyApplication\u启动(发送方作为对象,e作为StartupEventArgs)处理我。启动
尝试
Common.ApplicationStartup(ApplicationSettings.CurrentUser)
特例
Dim StartupException作为新的ErrorHandler(ex)
StartupException.LogException()
MessageBox.Show(“您没有访问此资源的权限。”&vbCrLf&vbCrLf&
“应用程序现在将退出。”)
系统.环境.退出(1)
结束尝试
' *********************************************************************
'**如果应用程序正在测试模式下运行,则通知用户**
' *********************************************************************
如果是ApplicationSettings.TestMode,则
Show(“此应用程序当前正在测试模式下运行,将使用”&
“数据和配置信息的本地路径。”&vbCrLf&vbCrLf&
“如果您试图使用此应用程序处理实时数据,请参阅”&
“此消息,请联系IT帮助台寻求帮助。”,“测试模式”,
MessageBoxButtons.OK,MessageBoxIcon.感叹号)
如果ApplicationSettings.CurrentUser.Department=Users.Employee.Department
如果MessageBox.Show(“是否要在测试模式下继续?”,“测试模式”,MessageBox Buttons.YesNo,
MessageBoxIcon.Question,MessageBoxDefaultButton.Button1)=对话框结果。然后为否
ApplicationSettings.TestMode=False
如果结束
如果结束
如果结束
' *********************************************************************
'**在此处初始化任何特定于应用程序的设置**
' *********************************************************************
尝试
'如果ApplicationSettings.TestMode和ApplicationSettings.CurrentUser.Department=Users.Employee.Department
'MessageBox.Show(“如果您有任何其他参数/设置要为此应用程序配置,”&
““请在评论此消息之前这样做。”,
““开发警告”,MessageBoxButtons.OK,MessageBoxIcon.感叹号)
"完"
特例
Dim呼气作为新的通用.ErrorHandler(ex)
expndling.LogException()
Show(“初始化应用程序的配置时出现问题。”&vbCrLf&vbCrLf&
“应用程序现在将退出。”)
系统.环境.退出(2)
结束尝试
端接头
应用程序启动
方法:

公共子应用程序启动(ByRef CurrentUser As Users.Employee)
' *********************************************************************
'**默认TestMode变量为False。如果检查**
“**应用程序是否从IDE运行失败**
“**应用程序应假定它正在运行**
' *********************************************************************
ApplicationSettings.TestMode=False
' *********************************************************************
“**检查应用程序是否正在运行**
'**来自IDE或调试文件夹**
' *************************************************************
    Try
    'Here your code is written for example dim a as integer=12
    Catch ex as exception
' Here stream writer takes your ex.Message & ex.Stack Trace  and adds it to the log file
'After that show message box saying
MessageBox.Show("Oops something crashed please try again ")
'That way you are handling both the user and developer
  End Try