게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
오유에 제 고민을 해결해 줄 수 있는 사람이 있을까요?
게시물ID : computer_21131짧은주소 복사하기
작성자 : 죠니뎁
추천 : 0
조회수 : 660회
댓글수 : 13개
등록시간 : 2011/10/20 01:40:03
비쥬얼 스튜디오에 

System.Diagnostics.Process  클래스를 이용해서 다른 프로그램을 실행시키고 

그 프로세스에서 나오는 아웃스트림 출력을 가져오려고해요.

그런데 어떤 프로그램은 스트링 형태로 잘 가져와지는데,


어떤 프로그램은 분명히 실행은 되는데 아웃스트림을 스트링으로 가져오질 못하네요.

예를들어 시그윈에서 gcc로 컴파일 되었고 돌아가는 ssh 라던가, (dll 파일 다 가져와서 분명히 실행은 됨)

비쥬얼 스튜디오에서 컴파일하긴했는데 c 스타일로 코딩된거라던가, 등등이 아웃스트림을 못 가져와요.


C# 으로 코딩하고 있는데, 

코드는 대략

        private void button1_Click(object sender, EventArgs e)
        {
            Process myProcess = new Process();
            string myString= "aa\naa\naa";

            myProcess.StartInfo.UseShellExecute = false;
            // You can start any process, HelloWorld is a do-nothing example.
            myProcess.StartInfo.FileName = "C:\\aa\\ssh.exe";
            //myProcess.StartInfo.Arguments = " > C:\\aa\\ss.txt ";
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.StartInfo.RedirectStandardOutput = true;
            myProcess.StartInfo.RedirectStandardInput = true;
            myProcess.StartInfo.RedirectStandardError = true;
            myProcess.OutputDataReceived += this.ralralra;
            //StreamReader myStreamReader = myProcess.StandardOutput;
            myProcess.Start();

            //StreamReader myStreamReader = myProcess.StandardOutput;
            // Read the standard output of the spawned process.
            //myString = myStreamReader.ReadToEnd();
            //output.Text = myProcess.StandardOutput.ReadToEnd() + "aa";

            // myProcess.WaitForExit();
            //myProcess.Close();
            System.IO.StreamWriter SW = myProcess.StandardInput;
            //StreamReader myStreamReader = myProcess.StandardOutput;
            myProcess.BeginOutputReadLine();
            myProcess.Dispose();
            //myProcess.WaitForExit();
           
            //MessageBox.Show(myString);

            
     
        }
        public void ralralra(object sender, DataReceivedEventArgs e)
        {
           // UpdateTextBox_shsh(e.Data);
            /*MessageBox.Show(e.Data);

            if (!String.IsNullOrEmpty(e.Data))
            {
                output.Text = e.Data;
            }
            else
            {
     
               // output.Text = "null";
                MessageBox.Show("aa");
            }*/

            sss(e.Data);
        }
        private delegate void sssDelegate(string Text);
        private void sss(String str)
        {

            if (this.InvokeRequired)
            {
                sssDelegate del = new sssDelegate(sss);
                object[] args = { str };
                this.Invoke(del, args);
            }
            else
            {
                //tb.Text &= Tex & Environment.NewLine
                //MessageBox.Show(str);

                output.Text = output.Text + "\n"+str;
                //MsgBox(CurrentAddr)
            }
           
        }
    

주석처리된 부분은 제 고민의 흔적들이에요.

MSDN 을 아무리 살펴봐도 어떤 프로세스는 출력을 가져올 수 없다던가 하는 제약조건이 안나오는데,

구글에서 영어로 찾아보려고해도 System.Diagnostics.Process 의 범위 한계 이쯤 생각해서 

range 나 boundary 같은거 검색어 넣어봐도 엉뚱한거만 나옴 ㅠㅠ

일주일째 끙끙 씨름하고 있네요.


오유에 제 고민을 해결 해 줄 수 있는 능력자님이 있을까요 ㅠㅠ?
아니면 어떤 커뮤니티 가면 사람들이 이런문제가지고 고민 많이 하더라.. 하는거라도;;
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호