윈도우 서비스와 응용 프로그램 간의 자원공유
글쓴이: toctech / 작성시간: 월, 2009/04/20 - 11:48오후
안녕하세요,
.exe 파일을 실행시켰던 기존의 서버 프로그램을
서비스로 등록해야 할 일이 생겼습니다.
기존 서버의 시스템은,
1. 클라이언트의 요청을 처리하는 서버,
2. 서버의 상태를 체크하여 화면에 보여주는 GUI (송/수신 갯수 등),
3. 두 프로세스간의 통신을 위해 공유 자원으로 쓰이는 DLL
이렇게 세개로 구성되어있었습니다.
그런데, 1. 번을 서비스로 등록한 뒤에,
공유 자원으로 쓰이는 DLL을 통해서 서버 상태를 2. 번에 알려주는 부분이
도통 되지를 않네요.
이것저것 찾아보다가, 서비스로 실행시킨 서버에서 디버그 메시지(OutputDebugString)를 찍은 뒤,
DebugView에서 확인하기 위해서는 Capture>Capture Global Win32 를 체크해야 한다는 것 까지는 알았는데,
Win32와 Global Win32는 다른건가요? (무슨 차이가 있는건가요?)
혹시, 서비스와 응용 프로그램 간의 통신을 위한 방식으로 공유 DLL을 사용하는 것은 잘못된 설계인가요?
만약에 그렇지 않다면, DLL을 통한 자원의 공유가 왜 이뤄지지 않는 걸까요...;;;
으.. 답답한 마음에 여쭤봅니다.
Forums:
Allow service to interact with desktop
service.mmc에서 해당 서비스 프로그램의 로그온 속성을 interactive service 허용을 체크 해보세요.
서비스의 장점이라고 한다면 로그온 전에 프로그램이 동작한다에 있고, 성능적인 측면도.. 있죠..
일반 프로그램과의 차이점은.. 위 로그온 전에 실행된다는 것에 있습니다.
일반 프로그램과 달리 서비스 프로그램은 window station이 달라 제한이 있습니다.
UI로 메세지 보내려면.. FindWindow로 메세지를 보내서 처리 해야 하는 점도 있죠. 물론 이 때도 서비스 상호 작용 체크가 되어있어야 서로 메세지를 주고 받을 수 있습니다.
자세한 사항은 winsta0, 서비스 상호작용(Allow service to interact with desktop)을 키워드로 검색 해 보시면 도움이 될 듯 합니다.
댓글 달기