none
System.Diagnostics.Process 를 이용해서 CMD(콘솔창)을 외부에서 컨트롤 하려고 합니다. RRS feed

  • 질문

  • private void con_Click(object sender, EventArgs e)
            {

                Process pr = new Process();

                ProcessStartInfo pw = new ProcessStartInfo();

                String ppath = " "+'\u0022' + "*" + '\u0022';

                pw.FileName = @"cmd.exe"; //프로세스 정보를 processstartinfo 로 입력후 process 객체에 저장후에 사용
                pw.WorkingDirectory = @"C:/Users/poi/Desktop/Testlog/";

                pw.CreateNoWindow = false;
                pw.UseShellExecute = false;

                pw.RedirectStandardInput = true;

                pw.RedirectStandardOutput = true;

                pw.RedirectStandardError = true;

                pr.StartInfo = pw;

                pr.Start();



                //pr.StandardInput.Write(@"cd c:/" + Environment.NewLine);
                //pr.StandardInput.Write(@"cd users" + Environment.NewLine);
                //pr.StandardInput.Write(@"cd poi" + Environment.NewLine);
                //pr.StandardInput.Write(@"cd desktop" + Environment.NewLine);
                //pr.StandardInput.Write(@"cd testlog" + Environment.NewLine);
                //pr.StandardInput.Write("DEL /s" +ppath+ Environment.NewLine);
               //r.StandardInput.Write("/k" + Environment.NewLine);
                pr.StandardInput.Write(@"cd c:/" + Environment.NewLine);
                pr.StandardInput.Close();

                String vlaue = pr.StandardOutput.ReadToEnd();
                StringBuilder sb =new StringBuilder();
                sb.Append(vlaue);

                pr.WaitForExit();
                pr.Close();

               // Console.WriteLine(vlaue);

    --------

    위와 같이 프로세스에 필요정보를 저장후에 명령문을 넣었음에도 불구하고...바로 꺼지더라고요...일단 ctr+f5로 강제로 띄워도

    계속하려면 키보드를 누르라고만 하고 명령어등은 전혀 들어가지 않은거 같습니다. 어디가 잘못된 걸까요?

    2016년 8월 17일 수요일 오전 8:21

답변

  • 잘 실행이 된 것입니다. sb에 담긴 문자열을 보면, 실제로 명령어가 실행되어 출력된 내용들을 확인할 수 있을 것입니다.

    수행내용이 화면에 보이지 않은 것은 StandardOutput을 redirect시켰기 때문일텐데, 직접 해보니 RedirectStandardInput이 true이기만 하면 무조건 화면에 아무 정보도 출력하지 않는 것 같습니다.

    어쨌든, Input으로 넣었던 명령어들은 실행된 것입니다.

    다음의 글을 참고하세요.

    Process.Start의 cmd.exe에서 stdin만 redirect 하는 방법
    ; http://www.sysnet.pe.kr/2/0/11029


    2016년 8월 18일 목요일 오전 12:49