Jan 15 2008

MSDN KB : Windows Service는 네트워크 드라이브 매핑(WNet API)을 사용하지 말고 UNC 이름(경로)을 이용하라

분류: Tip.Tech 태그: ,, , , Heart @ 1:40 오전

Trackback : http://dev.heartsavior.net/archives/60/trackback/

네이버 검색 - 구글링 - 데브피아 검색 - MSDN 검색 등을 하면서 찾은 자료…

2006년 하반기 자료
@ INFO: Services and Redirected Drives from MSDN

최신 버전의 자료
@ Services and Redirected Drives from MSDN

윗 자료에서 SUMMARY 부분만 번역하자면…

서비스는 매핑된 드라이브 레터로 로컬/네트워크 자원을 액세스하면 안되며, WNet API로 매핑된 드라이브 레터를 추가/삭제/질의하면 안된다. 혹여 결과값이 성공으로 리턴되더라도 잘못된 실행 결과가 일어난다.
네트워크 자원을 반드시 액세스해야 하는 서비스의 경우에는 UNC 이름을 통해 자원에 액세스할 수 있다. UNC 이름은 문서에 기술된 제한들을 받지 않는다.

이후의 내용을 ‘대충’ 살펴봤더니(WNet API로 드라이브 레터에 손댈 수 있다는 문서였다면 자세히 봤겠지만…)
XP부터 로그온 세션마다 드라이브 레터가 다르게 할당되기 때문인 것 같다. 서로 건들수도 없는듯…

혹시나 다른 방법이 있을까 해서 좀 더 찾아봤는데, 서비스에서 유저 레벨로 프로세스를 실행하는 방법에 대한 자료는 좀 있는 것 같다.

@ Re: Calling CreateProcessAsUser() from service

@ 서비스(SCM) 프로그램에서 시스템계정관련과 레지스트리

하지만, 프로세스를 유저 레벨로 실행할 때 로그온 세션까지 지원되는지는 해보기 전에는 확인할 수 없고(자료의 예시중에 드라이브 매핑이 없네…) 게다가 내가 원하는 것은 서비스 자체에서 네트워크 드라이브를 사용하는 것이었으니… 활용하기는 좀 어렵다고 봐야 될 것 같다.

Java 데몬을 서비스단으로 올리고 JNI를 통해 WNet API를 끌어써서 네트워크 공유 폴더를 드라이브 매핑해서 쓰겠다는 ‘나름 치밀한’ 계획이었는데… ‘서비스단’ 만 빼고는 테스트까지 끝났구만 귀찮게 됐네… 쩝…