C# 从其他控制台应用程序运行控制台应用程序

C# 从其他控制台应用程序运行控制台应用程序,c#,console-application,C#,Console Application,我有一个C#控制台应用程序(a)。我想从应用程序A中(以同步方式)执行其他控制台应用程序(B),以便B使用相同的命令窗口。当B存在时,A应该能够读取B的退出代码 怎么做?我只需要这一点提示,就如何在同一个cmd窗口中运行这个其他应用程序 您可以使用process.start()调用启动另一个进程。演示如何从其他进程读取输出并等待其完成 您可以使用process.start启动另一个进程—不管它是否是控制台应用程序。如果您的应用程序已经在控制台窗口中运行,则新生成的应用程序也将使用该控制台窗口 v

我有一个C#控制台应用程序(a)。我想从应用程序A中(以同步方式)执行其他控制台应用程序(B),以便B使用相同的命令窗口。当B存在时,A应该能够读取B的退出代码


怎么做?我只需要这一点提示,就如何在同一个cmd窗口中运行这个其他应用程序

您可以使用
process.start()调用启动另一个进程。演示如何从其他进程读取输出并等待其完成

您可以使用process.start启动另一个进程—不管它是否是控制台应用程序。如果您的应用程序已经在控制台窗口中运行,则新生成的应用程序也将使用该控制台窗口

var proc = Process.Start( "...path to second app" );
proc.WaitForExit();
var exitCode = proc.ExitCode;
确保准备好Process类上的文档,因为有各种细微差别可能会影响辅助应用程序的启动方式。

您可以使用启动其他控制台应用程序

您需要将流程设置为
true
并设置为
false
,以便自己能够利用输出

然后,您可以在流程上使用读取输出。

填写 并将其传递给


您可以对结果流程执行WaitForExit
,然后使用流程的
ExitCode
属性查看返回值。

您可以“包装”通过将旧控制台应用程序与新控制台应用程序一起包含在引用中,并通过调用程序类的run方法中调用的任何方法来启动它,我可以通过调用以下配置将程序“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”的名称。希望这能有所帮助。

在Windows 10上,cmd是Windows Server 2008构建环境,它不再工作,新应用程序会立即打开一个新窗口。您好,Paul。虽然这个答案已经过去了10年,但我现在检查了它,并且
Process.Start(“其他控制台程序”)
创建了一个新的(第二个)控制台窗口。使其不创建第二个对象的唯一方法是将create a ProcessStartInfo对象设置为,然后将其.UseShellExecute属性设置为false。就像Chesare的回答一样。非常感谢Chesare,它的效果非常好。顺便说一句,我们似乎不需要将
.CreateNoWindow
设置为false,因为默认情况下它已经是false了。此处要设置的关键属性是
.UseShellExecute
,因为它的默认值为true,第二个程序必须为false才能在现有窗口而不是新窗口中运行。