【发布时间】:2011-01-22 21:31:05
【问题描述】:
我有一个 C# 控制台应用程序 (A)。我想以 B 使用相同命令窗口的方式从应用程序 A 中(以同步方式)执行其他控制台应用程序(B)。当 B 存在时,A 应该能够读取 B 的退出代码。
如何做到这一点?我只需要这个关于如何在同一个 cmd 窗口中运行这个其他应用程序的小提示。
【问题讨论】:
我有一个 C# 控制台应用程序 (A)。我想以 B 使用相同命令窗口的方式从应用程序 A 中(以同步方式)执行其他控制台应用程序(B)。当 B 存在时,A 应该能够读取 B 的退出代码。
如何做到这一点?我只需要这个关于如何在同一个 cmd 窗口中运行这个其他应用程序的小提示。
【问题讨论】:
通过调用以下配置,我能够将程序“B”作为同一命令窗口的一部分运行:
ConsoleColor color = Console.ForegroundColor;
ProcessStartInfo startinfo = new ProcessStartInfo(nameProgramB);
startinfo.CreateNoWindow = false;
startinfo.UseShellExecute = false;
Process p = Process.Start(startinfo);
p.WaitForExit();
Console.ForegroundColor = color;
这样,两个程序就像一个程序一样无缝运行。 “nameProgramB”是程序“B”的名称。希望这会有所帮助。
【讨论】:
.CreateNoWindow 设置为 false,因为默认情况下它已经为 false。这里要设置的关键属性是.UseShellExecute,因为它的默认值为true,第二个程序必须为false才能在现有窗口而不是新窗口中运行。
您可以通过将旧控制台应用程序包含在您的引用中并通过调用程序类的 run 方法中调用的任何方法来启动它来将旧控制台应用程序与新控制台应用程序“包装”
【讨论】:
填写System.Diagnostics.ProcessStartInfo 并将其传递给Process.Start
你可以WaitForExit对产生的进程,然后使用进程的ExitCode属性来查看返回值。
【讨论】:
您可以使用Process.Start 启动其他控制台应用程序。
您需要将ProcessStartInfo.RedirectOutput 设置为true 并将UseShellExecute 设置为false 来构建流程,以便能够自己使用输出。
然后您可以在进程中使用StandardOutput.ReadToEnd 读取输出。
【讨论】:
您可以使用 Process.Start 启动另一个进程 - 它是否是控制台应用程序并不重要。如果您的应用已经在控制台窗口中运行,那么新生成的应用也将使用该控制台窗口。
var proc = Process.Start( "...path to second app" );
proc.WaitForExit();
var exitCode = proc.ExitCode;
请务必准备好有关 Process 类的文档,因为有许多细微差别可能会影响您的辅助应用程序的启动方式。
【讨论】:
Process.Start("other_console_program") 创建了一个新的(第二个)控制台窗口。使它不创建第二个的唯一方法是设置创建一个 ProcessStartInfo 对象,然后将其 .UseShellExecute 属性设置为 false。就像切萨雷的回答一样。
您可以使用Process.Start() 调用启动另一个进程。 examples here 展示了如何从其他进程读取输出并等待它完成。
【讨论】: