控制台应用程序在 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 studio 2008 VC++中运行一个Win32控制台应用程序后,弹出一个“没有找到MSVCP90D.dll”?