完成后,保持新进程的控制台窗口打开

时间:2014-05-28 20:08:15

标签: c#

我目前有一部分代码可以创建一个新进程并从shell执行它。

Process p = new Process();
...
p.Start();
p.WaitForExit();

这会在进程运行时保持窗口打开,这很棒。但是,我还想在完成之后保持窗口打开以查看潜在的消息。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:34)

capture the outputStandardOutput中的StandardError更容易,将每个输出存储在StringBuilder中,并在流程结束时使用该结果。

var sb = new StringBuilder();

Process p = new Process();

// redirect the output
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;

// hookup the eventhandlers to capture the data that is received
p.OutputDataReceived += (sender, args) => sb.AppendLine(args.Data);
p.ErrorDataReceived += (sender, args) => sb.AppendLine(args.Data);

// direct start
p.StartInfo.UseShellExecute=false;

p.Start();
// start our event pumps
p.BeginOutputReadLine();
p.BeginErrorReadLine();

// until we are done
p.WaitForExit();

// do whatever you need with the content of sb.ToString();

您可以在sb.AppendLine语句中添加额外的格式,以区分标准输出和错误输出,如下所示:sb.AppendLine("ERR: {0}", args.Data);

答案 1 :(得分:25)

这将打开shell,启动可执行文件并在进程结束时保持shell窗口打开

Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "CMD.EXE";
psi.Arguments = "/K yourmainprocess.exe";
p.StartInfo = psi;
p.Start();
p.WaitForExit();

或只是

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "CMD.EXE";
psi.Arguments = "/K yourmainprocess.exe";
Process p = Process.Start(psi);
if(p != null && !p.HasExited)
    p.WaitForExit();

答案 2 :(得分:1)

关于:“无法使用实例引用访问成员Process.Start(ProcessStartInfo);而应使用类型名称来限定它”

这为我解决了问题。...

this.login().then(
  user => console.log(user);
)

答案 3 :(得分:0)

请特别注意开关/ k,因为在许多示例中,通常都使用/ c。

  

CMD / K运行命令,然后返回到CMD提示符。

     

CMD / C运行命令,然后终止

var p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/k yourmainprocess.exe";
p.Start();
p.WaitForExit();