Dlaczego usługi Windows nie mogą mieć GUI?

22

Korzystałem z tej funkcji we wcześniejszej wersji systemu Windows, takiej jak XP i NT. Byłem w stanie uruchomić GUI z usługi Windows. Ale nie jest to możliwe w późniejszych wersjach.

Jaki jest powód usunięcia tej funkcji? Dlaczego usługi Windows nie mogą mieć GUI?

Bieg
źródło

Odpowiedzi:

47

Głównie ze względów bezpieczeństwa.

Jak rozumiem, gdy usługa Windows tworzy kontrolki GUI takich jak MessageBox, były zazwyczaj tylko zobaczyć w sesji, która biegnie usługi w IE Session 0 które również wykorzystywane być pierwszy użytkownik zalogowany lokalnie lub przez kogoś logowania się przy użyciu mstsc / admin. Dlatego ten użytkownik zobaczy te elementy sterujące i będzie mógł wchodzić w interakcje z usługą.

Jednak ze względów bezpieczeństwa sesja 0 jest teraz zarezerwowana, a pierwszy użytkownik, który się zaloguje, otrzyma nową sesję, a zatem nie będzie widzieć elementów sterujących GUI.

Ponieważ psuje to całkiem sporo usług, dla zachowania zgodności istnieje proces (patrz blog MSDN), który próbuje wykryć, czy wyświetlane są jakieś komunikaty, i wyskakuje z ostrzeżeniem: „Program działający na tym komputerze próbuje wyświetlić wiadomość ”i pozwala wyświetlić lub zignorować wiadomość.

Microsoft ma WhitePaper na ten temat, który można pobrać stąd

Podejrzewam również, że innym drobnym powodem jest to, że funkcja została niewłaściwie użyta / źle zrozumiana i doprowadziła do złych projektów. Na przykład miałem kiedyś stary serwer z usługą innej firmy, która wyświetlała niektóre powiadomienia / błędy za pomocą okna komunikatu zamiast zapisywania w dzienniku zdarzeń. Ale nigdy nie logowałem się lokalnie i rzadko logowałem się w trybie administracyjnym, dlatego nie widziałem wiadomości.

sgmoore
źródło
1
Mam wrażenie, że miało to coś wspólnego z UAC - zabezpieczenie oznacza, że ​​monit UAC nie może udostępnić sesji stacji roboczej interakcyjnemu użytkownikowi, lub haker może wyłudzić swoje własne podszywanie się pod monit UAC.
gbjbaanb
23

Kiedyś możliwe były usługi interaktywne , ale model usług to proces uruchamiany niezależnie od dowolnego użytkownika. Są zaprojektowane tak, aby działały bez nadzoru i dlatego nie powinny wymagać GUI.

Usługi interaktywne nie były dostępne od systemu Windows Vista, dlatego nie należy ich już używać.

Jeśli musisz wchodzić w interakcję z usługą, strona, do której prowadzę link, zaleca utworzenie oddzielnej aplikacji GUI, która komunikuje się z usługą poprzez komunikację międzyprocesową (IPC) - np. Nazwane potoki.

ChrisF
źródło
Twoje upodobanie jest przestarzałe: Usługi nie mogą bezpośrednio komunikować się z użytkownikiem w systemie Windows Vista. Dlatego techniki wymienione w sekcji Korzystanie z usługi interaktywnej nie powinny być stosowane w nowym kodzie.
nemke,
10

Ponieważ usługi mają działać w tle bez interakcji z użytkownikiem; mogą faktycznie działać, gdy żaden użytkownik nie jest zalogowany.

Michael Borgwardt
źródło
to dlaczego ta funkcja była dostępna we wcześniejszych wersjach? Biorąc pod uwagę twoją odpowiedź, nie będzie komunikacji między usługą Windows a aplikacją komputerową. Ta odpowiedź nie może być odpowiednia.
Arun
3
@Arun - w oparciu o tę logikę, wtedy rzeczy, które są zepsute, nigdy nie zostaną naprawione. Odpowiedź Michaela jest poprawna - usługi nie powinny mieć gui. To, że miały je wcześniejsze wersje systemu Windows (usługi z guis), nie oznacza, że powinny je mieć.
8
@Arun nie jest prawdą, że nie ma komunikacji między aplikacjami komputerowymi a usługami, tylko że sama usługa nie ma GUI. Raczej aplikacja komputerowa ma GUI i komunikuje się z serwerem.
Paul Hiemstra
Czy usługi Windows mogą mieć GUI, ale nie powinny?
Arun
1
@Arun, usługi nie mają samych GUI, ale często są kontrolowane przez osobne aplikacje frontendowe, które mogą kontrolować usługę, komunikując się z nią w jakiś sposób (za pośrednictwem nazwanych potoków, gniazd, ...)
GrandmasterB
0

Tak, było to możliwe i działało. Po zalogowaniu masz interfejs aplikacji. Było to bardzo przydatne w przypadku starszych aplikacji, które nie mają dostępnej usługi, ale nadal muszą działać na serwerze. Chociaż nie było to najbardziej stabilne rozwiązanie. Został uruchomiony jako użytkownik, który mógł go kliknąć lub wylogować. To nie było bardzo miłe.

Teraz wszyscy rozwijają natywne usługi i dodają aplikację lub dziennik do zarządzania usługą. To dobry wzorzec projektowy i jest teraz używany przez większość czasu.

Postaraj się więc postrzegać to jako dziedzictwo, które było możliwe.

Luc Franken
źródło
-1

Usługi te są przeznaczone do operacji bez nadzoru, głównie w tle. Sama usługa nazw oznacza działanie jako serwer dla niektórych aplikacji klienckich lub innych usług korzystających z tej usługi. Więc MS może chcieć teraz trzymać się podstaw i chcieć wprowadzić wyraźne rozróżnienie między usługami a aplikacjami, więc aplikacje utrzymują zajęte zastosowania i pozwalają usługom cicho spełniać swoje zadanie. Podczas gdy obcinacz do paznokci istnieje, dlaczego wybrać nóż kuchenny do wycinania zera?

Tony Thomas
źródło