공유폴더에 접근하여 파일이 존재여부 및 디렉토리의 존재여부등의을 체크시 일반 윈도우 계정으로 실행되는
프로그램들은 문제없이 접근이 가능하다.
하지만 윈도우 서비스 프로그램으로 구동하는 프로세스가 접근할때는 내용이 틀려진다.
얼마전 프로그램이 수행해야하는 일을 못하는 문제로 원인을 분석하게 되었는데
접근처리되어야 하는 파일들이 모두 공유 폴더에 존재하고 있었고,
문제 발생시점의 로그를 보니 파일들이 없다는 에러로 특정 기능을 수행하지 못하고 실패가 난 로그들이 남았다.
우선 실제 해당 폴더나 파일들이 존재하는지 탐색기에 문제 발생시점에 기록된 path를 넣어보면 정상적으로
접속되었고, 해당 문제가 발생된 사이트는 일본이었기 때문에
뭔가 문제가 있는건 아닌지 하여 별도 테스트 툴로 해당 인자로 넘어온 경로르 입력 후 테스트시에도 정상적으로
동작됨을 확인하였다.
살짝 맨붕에 빠져...해당 접속하는 드라이브로 이동하니 잉?
일반 로컬 저장소가 아닌 네트워크 드라이브로 생성된 경로가 아닌가?
음...그래도 특별히 문제가 될거 같진않은데..
문제가 되는 프로그램에 네트워크 드라이브로 잡힌 경로의 폴더나 파일들을 강제로 넣어 존재여부 테스트를
수행시 사용하는 API에서 모두 경로를 찾을 수 없다는 황당한 에러를 뱉어내기 시작했다.;;
한참을 고민하다 수행하는 프로세스가 서비스프로그램인것에 감안하여 그냥 로그인한 윈도우 사용자 계정권한으로
실행하여 보니 이때는 정상적으로 폴더나 파일을 찾는 모습이 보여졌다.;
딱 감이 오는것이 아 권한 관련쪽이구나 하는 부분이 이었고
공유폴더에 우클릭하여 여기저기 권한 설정등을 마구마구 만져보았지만 당최 접근이 안되는 것이었다...
이게 도대체 왜그럴까...구글링을 해서 보니..
일단 네트워크 드라이브로 잡힌것은 윈도우 사용자 계정으로 설정한 것이니,
당연이 서비스로 도는 프로그램은 SYSTEM 계정권한이니 접속이 안될 수 밖에...
방법을 알아보니 그냥 간단히 SYSTEM 계정권한으로 다시 해당 네트워크 드라이브를 맵핑하면 된다 한다.
근데 뭔가 코드상으로 작업해 넣기는 귀찮으므로 검색하니
역시나..
sysinternalas에 있는 psexec를 사요하면 간단히 SYSTEM 계정권한을 사용할 수 있다.
cmd로 네트워크 드라이브를 맵핑할 수 있으니
cmd 자체를 SYSTEM 계정권한으로 띄우고 거기다가 네트워크 드라이브 맵핑 커맨드를 날려
SYSTEM 계정권한으로 다시한번더 네트워크 드라이브를 맵핑하면 된다.
이렇게 하고 나니 접근이 잘되었다..
실행순서
1. cmd.exe를 우선 관리자 권한으로 실행
2. psexec가 있는 곳으로 이동
3. psexec -i -s cmd.exe 명령어 입력
4. cmd.exe가 SYSTEM 권한으로 실행..
5. net use J: \\102.12.xxx.xxx\TestFD /persistent:yes 입력
->persistent:yes 의 옵션은 계속 연결유지를 한다는 의미.
6. 공유폴더를 열어놓은 윈도우의 ID와 패스워들 입력하라고 나온다.
7. 윈도우 계정과 패스워드 입력하여 설정 마무리
-> 이렇게 되면 연결은 되었다고 나오나 실제 드라이브는 연결이 안되어 있다고 표시된다.
(뭐 당연히 현재 로그인 사용자 계정이 아닌 SYSTEM 계정권한으로 했으니..)
하지만 마우스 선택하면 잘 보임..
서비스 프로그램으로 네트워크 드라이브를 접근해야 하는 경우가 많은 프로그램이라면
동작하는 서비스 프로그램에서 API를 이용해서 네트워크 드라이브 연결을 하던가 아니면 해당 프로그램에서
간단히 cmd.exe에 인자를 넣어 네트워크 드라이브를 맵핑하여 사용해야 할것이다.
분명 나와 같은 문제로 삽질하던 사람이 있을것이므로..잘 기록해 놓는다.
정보는 공유되어야 한다 ~~ 쭈욱~
'Study > Etc' 카테고리의 다른 글
Windbg Memory leak detect (0) | 2021.05.21 |
---|---|
Visual Studio 2019 - Visual AssistX 처럼 Font & Color (글꼴 및 색상)사용하기 (7) | 2021.02.19 |
Jansson library - json_load_file() , josn_dump_file 관련 문제 (0) | 2018.12.06 |
TortoiseSvn -svn Merging 챕터 번역 (0) | 2016.11.02 |
Visual assist 의 코드 조각(#Snippets) 사용 (0) | 2016.09.06 |
댓글