我制作了一个应用程序,其中某个功能在另一个应用程序中使用Processs.start()
启动参数
将流重定向到一个富文本框,该文本框将打印控制台执行的所有操作,同时隐藏控制台窗口。出于调试目的,控制台是可见的(空白)。
以下是有问题的代码段:
Delegate Sub myappthing_boxDelg(myappthing_text As String)
Public myappthing_delegate As myappthing_boxDelg = New myappthing_boxDelg(AddressOf myappthing)
Public Sub myappthing(myappthing_text As String)
richtextbox.Text += myappthing_text & Environment.NewLine
richtextbox.SelectionStart = richtextbox.Text.Length
richtextbox.ScrollToCaret()
richtextbox.Text = richtextbox.Text.Replace("[0m", "")
End Sub
以上是用来显示控制台在richtextbox中所说的内容,以及删除最后一行中的所有格式错误的方法。
Public Sub myappthing_procDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
If Me.InvokeRequired = True Then
Me.Invoke(myappthing_delegate, e.Data)
Else
myappthing(e.Data)
End If
End Sub
下面是我用来结束该过程的内容,它不必是一个干净的结尾,因此该过程只是被终止,并且删除了处理程序,因此可以在我的应用程序的同一实例中重新启动它。
Public Sub kill_myappthing()
If myappthing_proc_state = True Then
myappthing_proc.Kill()
RemoveHandler myappthing_proc.ErrorDataReceived, AddressOf myappthing_procDataReceived
RemoveHandler myappthing_proc.OutputDataReceived, AddressOf myappthing_procDataReceived
myappthing_proc.CancelErrorRead()
myappthing_proc.CancelOutputRead()
myappthing_proc_state = False
lbl_status.Text = "Status: Stopped"
End If
End Sub
下面是我认为问题所在的地方。
Private Sub myappthing()
myappthing_proc.StartInfo.FileName = ".\backend\myappthingexecutable"
Dim args As String = "-argument"
myappthing_proc.StartInfo.Arguments = ("args")
myappthing_proc.StartInfo.WorkingDirectory = ".\backend\"
myappthing_proc.StartInfo.RedirectStandardError = True
myappthing_proc.StartInfo.RedirectStandardOutput = True
myappthing_proc.EnableRaisingEvents = True
myappthing_proc.StartInfo.UseShellExecute = False
myappthing_proc.StartInfo.CreateNoWindow = False
Application.DoEvents()
AddHandler myappthing_proc.ErrorDataReceived, AddressOf myappthing_procDataReceived
AddHandler myappthing_proc.OutputDataReceived, AddressOf myappthing_procDataReceived
myappthing_proc.Start()
myappthing_proc.BeginErrorReadLine()
myappthing_proc.BeginOutputReadLine()
myappthing_proc_state = True
End Sub
当我运行应用程序并让这些功能运行可执行文件时,它不会在弹出的控制台窗口或RichTextBox中打印任何内容,但是当使用批处理文件运行可执行文件时,所有内容都能在控制台窗口中完美打印。我不知所措。
任何帮助或正确方向的指导将不胜感激。谢谢!
在我提供的代码中,找到了可执行文件并从技术上运行了该可执行文件(可以在任务管理器中看到其过程),但是其控制台输出为空白,并且实际上不执行任何操作。我的一个想法是,也许我尝试运行的可执行文件本身会生成一个子进程/第二个控制台窗口,这是我试图从中获取输出的窗口,但我不知道如何重定向源于我本人尚未启动的过程。