Ответ 1
Environment.UserInteractive Свойство
Как консольное приложение Windows, написанное на С#, определяет, будет ли оно вызвано в неинтерактивной среде (например, из службы или в виде запланированной задачи) или из среды, способной взаимодействовать с пользователем (например, Command Prompt или PowerShell)
Environment.UserInteractive Свойство
Чтобы определить, работает ли приложение .NET в режиме графического интерфейса пользователя:
bool is_console_app = Console.OpenStandardInput(1) != Stream.Null;
Я не тестировал его, но Environment.UserInteractive выглядит многообещающим.