[英]Console application closes immediately after opening in visual studio
我正在嘗試在 C# 中構建的 visual studio 中打開一個控制台應用程序。 我一打開它,它立即關閉。
我知道 Windows 設置這是一個安全默認設置(至少我認為)。 我該如何解決?
我知道我可以編譯它並創建一個快捷方式並修改目標,以便它在應用程序位置之前具有命令提示符的位置。 盡管創建它的程序員將它生成信息到 visual studio 的輸出中,所以我必須只在那里打開它。
它發生在大多數應用程序中,而不僅僅是在 visual studio 中,只是在這種情況下,我需要它在 VS 2010 中打開。我使用的是 Windows 7。
這是一個古老的問題,並激發了幾部有趣的漫畫:
讓我們修復它。 當控制台應用程序從桌面、Windows 資源管理器或 Visual Studio 上的快捷方式啟動時,您想要做的是提示用戶按任意鍵。 但不是從運行其自己的控制台的命令處理器啟動時。 你可以用一個小的 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);
}
您還可以通過按 (Ctrl + F5) 運行該應用程序。這將允許它以“發布”模式運行,默認情況下,您需要按“返回”關閉窗口。
嘗試添加Console.ReadKey();
在 Main() 方法的末尾。 這是一種阻止窗口自行關閉的快速而骯臟的方法。
您需要等待用戶輸入。 使用Console.ReadLine()
、 Console.Read()
或Console.ReadKey()
。
所以,根據這里
如果您的進程是唯一連接到控制台的進程,那么當您的進程退出時,控制台將被銷毀。 如果有其他進程附加到控制台,那么控制台將繼續存在(因為你的程序不會是最后一個)。
如果我們將代碼改編為 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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.