【问题标题】:Run interactive process inside already-running console application without opening new window在已经运行的控制台应用程序中运行交互式进程而不打开新窗口
【发布时间】:2017-12-12 21:33:21
【问题描述】:

我意识到这看起来像很多其他问题,但我看了好几个小时都没有找到我需要的真正答案,所以请听我说:

这适用于 .NET C# 控制台应用程序。在其中,我想使用Process.Start 调用Windows 可执行文件,但在运行时不会打开新的控制台窗口。我还希望可执行文件能够输出到控制台并正常响应用户输入。

你是怎么做到的?设置ProcessStartInfo.CreateNoWindow,还是ProcessStartInfo.WindowStyle?尝试让输入/输出重定向连续工作几个小时?


编辑:smh...这与外面的“可能重复”不同,因为:

  • 这适用于希望在自身内部无缝运行 Windows 命令的控制台应用程序,就好像该命令是控制台应用程序本身的一部分一样。例如:创建一个新的 C# 控制台应用程序并使其运行 Windows copy 命令。
  • 此外,我需要用户能够交互正在运行的命令(例如,如果copy 询问是否覆盖我希望用户回答),所以隐藏窗口,如thisthis 可能的答案是否定的。
  • 我想强调 single UseShellExecute 属性如何解决问题,而不会在 thisthis 等答案中出现误导性的绒毛(例如,关于 I/O 重定向),这又让我浪费了很多时间。

【问题讨论】:

  • 很好...没有评论或考虑如何防止某人浪费时间... smh :-|
  • 我没有投反对票,但我有点困惑这与this 有何不同。你是说你正在运行控制台应用程序 A 并且你想开始执行控制台应用程序 B 而不是“无缝”(即让它看起来像应用程序 B 只是“在 A 停止的地方继续”)?
  • @EJoshuaS:感谢您的关心评论,是的,无缝和互动是关键词!我编辑了问题和标题,希望能阐明这有何不同。
  • 这是有道理的,那么 - 我撤回了我的欺骗票并赞成 b/c 这似乎是一件有用的事情。

标签: c# .net console-application io-redirection processstartinfo


【解决方案1】:

简单:ProcessStartInfo.UseShellExecute=false。而已! (我知道,我自己都不敢相信)。

经过数小时尝试各种事情,这对我有用 - 甚至没有设置 CreateNoWindow=true!此外,最后,我确实找到了this MSDN post,这证实了我的发现。算了!

【讨论】:

    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多