进程未运行,由我的应用程序启动时控制台窗口空白

时间:2018-07-09 13:43:38

标签: vb.net visual-studio winforms console

我制作了一个应用程序,其中某个功能在另一个应用程序中使用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中打印任何内容,但是当使用批处理文件运行可执行文件时,所有内容都能在控制台窗口中完美打印。我不知所措。

任何帮助或正确方向的指导将不胜感激。谢谢!

在我提供的代码中,找到了可执行文件并从技术上运行了该可执行文件(可以在任务管理器中看到其过程),但是其控制台输出为空白,并且实际上不执行任何操作。我的一个想法是,也许我尝试运行的可执行文件本身会生成一个子进程/第二个控制台窗口,这是我试图从中获取输出的窗口,但我不知道如何重定向源于我本人尚未启动的过程。

0 个答案:

没有答案