C# 控制台应用程序:有没有办法检测 exe 是否从命令行运行?

Rei*_*l-- 5 c# console-application execution

如果我Program.exe从现有的命令行窗口运行,那么当它完成并退出时,控制台输出仍然存在并且可见。

如果我双击 my Program.exe,那么它将打开一个新的命令行窗口,用于控制台输出...但是当我的 exe 完成时,该窗口将关闭,并带走输出。

在后一种情况下,为了防止输出日志丢失,我可能想要我的Main()be的最后两行Console.WriteLine("Press any key to exit"); Console.ReadKey();

但如果我在前一种情况下这样做,那就有点烦人了。

有什么方法可以检测这两种情况之间的差异,以便我可以有条件地“等待用户说我可以关闭”......仅在必要时?

ZP-*_*nda 3

如果您想检查您的应用程序是否从 .NET 中的命令行启动,您可以使用Console.GetCursorPosition(). 其工作原理是,当您从命令行启动它时,光标会从初始点 ( (0, 0)) 移开,因为您在终端中输入了某些内容(应用程序的名称)。您可以通过相等性检查来做到这一点:

// .NET 6
class Program
{
    public static void Main(string[] args)
    {
        if (Console.GetCursorPosition() == (0, 0))
        {
            //something GUI
        }
        else
        {
            //something not GUI
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:您必须将输出类型设置为控制台应用程序,因为其他输出类型将引发Console.GetCursorPosition()异常。

  • 这效果很好。对于5之前的`.Net`,检查是`((Console.CursorLeft == 0) && (Console.CursorTop == 0))`。 (2认同)