2013년 10월 19일 토요일

[C#] 프로세스 생성과 표준입출력을 통해 다른 프로그램과 통신

제가 cUrl 이라는 것을 사용하기 위해서 찾았던 내용들을 여기에 써놓습니다.


1. 프로세스 생성

C#에서 프로세스 생성은 아래의 코드로 할 수 있습니다
아래의 코드는 cmd를 생성하고 도움말을 요청합니다.

필수 : using System.Diagnostics;

ProcessStartInfo CmdInfo = new ProcessStartInfo();
Process Cmd = new Process();

CmdInfo.FileName = @"Cmd"; // 상대경로 가능

CmdInfo.WindowStyle = ProcessWindowStyle.Hidden; // 창이 나타나지 않도록 함
CmdInfo.CreateNoWindow = true;

CmdInfo.UseShellExecute = false;
CmdInfo.RedirectStandardInput = true; // 표준입력을 사용하려면 true
CmdInfo.RedirectStandardOutput = true; // 표준출력을 사용하려면 true
CmdInfo.RedirectStandardError = true; // 표준에러를 사용하려면 true

// void Main(object[] Args) 에서 Args를 여기에서 넣을 수 있다.
// CmdInfo.Arguments = "help";

Cmd.EnableRaisingEvents = false;
Cmd.StartInfo = CurlInfo;


2. 다른 프로그램과 통신

Curl.Start(); // 프로세스 시작

Cmd.StandardInput.WriteLine("help"); // help 라고 cmd에 입력
Cmd.StandardInput.Close(); // 표준 입력을 닫음. 안닫으면 출력을 받을 수 없다.
// StackOverflow에 했던 질문 참조

string Result =  Cmd.StandardOutput.ReadToEnd(); // 표준 출력으로 결과를 받음


3. 장점과 단점

장점 : 어떤 언어로 어떤 컴파일러로 프로그래밍한 실행파일이든 표준입출력만 지원하면
          가져다쓸 수 있다.
단점 : 한 번만 통신할 수 있다는 한계가 아쉽다.