AcidF0x's Nest

C# - 현재 경로(Directory.GetCurrentDirectory) 참고시 주의사항

2019/09/03 Share

서론

최근 팔자에도 없는 C# 외주 개발을 맡아 최근에 바쁜 관계로 꿈을 가지고 만들었던 블로그가 방치되고있었다 (변명;;)
뭐라도 작성해야겠다 생각하여 외주 작업중 배운것 블로그에 기록하고자 한다.

문제 내용

어플리케이션이 실행시 프로그램이 설치된 경로의 xml파일을 읽고, 쓰는 작업중 이상하게 시작 프로그램에 등록할때만 파일을 접근할수가 없었다.
처음에는 권한 문제로 의심하여 프로그램 자동실행 방법을 레지스트리, 스케쥴러, 시작프로그램에 등록등 모든 방법을 사용해보고 심지어 UAC(…)도 꺼보고 실행해도 동일한 문제가 반복되었다.
그후 소스코드 설정파일의 경로를 출력해보니 아래와 같이 엉뚱한 경로가 나왔다.
Directory.GetCurrentDirectory

특이한것은 프로그램을 직접 실행하면 문제가 없었다(…)
구글링후 현재 프로그램 실행 파일의 위치를 가져오는 방법을 검색해서 몇가지 테스트했을때 결과는 아래와 같았다.

1
2
3
4
string Test1 = System.Environment.CurrentDirectory;
string Test2 = System.Reflection.Assembly.GetExecutingAssembly().Location;
string Test3 = System.AppDomain.CurrentDomain.BaseDirectory or System.Environment.CurrentDirectory;
string Test4 = System.IO.Directory.GetCurrentDirectory;
1
2
3
4
5
6
7
8
9
#결과
#Test1
"C:\Windows\SysWOW64"
#Test2
"C:\Program Files\Test\Test.exe"
#Test3
"C:\Program Files\Test\"
#Test4
"C:\Windows\SysWOW64"

System.Environment.CurrentDirectorySystem.IO.Directory.GetCurrentDirectory는 현재작업중인 경로를 가져오는것으로
시작 프로그램에서 등록하는 경우 C:\Windows\SysWOW64의 어떠한 프로세스가 실행 시키므로 현재 경로가 이상하게 출력되는 것으로 예상된다. (svchost.exe로 예상된다.)
Window에 대해 조금더 공부해야겠다는 생각이 들었다…

결론

Directory.GetCurrentDirectory는 실행 환경에 따라 경로가 다르다. 유의하고 사용하자!

CATALOG
  1. 1. 서론
  2. 2. 문제 내용
  3. 3. 결론