[C#] Process와 ProcessStartInfo를 이용해 프로세스의 정보를 가져오기

ProcessStartInfo 는 Process 구성 요소와 함께 사용됩니다. Process 클래스를 사용하여 프로세스를 시작하면 실행 프로세스에 연결할 때 사용할 수 있는 정보뿐 아니라 프로세스 정보에도 액세스할 수 있습니다.

시작하는 프로세스를 자세히 제어하기 위해 ProcessStartInfo 클래스를 사용할 수 있습니다. 사용자는 적어도 생성자를 사용하거나 수동으로 FileName 속성을 설정해야 합니다. 파일 이름은 임의의 응용 프로그램 또는 문서입니다. 여기서 문서는 열기 동작 또는 기본 동작과 연결된 파일 형식으로 정의됩니다.

MSDN에 나와있는 해당 클래스에 대한 설명이다.

되게 상세하게 나와있는데, 해당 클래스를 사용해서 프로세스의 정보를 가져오거나 데이터를 보내거나 할 수 있는것인가..

결국 해당 클래스로 실행한 프로세스를 내가 짠 프로그램 내에서 모니터링도 할 수 있고, 맘대로 주무를수 있다는 건가보다.

GUI 프로그램은 되는지 안되는지 모른다. 그럼 일단 제일 쉬울것 같은 CMD로 해보자.

ProcessStartInfo CMD = new ProcessStartInfo();
Process pro = new Process(); 
CMD.FileName = @“cmd”//실행할 응용프로그램의 경로를 설정해줌.

이렇게 객체들을 생성해주고 실행할 응용프로그램의 경로를 설정해준다.

CMD.WindowStyle = ProcessWindowStyle.Hidden; //실행할 프로그램을 숨긴다.

CMD.CreateNoWindow = true; //실행할 프로그램의 창을 생성하지 않는다.

CMD.UseShellExecute = false;

//프로세스를 시작할 때 운영 체제 셸을 사용할지 여부를 나타내는 값을 가져오거나 설정합니다.
//라고 MSDN이 그러는데 뭔소린진 잘 모르겠다.

CMD.RedirectStandardOutput = true//CMD창의 내용을 가져오기 True
CMD.RedirectStandardInput = true//CMD창의 데이터를 보내기 True
CMD.RedirectStandardError = true//오류내용 가져오기 True

요렇게 잡다한 속성 설정해주고,

pro.EnableRaisingEvents = false
//프로세스가 종료될 때 Exited 이벤트를 발생시키지 않는다.
pro.StartInfo = CMD; //ProcessStartInfo의 인스턴스인 CMD를 넣어줌.
pro.Start(); //시작
pro.StandardInput.Write(@“Hi! I’m L0GIC!” + Environment.NewLine);
//마무리로 Environment.NewLine이 꼭 필요하다고 한다.

pro.StandardInput.Close(); //닫음

Process쪽 설정후 StandardInput.Write로 데이터를 입력시킨다.

입력시킨 데이터 내용은 “Hi! I’m L0GIC” 이다.

textBox1.Text = process.StandardOutput.ReadToEnd();

//해당 프로세스의 내용을 스트림으로 끝까지 읽어온다.
pro.WaitForExit();
pro.Close(); //프로세스 종료

textBox1에 CMD의 내용을 출력한다.

You may also like...