C#Windows控制台应用程序如何判断它是否以交互方式运行

用C#编写的Windows控制台应用程序如何确定它是在非交互式环境中调用(例如从服务或作为计划任务)还是从能够进行用户交互的环境(例如命令提示符或PowerShell)调用?

Environment.UserInteractive属性

要确定.NET应用程序是否在GUI模式下运行:

bool is_console_app = Console.OpenStandardInput(1) != Stream.Null; 

我没有测试过,但Environment.UserInteractive看起来很有前景。

如果您要做的就是确定在程序退出后控制台是否会继续存在(例如,您可以在程序退出之前提示用户按Enter ,那么您所要做的就是检查您的进程是否是连接到控制台的唯一进程。 如果是,那么当您的进程退出时,控制台将被销毁。 如果控制台上附加了其他进程,则控制台将继续存在(因为您的程序不是最后一个)。

例如*:

 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); } } 

(*)改编自此处的代码。