C#에서 대체 Windows 셸을 작성하고 있으며 현재 구현중인 기능은 동일한 셸 창 내부에 모든 IO가 있습니다. 즉, 다른 창에서 cmd.exe를 열지 마십시오.C# 셸 - IO 리디렉션
지금은 출력 할 부분 솔루션이 있습니다. 이것은 (p는 실행중인 프로세스입니다) 내 코드입니다 :
while (!p.HasExited) {
/* ... - irrelevant */
if (redirect) {
try {
p.BeginOutputReadLine();
} catch { }
}
}
과정은 모든 올바른 속성 설정, = False
같은 UseShellExecute
, RedirectStandard{Input, Output, Error}
= True
, 이벤트 핸들러가 올바르게 설정, 하지만 일관성이 없습니다.
나는 try/catch (나는 매우 나쁜 습관이다)를 시도해 보았고 핸들러가 실행될 때 false로 설정된 busy bool을 사용했지만 어떤 이유로 든 여전히 InvalidOperationException을 얻는다. p.BeginOutputReadLine() - 이미 비동기 작업이 실행 중임을 나타냅니다.
위에서 언급 한 것과 완전히 다른 해결책이 필요한 경우에도 도움이 될 것입니다.
감사합니다.
편집 : 또한
if (redirect)
{
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;
p.OutputDataReceived += new DataReceivedEventHandler(redirectHandler_StdOut);
p.ErrorDataReceived += new DataReceivedEventHandler(redirectHandler_StdErr);
}
p.Start();
, 나는 내가 일관성이 무슨 뜻인지 설명하고 있지 않다 것을 깨달았다 다음은 프로세스를 시작하는 코드입니다. 일반적으로 비동기 적으로 실행 시작하기로 시작
프로세스를 시작하는 코드는 어떤 모양입니까? –
나는 단지 지금 질문을 업데이트 할 것이다. –