[C#] 실행 파일과 관련된 폴더(디렉토리) 정보 (실행파일 경로, 현재 작업 경로)

C#에서 실행 파일로써 자신(Exe 파일)이 존재하는 경로를 얻는 방식은 WinForm인 경우와 WPF인 경우에 따라 달라집니다. 먼저 WinForm인 경우는 다음과 같습니다.

Application.StartupPath

// or

Application.ExecutablePath // 실행 파일(.exe)까지 붙여짐

WPF인 경우는 다음과 같습니다.

AppDomain.CurrentDomain.BaseDirectory

실행 파일, 즉 프로세스는 또 하나 중요한 의미를 갖는 폴더가 있는데요. 그것은 현재 자신이 작업을 하고 있는 폴더 경로입니다. 이 작업 폴더를 얻는 코드는 아래와 같습니다.

System.Environment.CurrentDirectory

// or

System.IO.Directory.GetCurrentDirectory() 

작업 폴더를 얻는 코드로써 WinForm인 경우만 사용할 수 있는 코드는 아래와 같습니다.

Application.StartupPath 

// or

string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = System.IO.Path.GetDirectoryName(path);

[C#] 외부 프로세스 실행하고 대기하기

콘솔 프로그램은 개발의 간편성과 그 기능과 책임이 명확함으로 단위 기능을 제공하는, 마치 API와 같은 역할을 제공한다고 할 수 있습니다. 이러한 콘솔 프로그램의 진정한 가치의 발휘는 여러 개의 콘솔 프로그램이 조합되어 실행되고 그 결과들이 모여 또 다른 하나의 결과로 취합 또는 새롭게 생성되는 것인데요. 이러한 콘솔 프로그램을 실행하고 실행된 프로그램이 종료될때까지 기다리는 C# 함수에 대한 소개입니다.

using System.Diagnostics;

private int RunProcess(String FileName, String Args)
{
    Process p = new Process();

    p.StartInfo.FileName = FileName;
    p.StartInfo.Arguments = Args;

    p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;

    p.Start();
    p.WaitForExit();

    return p.ExitCode;
}

위의 RunProcess 함수는 2개의 인자를 받습니다. FileName 인자는 프로그램에 대한 실행 파일 경로이고 Args는 실행 파일이 받는 Command Line 단의 인자에 대한 문자열입니다. 이 함수는 실행되는 프로그램이 반환하는 값을 다시 반환하고 있으므로 이 반환값을 이용해 해당 프로그램의 성공 여부를 판단할 수 있습니다.

사실 RunProcess 함수는 .NET에서 Process라는 클래스의 사용을 좀더 편리하고 쉽게 사용할 수 있도록 한 것입니다. Process 클래스는 프로세스에서 출력하는 내용에 대한 처리라든지, 실행 및 종료 처리는 물론, 종료시 또는 에러발생시에 대한 이벤트 처리 등에 대한 다양한 기능을 제공하므로 더욱 고급진 프로세스의 처리가 가능합니다.