控制台应用程序在 Visual Studio 中打开后立即关闭

Posted

技术标签:

【中文标题】控制台应用程序在 Visual Studio 中打开后立即关闭【英文标题】:Console application closes immediately after opening in visual studio 【发布时间】:2012-10-26 16:32:31 【问题描述】:

我正在尝试在用 C# 构建的 Visual Studio 中打开一个控制台应用程序。我一打开它就立即关闭。

我知道 Windows 设置这是一个安全默认值(至少我认为)。我该如何解决?

我知道我可以编译它并创建快捷方式并修改目标,使其在应用程序位置之前具有命令提示符的位置。虽然创建它的程序员已经让它生成信息到 Visual Studio 的输出中,所以我必须只在那里打开它。

大多数应用程序都会发生这种情况,而不仅仅是在 Visual Studio 中,只是在这种情况下,我需要在 VS 2010 中打开它。我使用的是 Windows 7。

【问题讨论】:

【参考方案1】:

这是一个古老的问题,并启发了几部有趣的漫画:

让我们修复它。您要做的是在从桌面、Windows 资源管理器或 Visual Studio 上的快捷方式启动控制台应用程序时提示用户按 Any 键。但不是当它从运行自己的控制台的命令处理器启动时。您可以通过一点点 pinvoke 来执行此操作,您可以确定该进程是否是控制台窗口的唯一所有者,如下所示:

using System;

class Program 
    static void Main(string[] args) 
        Console.WriteLine("Working on it...");
        //...
        Console.WriteLine("Done");
        PressAnyKey();
    

    private static void PressAnyKey() 
        if (GetConsoleProcessList(new int[2], 2) <= 1) 
            Console.Write("Press any key to continue");
            Console.ReadKey();
        
    

    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    private static extern int GetConsoleProcessList(int[] buffer, int size);

【讨论】:

如果所有人都想要一种在 VS 运行结束时暂停的快速方法,那就不行了。对于小型实用程序或测试代码,pinvoke 可能比记住“Debugger.IsAttached”更麻烦。 这只是您的意见,这是编写的复制/粘贴代码,绝不是麻烦。请随时在您自己的帖子中表明您的偏好。【参考方案2】:

您也可以按 (Ctrl + F5) .. 运行应用程序。这将允许它以“释放”模式运行,默认情况下,您需要按“返回”关闭窗口。

【讨论】:

【参考方案3】:

尝试在 Main() 方法的末尾添加Console.ReadKey();。这是阻止窗口自行关闭的一种快速而肮脏的方法。

【讨论】:

【参考方案4】:

您需要等待用户输入。使用Console.ReadLine()Console.Read()Console.ReadKey()

【讨论】:

【参考方案5】:

所以,根据here

如果您的进程是唯一连接到控制台的进程,那么 当您的进程退出时,控制台将被销毁。如果还有其他 进程附加到控制台,然后控制台将继续 存在(因为你的程序不会是最后一个)。

如果我们将代码改编为 C#,您最终会得到这样的结果:

using System;
using System.Runtime.InteropServices;

namespace CheckIfConsoleWillBeDestroyedAtTheEnd

    internal class Program
    
        private static void Main(string[] args)
        
            // ...

            if (ConsoleWillBeDestroyedAtTheEnd())
            
                Console.WriteLine("Press any key to continue . . .");
                Console.ReadKey();
            
        

        private static bool ConsoleWillBeDestroyedAtTheEnd()
        
            var processList = new uint[1];
            var processCount = GetConsoleProcessList(processList, 1);

            return processCount == 1;
        

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern uint GetConsoleProcessList(uint[] processList, uint processCount);
    

【讨论】:

以上是关于控制台应用程序在 Visual Studio 中打开后立即关闭的主要内容,如果未能解决你的问题,请参考以下文章

如何在visual studio2008中创建,编译和运行C++程序,

如何在 Visual Studio 2017 中创建 Visual c++ MFC 控制台项目

在 Visual Studio 的设计视图中打开表单 (.cs) 会立即显示未保存的更改

如何用visual studio2012编c++程序?

为啥我在visual studio 2008 VC++中运行一个Win32控制台应用程序后,弹出一个“没有找到MSVCP90D.dll”?

如何从 Visual Studio 在控制台中运行程序? [复制]