【问题标题】:Starting a process in the current command window in .NET在 .NET 的当前命令窗口中启动进程
【发布时间】:2010-09-22 14:37:18
【问题描述】:

我在 VB.NET 控制台应用程序中有这个:

Dim p As ProcessStartInfo
p = New ProcessStartInfo(Environment.CurrentDirectory & "\bin\javac.exe",ClassName & ".java")
Dim ps As Process = Process.Start(p)

这会在文件上运行 java 编译器,但它会在新窗口中运行 。我希望 javac 的输出出现在运行我的应用程序的同一控制台中。 我怎样才能做到这一点?也许还有另一种在当前控制台中运行命令的方法?或者我可以禁止打开第二个控制台窗口并将其输出重定向到当前控制台?

【问题讨论】:

    标签: .net vb.net process console


    【解决方案1】:

    我认为你不能在同一个控制台中运行,但你可以通过重定向标准输出来获得输出:

    Dim si = New ProcessStartInfo(Environment.CurrentDirectory & "\bin\javac.exe",ClassName & ".java")
    
    si.RedirectStandardOutput = True
    si.UseShellExecute = False
    Dim proc = New Process() 
    proc.StartInfo = si
    proc.Start()
    proc.StandardOutput.ReadToEnd()
    proc.WaitForExit()
    

    【讨论】:

    • 试过了,它完全按照需要工作。暂时+1,稍后我可能会接受这个答案。 ;)
    【解决方案2】:

    我认为您不能在同一个控制台中运行,因为它已被您的应用程序占用。如果只是显示输出,您可以使用stream redirection。如果您执行javac [here go params] >out.txt 2>err.txt,您可以稍后在javac 完成时从它们加载输出。

    您甚至可以通过ProcessStartInfo.RedirectStandardOutputProcess.StandardOutput 将流重定向到您的应用程序

    【讨论】:

    • +1 用于文件的想法,但看起来不像 Process.StandardOutput 可用于设置不同的输出流;这是一个只读属性。
    • 哦,我明白你的意思了。我以为您是在说将 StandardOutput 设置为 Console.OpenStandardOutput 或类似的东西。 =P
    • @Exp HP 没有,但你可以使用ReadLine逐行读取,然后使用Console.WriteLine输出
    猜你喜欢
    • 2011-01-13
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多