Principalmente motivi di sicurezza.
A quanto ho capito, quando un servizio Windows crea controlli GUI come un MessageBox, normalmente venivano visti solo nella sessione in cui i servizi venivano eseguiti, ad esempio Sessione 0, che anche usato era il primo utente che ha effettuato l'accesso localmente o da qualcuno che ha effettuato l'accesso utilizzando mstsc / admin. Quindi questo utente vedrebbe questi controlli e potrebbe interagire con il servizio.
Ma per motivi di sicurezza, la Sessione 0 è ora riservata e il primo utente ad accedere riceverà una nuova sessione e quindi non vedrà i controlli della GUI.
Poiché questo rompe un bel po 'di servizi, per compatibilità, c'è un processo (si veda questo blog MSDN che tenta di rilevare se vengono visualizzati messaggi e popup con un avviso 'A il programma in esecuzione su questo computer sta tentando di visualizzare un messaggio "e consente di visualizzare o ignorare il messaggio.
Microsoft ha un WhitePaper su questo argomento che puoi scaricare da qui
Sospetto anche che un altro motivo minore sia dovuto al fatto che la funzione è stata utilizzata in modo improprio / incompreso e ha portato a cattivi progetti. Ad esempio, avevo un vecchio server con un servizio di terze parti che mostrava alcune notifiche / errori usando una finestra di messaggio piuttosto che scrivere nel registro eventi. Ma non ho mai effettuato l'accesso localmente e raramente ho effettuato l'accesso in modalità amministratore e quindi non avrei visto i messaggi.