본문 바로가기

TechLog

.NET에서 새로운 프로세스 실행하기

.NET에서 새로운 프로세스 실행하기

어플리케이션을 작성할 때, 다른 어플리케이션을 실행하고 그 어플리케이션의 표준 출력을 가져오는 방법을 설명합니다.

 

 

안녕하세요 : )

 

오늘도 짧은 내용입니다. 단순히 '다른 프로그램 실행하기'인데요, 예전에 만들 때는 도저히 어떤 어셈블리에서 이 기능을 제공하는지 몰라서 WinAPI를 호출해 해당 코드를 만들었던 기억이 납니다.

 

그럼 시작합니다.

 

 

프로그램을 만들까 말까

 

예 전에 Kenial은 로컬 네트웍 환경에서 돌아가는 일종의 관리 프로그램을 작성한 적이 있다. 그 프로그램에서 다른 클라이언트가 살아있는지 (즉 네트워크에 존재하는지)를 식별하는 방법이 필요했었다. 그다지 큰 프로그램이 아니었기 때문에, ping.exe 유틸리티를 사용해서 응답이 있으면 네트워크에 존재하는 것으로 간주하는 기능을 만들려고 했었지만.

 

그때 Kenial은 아직 닷넷 초짜였던 시절이라 (아직도 헤매긴 한다) 프로세스를 새로 생성하려면 무슨 어셈블리를 사용해야 하는지 모르고 있었고, 새로운 모듈을 만들 시간은 커녕 레퍼런스를 볼 시간조차도 부족한 상황이었다. 결국 WinAPI를 사용해 ShellExecute()로 해결했던 기억이 난다.

 

닷넷에서는 System.Diagnostics 어셈블리에서 프로세스 생성과 관련된 기능을 지원하고 있다. 다음 코드는 ping을 실행하는 프로세스를 생성하고, 해당 프로세스의 표준 출력을 메시지박스로 보여주는 코드이다 :

 

// 프로세스 시작 정보를 담은 개체 생성

System.Diagnostics.ProcessStartInfo startinfo =

    new System.Diagnostics.ProcessStartInfo(

    "c:\\windows\\system32\\ping", "192.168.1.1");

// 창을 숨김

startinfo.CreateNoWindow = true;

// 프로세스의 표준 출력을 받음

startinfo.RedirectStandardOutput = true;

// 프로세스의 표준 출력을 받기 위해선 쉘을 사용하지 말아야

startinfo.UseShellExecute = false;

// 프로세스 시작

System.Diagnostics.Process process =

    System.Diagnostics.Process.Start(startinfo);

// 표준 출력을 메시지박스로 보여준다

System.Windows.Forms.MessageBox.Show(process.StandardOutput.ReadToEnd());

 

실행 결과는 다음과 같다 :

 

clip_image001

 

 

정리

 

프로세스를 생성하는 간단한 팁이었습니다 : )

 

표준 입출력을 활용하면 기존 유틸리티와 연계된 기능을 구현하는 것도 어렵지 않으므로, System.Diagnostics 어셈블리에서 프로세스 관련된 항목들을 한 번 훑어보시는 것도 좋지 않을까 싶습니다.

 

그럼.