드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
오유에 제 고민을 해결해 줄 수 있는 사람이 있을까요?
게시물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 같은거 검색어 넣어봐도 엉뚱한거만 나옴 ㅠㅠ
일주일째 끙끙 씨름하고 있네요.
오유에 제 고민을 해결 해 줄 수 있는 능력자님이 있을까요 ㅠㅠ?
아니면 어떤 커뮤니티 가면 사람들이 이런문제가지고 고민 많이 하더라.. 하는거라도;;
댓글 분란 또는 분쟁 때문에
전체 댓글이 블라인드 처리되었습니다.
새로운 댓글이 없습니다.