[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 클래스는 프로세스에서 출력하는 내용에 대한 처리라든지, 실행 및 종료 처리는 물론, 종료시 또는 에러발생시에 대한 이벤트 처리 등에 대한 다양한 기능을 제공하므로 더욱 고급진 프로세스의 처리가 가능합니다.

[C#] 레지스트리(Registry) 읽기

C# 언어를 이용하여 윈도우즈(Windows)의 레지스트리(Registry)를 읽는 코드입니다. 먼저 읽고자 하는 레지스트리는 다음과 같습니다.

즉, 위의 INSTALL_PATH의 Data 값을 얻고자 하는 것인데요. 코드는 아래와 같습니다.

RegistryKey reg = Registry.LocalMachine;
reg = reg.OpenSubKey("Software\\GeoService\\GeoService-Xr", true);

if (reg != null)
{
    Object val = reg.GetValue("INSTALL_PATH");
    if (null != val)
    {
        MessageBox.Show(Convert.ToString(val));
    }
}

위의 코드를 실행하기 위해서는 using 절에 Microsoft.Win32에 대한 추가가 필요합니다. 즉, 아래와 같이 말입니다.

using Microsoft.Win32;

또 추후에 윈도우즈에서 레지스트리 값을 읽어올 때를 위해 정리해 둡니다.