Используя vb.net, используйте try catch при запуске «command.ExecuteNonQuery ()» и сохраните ошибку в txt. Есть ли веская причина для использования cmd?
Вот так ..
Try
command.ExecuteNonQuery()
Catch (Ex As Exception)
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter("c:\test.txt", True)
file.WriteLine(ex.message)
file.Close()
End try
Посмотрите на это, также найденное в ветке, если вы все еще хотите использовать RedirectStandardOutput:
Imports System.Diagnostics
Imports System.IO
Private CurrentProcessID As Integer = -1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
StartProcess("C:\Windows\System32\tracert.exe", "stackoverflow.com")
End Sub
Private Sub StartProcess(FileName As String, Arguments As String)
Dim MyStartInfo As New ProcessStartInfo() With {
.FileName = FileName,
.Arguments = Arguments,
.WorkingDirectory = Path.GetDirectoryName(FileName),
.RedirectStandardError = True,
.RedirectStandardOutput = True,
.UseShellExecute = False,
.CreateNoWindow = True
}
Dim MyProcess As Process = New Process() With {
.StartInfo = MyStartInfo,
.EnableRaisingEvents = True,
.SynchronizingObject = Me
}
MyProcess.Start()
MyProcess.BeginErrorReadLine()
MyProcess.BeginOutputReadLine()
CurrentProcessID = MyProcess.Id
AddHandler MyProcess.OutputDataReceived,
Sub(sender As Object, e As DataReceivedEventArgs)
If e.Data IsNot Nothing Then
BeginInvoke(New MethodInvoker(
Sub()
RichTextBox1.AppendText(e.Data + Environment.NewLine)
RichTextBox1.ScrollToCaret()
End Sub))
End If
End Sub
AddHandler MyProcess.ErrorDataReceived,
Sub(sender As Object, e As DataReceivedEventArgs)
If e.Data IsNot Nothing Then
BeginInvoke(New MethodInvoker(
Sub()
RichTextBox1.AppendText(e.Data + Environment.NewLine)
RichTextBox1.ScrollToCaret()
End Sub))
End If
End Sub
AddHandler MyProcess.Exited,
Sub(source As Object, ev As EventArgs)
MyProcess.Close()
If MyProcess IsNot Nothing Then
MyProcess.Dispose()
End If
End Sub
End Sub