visual studio programar programacion para net logica hackear consola comandos aplicaciones aplicacion c# console-application user-interaction

studio - logica de programacion c#



¿Cómo puede una aplicación de consola de Windows C#saber si se ejecuta interactivamente? (4)

¿Cómo puede una aplicación de consola de Windows escrita en C # determinar si se invoca en un entorno no interactivo (por ejemplo, desde un servicio o como una tarea programada) o desde un entorno capaz de interacción con el usuario (por ejemplo, Símbolo del sistema o PowerShell)?



Para determinar si una aplicación .NET se está ejecutando en modo GUI:

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



Si todo lo que está tratando de hacer es determinar si la consola continuará existiendo después de que se cierre su programa (de modo que, por ejemplo, puede pedirle al usuario que presione Enter antes de que salga el programa) , entonces todo lo que tiene que hacer es para comprobar si su proceso es el único conectado a la consola. Si es así, la consola se destruirá cuando finalice el proceso. Si hay otros procesos adjuntos a la consola, entonces la consola continuará existiendo (porque su programa no será el último).

Por ejemplo*:

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

(*) Adaptado del código encontrado here .