In che modo un'applicazione console Windows scritta in C# determina se viene invocata in un ambiente non interattivo (ad esempio da un servizio o un'attività pianificata) o da un ambiente in grado di interagire con l'utente (ad es. prompt dei comandi o PowerShell)?Come può un'applicazione C# Windows Console comunicare se viene eseguita in modo interattivo
risposta
Environment.UserInteractive Proprietà
Non l'ho provato, ma Environment.UserInteractive sembra promettente.
Mentre questo link può rispondere alla domanda, è meglio includere le parti essenziali della risposta qui e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla revisione] (/ recensione/post di bassa qualità/16611209) – Martin
Per determinare se un'applicazione .NET è in esecuzione in modalità GUI:
bool is_console_app = Console.OpenStandardInput(1) != Stream.Null;
+1 L'ho cercato per tre ore ora – teamalpha5441
È troppo male che richiede System.IO, ma questo è ancora il metodo migliore che ho trovato finora – Trafz
+1 perché ho avuto un caso in cui questo metodo ha funzionato, mentre il metodo Environment.UserInteractive no. Il caso era un test dell'unità NUnit in cui volevo interrompere il test quando ho premuto il tasto ESC. Non è possibile chiamare Console.KeyAvailable quando si esegue dalla GUI NUnit, quindi ho bisogno di un test per sapere quando saltare quel codice. La risposta di Glenn è stata identificata correttamente quando ero in esecuzione nella GUI NUnit contro l'esecuzione in una finestra della console, mentre la proprietà Environment.UserInteractive era TRUE in entrambi i casi. –
FYI: "Environment.UserInteractive" restituisce true per un servizio quando l'opzione "Consenti al servizio di interagire con il desktop" è selezionata. –
@JamesWilkins c'è una soluzione? –
La mia soluzione era semplicemente passare un parametro della riga di comando per sapere che ero in modalità di servizio. Penso che fosse l'unico modo sicuro a cui chiunque altro potesse pensare quando mi guardavo intorno. ;) Sono sicuro che c'è un modo, o un trucco, non ho mai avuto bisogno di passare il tempo per trovarlo. ;) Forse c'è un modo per sapere che sei collegato con l'host di servizio in qualche modo (processo genitore? Non sicuro). Forse puoi usare l'altra risposta in questa pagina (http://stackoverflow.com/a/8711036/1236397) per testare se la finestra è aperta. –