gpt4 book ai didi

.net - 如何确定程序终止后是否关闭DOS控制台

转载 作者:行者123 更新时间:2023-12-03 01:59:18 25 4
gpt4 key购买 nike

当我运行控制台应用程序时,它会显示一些输出,我希望用户看到这些输出。另外,我的程序必须在提升模式下运行。

因此,当用户从非提升的命令提示符运行它时,会显示标准对话框,用户接受提升的运行它。问题是为此创建了一个新的控制台窗口,并在程序终止后立即关闭。我希望它保留下来让用户读取输出。

很简单,对吧?只需在代码末尾添加 Console.ReadLine() 即可。但是,当从提升的提示符运行时,不会创建新的控制台,但用户必须按某个键才能让应用程序退出 - 烦人。

我的问题:是否有可能知道控制台窗口将在应用程序终止时关闭,以便我只能执行 Console.ReadLine()

谢谢。

最佳答案

您需要一些小的 pinvoke 才能发现这一点。 GetConsoleProcessList() API 函数返回附加到控制台的进程列表。如果您的程序从另一个进程继承了控制台,则该值将大于 1。使其看起来与此类似:

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
if (OwnsConsole()) {
Console.Write("Press ENTER to exit");
Console.ReadLine();
}
}
public static bool OwnsConsole() {
int[] pids = new int[1]; // NOTE: intentionally too short
int retval = GetConsoleProcessList(pids, pids.Length);
if (retval == 0) throw new System.ComponentModel.Win32Exception();
return retval == 1;
}
[DllImport("kernel32.dll", SetLastError = true)]
private static extern int GetConsoleProcessList(int[] pids, int arraySize);

}
}

关于.net - 如何确定程序终止后是否关闭DOS控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com