【问题标题】:Avoiding "Press any key to continue" when running console application from Visual Studio从 Visual Studio 运行控制台应用程序时避免“按任意键继续”
【发布时间】:2013-07-27 16:34:21
【问题描述】:

在 Visual Studio 中通过“不调试启动”(Ctrl+F5) 运行控制台应用程序时,控制台在运行结束时保持打开状态,询问

按任意键继续。 . .

因此需要激活窗口并按下一个键。有时这是不合适的。

为什么这很重要: 在我写 json 序列化代码的那一刻,我的工作流程是这样的:

  • 适配c#代码
  • 运行一个控制台应用程序来写入文件 out.json
  • 使用 json 查看器在浏览器中查看 out.json

如此反复,无需调试任何东西,只需修剪序列化并检查输出即可。

在这样的工作流程中,“按任意...”行为会阻碍它,因为它需要步骤

  • 激活控制台窗口
  • 按键 .

没有答案:

  • 在单独的控制台中在 VS 之外启动应用程序不是解决办法。
  • 说,你不需要这个。

【问题讨论】:

  • 首先必须启动像 VS 这样的大型程序,而只是启动控制台应用程序并没有太大的好处。您可以通过在桌面上创建程序的快捷方式来避免该消息。
  • 每次构建后自动运行应用程序是否可以接受? IE。将"$(TargetPath)$" 设置为构建后命令行。
  • thx reima, "$(TargetPath)" 实际上是一个很酷的主意 ;-)
  • 我已经有一段时间没有编写控制台应用程序了,但是将其更改为发布模式有什么影响吗?
  • @brad: 不变

标签: visual-studio console-application


【解决方案1】:

我很确定你不能影响或改变这种行为。

正如您所提到的,它与您的应用程序本身无关,因为当您双击 EXE 时它不会这样做。只有在没有附加调试器的情况下从 Visual Studio 中运行应用程序时才会看到这种效果。

据推测,当您调用 Ctrl+F5 时,Visual Studio 会以特定方式运行您的应用程序,从而导致控制台窗口保持打开状态。我可以想到两种可能的方式:

%COMSPEC% /k "C:\Path\To\YourApplication.exe"

%COMSPEC% /c ""C:\Path\To\YourApplication.exe" & pause"

使用其中任何一种,您看到的暂停行为都会直接融入用于启动您的应用的命令中,因此在您的应用之外。因此,除非您有权访问 Visual Studio 源代码,否则您不会更改它。从您的应用调用 exit 函数不会产生任何影响,因为在该消息出现时您的应用已经退出。

当然,除了好奇之外,我看不出它为什么真的很重要。当您启动带有调试器的应用程序时不会发生这种情况,这是您从 IDE 启动应用程序时 99% 的时间所做的事情。而且由于您没有随应用一起发布 Visual Studio,因此您的用户将在 VS 之外启动该应用。


针对您的问题所做的更新,最好的解决方案是更改您的应用程序,使其不是控制台应用程序。此行为不会影响标准 Windows 应用程序;当它们关闭时,它们会永久关闭。

如果您不需要控制台窗口上的任何输出,那么这很简单:只需change the "Application type" in your project's properties。 Windows 窗体应用程序可以正常工作。如果您不显示窗口(也称为表单),则将不会自动创建一个窗口。这是常规 Windows 应用程序和控制台应用程序之间的区别,后者总是创建一个控制台窗口,无论您是否需要。

如果您确实需要在控制台窗口上显示输出,您有两种选择:

  1. 创建并使用带有 ListBox 或 ListView 控件的简单表单。通常输出到控制台的每一行,都作为新项目添加到列表控件中。如果您不使用控制台的任何“高级”功能,这将非常有效。
  2. P/Invoke 并调用AllocConsole 函数来创建您的Windows 应用程序可以使用的控制台。您不需要为此填写表格。

【讨论】:

  • 将输出类型更改为“Windows 应用程序”会导致我正在寻找的行为,很酷,谢谢。
  • @CodyGray "我不明白为什么它真的很重要" 因为有时你想要一个快速的编译/执行周期而不附加调试器(这会减慢应用程序的启动速度)。例如,我正在测试一个输出文档文件的应用程序。文档内容实时反映在外部应用程序中。我正在通过代码进行视觉调整,我真的只想调整,调整,运行,调整,运行。我不想启动调试器,也不想每次都关闭控制台窗口。
  • 当我将调试模式设置为释放并按 F5 时,没有暂停中断。
  • 一个有趣的事情是 VS 2015 甚至对 DLL 也这样做。 IE。我有一个带有 /SUBSYSTEM:CONSOLE(此处为 C++)的 DLL,并且调试器设置为运行母应用程序(不是控制台),但 VS 仍然显示按键提示。我将其称为错误(VS 开发人员的快捷方式)。通过在 DLL 中设置 /SUBSYSTEM:WINDOWS 修复。
【解决方案2】:

如果您使用 python,我找到了一个可行的解决方案(我无法测试其他任何东西)。 你需要去

工具 -> 选项 -> Python 工具 -> 调试

取消选中Wait for input when process exits normally

我希望您能以某种方式将其应用于您的问题。

【讨论】:

    【解决方案3】:

    2020 年更新:微软已经倾听了。

    它还会在“不调试启动”模式下关闭控制台;)

    设置有点隐蔽,但可以:

    【讨论】:

    • 正如我所说,有趣的是,当您启动 没有 调试时它也可以工作,所以我觉得它仍然适用于您的问题,7 年后..
    • 我试过了,对于一个基本的 c# 控制台项目,它没有任何效果。至少我检查过它,谁知道它有什么用;)
    • 我真的是最近才看到这个,你有最新的VS版本吗?
    【解决方案4】:

    好吧,至少在 Visual Studio 2010 中,输入

     Console.ReadKey(true);
    

    删除“按任意键继续.....”

    【讨论】:

    • 是的,我意识到了这个魔力。对于我的情况,这没有帮助,因为它添加了手动编码的按键。
    【解决方案5】:

    根据 VS2019 文档:

    调试停止时自动关闭控制台:告诉 Visual Studio 在调试会话结束时关闭控制台。

    它有效,但前提是您确保您的项目以调试器启动。这听起来微不足道,但我最初尝试使用包含两个项目的解决方案,一个用于复制文件以在我的应用程序中使用的控制台,另一个用于运行实际的应用程序。我将控制台一设置为 Start without debugging 因为我不需要对其进行调试,但是在它运行后并没有关闭它。仅当将其设置为 Start(带调试)时,此选项才有效。

    【讨论】:

      【解决方案6】:

      在vs2017中你必须取消选中vs-options下的python环境设置:

      德语:Auf Eingabe warten, wenn der Prozess normal bedet wird

      【讨论】:

        猜你喜欢
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2016-04-20
        • 1970-01-01
        相关资源
        最近更新 更多