我在退出应用程序之前使用此代码保存应用程序数据库的备份(我也在主窗体的已关闭事件上手动调用此函数):
Private Sub Exit_Application() Handles btnExitApplication.Click, tsmiMainExit.Click
Me.dump.Export(options.auto_backup_path + "\ON_EXIT " + Date.Now.ToString("yyyy-MM-dd HH-mm.bak"))
Application.Exit()
End Sub
这是我的转储类中定义的Export()
函数:
Public Class MysqlDump
Public mysql_path As String
Public db_name As String
Private proc As New Process
Sub New(ByVal mysql_dir As String, ByVal dbname As String)
Me.mysql_path = mysql_dir
proc.StartInfo.FileName = Environment.SystemDirectory + "\cmd.exe"
proc.StartInfo.WorkingDirectory = Me.mysql_path + "\bin"
proc.StartInfo.UseShellExecute = False
proc.StartInfo.RedirectStandardError = True
proc.StartInfo.CreateNoWindow = True
Me.db_name = dbname
End Sub
Public Function Export(ByVal file_name As String) As Boolean
proc.StartInfo.Arguments = String.Format("/c mysqldump {0} | gzip > ""{1}""", db_name, file_name)
proc.Start()
Dim sdd As String = proc.StandardError.ReadToEnd()
proc.WaitForExit()
If proc.ExitCode <> 0 Then
Throw New Exception("Failed status:" + proc.ExitCode.ToString() + vbNewLine + "Error Info:" + sdd)
Return False
End If
Return True
End Function
End Class
当从visual studio运行/调试项目时(使用debug / x86 configs),上面的所有代码都正常运行但是当我尝试从它自己的目录运行已编译的应用程序可执行文件时,每次关闭应用程序时都会抛出此异常,在退出之前无法保存我的数据库备份:
System.Exception:失败状态:255
错误信息:在重定向句柄1期间无法打开句柄。
如果我设置proc.StartInfo.RedirectStandardError = FALSE
并注释= proc.StandardError.ReadToEnd()
,则错误消失,但我希望能够重定向命令行错误并在我的应用程序中将其显示为异常消息。
答案 0 :(得分:0)
在网上搜索了一些标准错误重定向的好例子后,我找到了一个工作示例,并将其与我的代码进行了比较,因此我发现我不应该只设置proc.StartInfo.RedirectStandardError = True
选项而是我应该设置proc.StartInfo.RedirectStandardOutput = True
以及,在添加此行代码之后,我就能够将错误重定向到我的应用程序并将其显示为新的异常。
但是我不知道为什么我应该这样做?!