먼저 Working Directory를 설정하기 전에 Working Directory란 무엇이며, 왜 설정을 하는지에 대해서 알아보도록 하겠습니다.


Working Directory란?


위키피디아에 검색을 해 보니 아래와 같이 나옵니다.


In computing, the working directory of a process is a directory of a hierarchical file system, if any,[nb 1] dynamically associated with each process. It is sometimes called the current working directory (CWD), e.g. the BSD  getcwd(3) function, or just current directory.[1] When the process refers to a file using a simple file name or relative path (as opposed to a file designated by a full path from a root directory), the reference is interpreted relative to the current working directory of the process. So for example a process with working directory /rabbit-shoes that asks to create the file foo.txt will end up creating the file /rabbit-shoes/foo.txt.


즉, 파일시스템에서 프로세스의 실행 디렉토리를 의미합니다. 때로 CWD(현재 working directory)로 불리기도 한답니다.


우선 해당 내용을 검색하고 찾아보며 프로그래밍을 하게 된 이유는 다음과 같습니다.


C# 코딩을 통해서 특정 경로의 프로그램을 수행하는 프로그램을 만들고 있었습니다.


하지만 제가 만들고 있는 프로그램(이하 런쳐라고 지칭)에서 실행 대상이 되는 프로그램이 특정 설정파일을 읽어서 작업을 하는데 런쳐에서 해당 프로그램을 실행하는 경우 실행대상 프로그램에서 설정파일의 경로를 찾지 못하여 설정을 불러오지 못하는 문제가 있었습니다.


이는 실행대상 프로그램이 설정파일을 상대경로를 통해서 가져오는 것이라고 추측, 실행대상 프로그램이 실행하는 경로가 실행파일이 위치하고있는 경로에서 실행되는 것 처럼 만들어 줘야 겠다는 판단을 했습니다. 그 이유는 런쳐에서 실행을 하면서 실행대상 프로그램이 설정을 가져오지 못할 때, 설정파일을 런쳐의 디버깅 경로에서 찾는것을 확인하였습니다.


<사진 1> 프로그램의 코드

Working Directory를 설정해 주기 위해서는 위와 같이 ProcessStartInfo 개채의 WorkingDirectory라는 속성값을 설정해주면 됩니다.

제가 만들고 있는 샘플 프로그램에서 처음 초기화 xml파일에 실행대상 프로그램의 경로만을 받아오도록 설계를 했었기 때문에 xml파일에 Working Directory를 저장할 노드를 추가하지 않고, 실행파일의 경로와 String 클래스에서 제공하는 Substring과 Split함수를 적절히 활용하여 실행파일의 이름을 제외한 실행 경로(부모 폴더 경로)를 추출하여 해당 경로를 Working Directory로 설정하였습니다.


해당 작업을 거친 후 처음 발생하던 실행대상 프로그램의 설정파일을 가져오지 못하는 문제가 해결되었습니다.


+ Recent posts