Windows 서비스에 GUI가없는 이유는 무엇입니까?


22

XP 및 NT와 같은 이전 Windows 릴리스에서이 기능을 사용하고있었습니다. Windows 서비스에서 GUI를 실행할 수있었습니다. 그러나 이후 버전에서는 불가능합니다.

이 기능이 제거 된 이유는 무엇입니까? Windows 서비스에 GUI가없는 이유는 무엇입니까?

답변:


47

주로 보안상의 이유.

내가 이해하는 것처럼 Windows 서비스가 MessageBox와 같은 GUI 컨트롤을 만들 때 일반적으로 서비스가 실행되는 세션 (예 : 로컬로 로그온 한 첫 번째 사용자 또는 세션을 사용 하여 로그온 한 사람 이었던 세션 0)에서만 볼 수 있습니다. mstsc / admin. 따라서이 사용자는 이러한 컨트롤을보고 서비스와 상호 작용할 수 있습니다.

그러나 보안상의 이유로 이제 세션 0이 예약되었으며 로그온 한 첫 번째 사용자에게 새 세션이 제공되므로 GUI 컨트롤이 표시되지 않습니다.

이것은 많은 서비스를 중단하기 때문에 호환성을 위해 메시지가 표시되는지 여부를 감지 하는 프로세스 ( 이 MSDN 블로그 참조 ) 와 '이 컴퓨터에서 실행중인 프로그램이 메시지를 표시하려고합니다. 메시지를 보거나 무시할 수 있습니다.

Microsoft는이 주제에 대한 백서를 여기 에서 다운로드 할 수 있습니다.

또한 다른 사소한 이유는 기능이 잘못 사용되어 잘못 이해되어 설계가 잘못 되었기 때문이라고 생각합니다. 예를 들어, 이벤트 로그에 쓰지 않고 메시지 상자를 사용하여 일부 알림 / 오류를 표시하는 타사 서비스가있는 오래된 서버를 사용했습니다. 그러나 로컬로 로그온하지 않았으며 관리자 모드로 거의 로그인하지 않았으므로 메시지가 표시되지 않습니다.


1
UAC와 관련이 있다는 느낌이 들었습니다. 보안을 유지하면 UAC 프롬프트가 대화 형 사용자와 워크 스테이션 세션을 공유 할 수 없거나 해커가 UAC 프롬프트 인 것처럼 가장 할 수 있습니다.
gbjbaanb

23

대화식 서비스는 가능 했지만 서비스 모델은 모든 사용자와 독립적으로 실행되는 프로세스의 모델입니다. 자동으로 실행되도록 설계되었으므로 GUI가 필요하지 않습니다.

Windows Vista부터 대화식 서비스를 사용할 수 없었으므로 더 이상 사용하지 않아야합니다.

서비스와 상호 작용 해야하는 경우 링크 된 페이지는 일종의 명명 된 파이프와 같은 프로세스 간 통신 (IPC)을 통해 서비스와 통신하는 별도의 GUI 응용 프로그램을 만드는 것이 좋습니다.


귀하의 likn은 더 이상 사용되지 않습니다. 서비스는 Windows Vista부터 사용자와 직접 상호 작용할 수 없습니다. 따라서 대화식 서비스 사용 섹션에 언급 된 기술을 새 코드에 사용해서는 안됩니다.
nemke

10

서비스는 사용자와 상호 작용하지 않고 백그라운드에서 실행되어야하기 때문에; 실제로 사용자가 로그인하지 않은 상태에서 실행될 수 있습니다.


그렇다면 왜이 기능이 이전 버전에 있었습니까? 답변을 고려할 때 Windows 서비스와 데스크톱 응용 프로그램 사이에는 통신이 없습니다. 따라서이 답변은 적절하지 못했습니다.
Arun

3
@Arun-그 논리에 근거하면 깨지는 것은 결코 고쳐지지 않을 것입니다. Michael의 대답은 정확합니다. 서비스에는 GUI가 없어야합니다. 이전 버전의 창에 GUI가있는 서비스가 있다고해서 창에 있어야 한다는 의미는 아닙니다 .

8
@Arun 데스크탑 앱과 서비스 사이에 통신이 없다는 것은 사실이 아니며 단지 서비스 자체에 GUI가 없다는 것입니다. 오히려 데스크톱 앱에는 GUI가 있으며 서버와 통신합니다.
Paul Hiemstra

따라서 Windows 서비스에는 GUI가있을 수 있지만 GUI가 있어야합니까?
Arun

1
@Arun, 서비스에는 GUI 자체가 없지만 종종 이름이 지정된 파이프, 소켓 등을 통해 서비스와 통신하여 서비스를 제어 할 수있는 별도의 프런트 엔드 애플리케이션에 의해 제어됩니다.
GrandmasterB

0

예 가능했고 효과가있었습니다. 로그인하면 응용 프로그램의 인터페이스가 나타납니다. 사용 가능한 서비스는 없지만 여전히 서버에서 실행해야하는 구형 응용 프로그램에 매우 유용했습니다. 가장 안정적인 솔루션은 아니지만. 클릭하거나 로그 아웃 할 수있는 사용자로 실행되었습니다. 그다지 좋지 않았다.

이제 모든 사람이 기본 서비스를 개발하고 응용 프로그램 또는 로그를 추가하여 서비스를 관리합니다. 이는 좋은 디자인 패턴이며 현재 대부분 사용되고 있습니다.

따라서 가능한 레거시라고 생각하십시오.


-1

이 서비스는 주로 백그라운드에서 참석하지 않은 작업을위한 것입니다. 이름 서비스 자체는 일부 클라이언트 응용 프로그램 또는이 서비스를 사용하는 다른 서비스의 서버 역할을합니다. 따라서 MS는 이제 기본 사항을 고수하고 서비스와 앱을 명확하게 구분하고자 할 수 있습니다. 네일 커터가있는 동안 왜 부엌 칼로 무를 자르겠습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.