Vb.net 进程未运行,由我的应用程序启动时控制台窗口为空
我创建了一个应用程序,其中在一个函数中使用Vb.net 进程未运行,由我的应用程序启动时控制台窗口为空,vb.net,visual-studio,winforms,console,Vb.net,Visual Studio,Winforms,Console,我创建了一个应用程序,其中在一个函数中使用Processs.start() 流被重定向到richtextbox,它打印控制台所做的一切,同时控制台窗口被隐藏。为了进行调试,控制台是可见的(并且是空白的) 下面是有问题的代码片段: Delegate Sub myappthing_boxDelg(myappthing_text As String) Public myappthing_delegate As myappthing_boxDelg = New myappthing_boxDelg(Ad
Processs.start()
流被重定向到richtextbox,它打印控制台所做的一切,同时控制台窗口被隐藏。为了进行调试,控制台是可见的(并且是空白的)
下面是有问题的代码片段:
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中打印任何内容,但是当使用批处理文件运行可执行文件时,所有内容都会在控制台窗口中完美打印。我不知如何是好
如果有任何帮助或正确的方向,我们将不胜感激。谢谢大家!
在我提供的代码中,可以找到可执行文件并在技术上运行(其进程可以在任务管理器中看到),但其控制台输出为空,实际上不执行任何操作。我的一个想法是,我试图运行的可执行文件本身可能会生成一个子进程/第二个控制台窗口,这是我试图从中获取输出的窗口,但我不知道如何从我自己还没有启动的进程重定向流 我认为您可能与工作目录和文件名有冲突。尝试从文件名中删除工作目录。@导致“系统找不到指定的文件”错误的操作。在我提供的代码中,可以找到可执行文件并在技术上运行(其进程可以在任务管理器中看到),但其控制台输出为空,实际上不执行任何操作。我的一个想法是,可能我试图运行的可执行文件本身正在生成一个子进程/第二个控制台窗口,这是我试图从中获取输出的窗口,但是我不知道如何重定向我自己还没有启动的进程中的流。您是否尝试过在没有任何输出重定向的情况下运行您的进程以查看此部分是否工作?我没有测试您的代码,但是在初始化进程时尝试新的进程,其ProcessStartInfo和指定同步对象也是如此(将其设置为RichTextBox所在的形式)。类似于
MyProcess=New Process(),带有{.StartInfo=MyStartInfo、.EnableRaisingEvents=True、.SynchronizingObject=Me}
。另外,您的myappthing\u proc.StartInfo.Arguments=(“args”)
应该是myappthing\u proc.StartInfo.Arguments=args
@Jimi感谢您的帮助,但是它仍然不起作用。我发现,当使用批处理文件运行应用程序时,存在三个子应用程序:windows命令处理器、nameofexeimtryingtorun.exe和console窗口主机。然而,当running使用我的应用程序时,windows命令处理器不存在,并且只存在exeimtryngtorun.exe和控制台窗口主机的名称。您认为这可能与此问题有关吗?