【问题标题】:"Press any key to continue..." message shown in "Start Without Debugging" mode“按任意键继续...”消息在“不调试启动”模式下显示
【发布时间】:2018-06-11 08:42:26
【问题描述】:

我在 Visual Studio 中创建了一个空白的 C# 控制台应用程序,如下所示:

using System;

namespace ConsoleApplication1
{
    class Solution
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
        }
    }
}

当我通过按 F5 使用默认的Start Debugging 选项时,程序会按预期正常运行。我按 Enter 程序结束。

但是当我通过按 Ctrl+F5 使用Start Without Debugging 选项时,它会在我按 Enter 后在控制台上显示一条额外的消息:

按任意键继续...

然后我必须按键盘上的另一个键来终止程序。这个神奇的信息从何而来,为什么它只显示在Start Without Debugging 选项中?

注意:项目的构建后事件命令行完全为空。

【问题讨论】:

    标签: c# visual-studio visual-studio-2017 console-application


    【解决方案1】:

    这就是 Visual Studio 在非调试模式下运行控制台程序的简单方式。据我所知,它无法控制。因为它表明它实际上是一个 cmd.exe 实例而不仅仅是一个控制台窗口,我假设 VS 在命令行上使用 /K 标志(我原以为它使用了一个批处理文件,但现在看到没有必要)。

    它适用于控制台程序运行并简单退出的典型情况,如果没有该消息,这样的程序将没有机会看到输出。

    【讨论】:

    • 在调试模式下也发生在我身上。
    【解决方案2】:

    我能够验证@SoroneHaetir 在他的回答中分享的信息。我在这里借助一些屏幕截图详细说明了这一点,这些屏幕截图将补充他帖子中的信息并帮助您更好地理解同样的内容:

    1. 当我使用默认的Start Debugging 选项通过按F5 运行应用程序时,我们可以看到应用程序的可执行文件在任务管理器中启动:

    当我右键单击任务并从上下文菜单中选择Go To Process 选项时,我将进入进程选项卡上的一个进程,该进程具有图像名称ConsoleApp1.exe *32,如下所示。这很有意义。

    1. 现在,当我通过按 Ctrl + F5 使用 Start Without Debugging 选项运行应用程序时,我们看不到应用程序的可执行文件在任务管理器中启动。事实上,我们看到cmd.exe 正在启动,如下所示:

    现在,当我右键单击cmd.exe 任务并从上下文菜单中选择Go To Process 选项时,我将进入进程选项卡上的一个进程,该进程具有图像名称cmd.exe *32,如下所示。但还有更多。您还会看到 ConsoleApp1.exe *32 在进程选项卡中运行,而在 Applications 选项卡中不可见。

    这就是所有点的连接方式,在Start Without Debugging 模式下,Visual Studio 实际上会启动一个cmd.exe 实例,而该实例又会启动我们的应用程序ConsoleApp1.exe。

    在我按下回车的那一刻,ConsoleApp1.exe 进程被终止,但cmd.exe 进程继续存在,直到我按下另一个键,如下所示:

    【讨论】:

    • 是的,“包装”您的可执行文件的cmd.exe 是这样启动的:"C:\Windows\system32\cmd.exe" /c ""[your.exe]" & pause",您可以使用 Process Explorer 之类的工具自行验证,它可以向您显示命令-启动程序的行。在 cmd 中,单个 & 号无条件地将两个命令链接到一个命令行中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2015-01-23
    • 2020-03-14
    相关资源
    最近更新 更多