2016-11-23 1 views
0

Windows Forms 앱에서 외부 프로세스를 열어야합니다. 게다가 앱 실행 시간 동안 여러 번해야합니다. 기본적으로 명령 프롬프트에서 여러 번 인수를 사용하여 .exe 파일을 실행하지만 폴더를 .exe가 제대로 작동하려면 폴더를 변경해야합니다. 지금까지, 나는 그렇게처럼 cmd를 열어 해요 : C# 폴더를 변경하고 CMD에서 프로세스를 시작하고 완료 될 때까지 기다립니다.

ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe"); 
     processStartInfo.RedirectStandardInput = true; 
     processStartInfo.RedirectStandardOutput = true; 
     processStartInfo.UseShellExecute = false; 

     Process process = Process.Start(processStartInfo); 

는 그 다음 CMD에 명령을 공급하기 위해 process.WriteLine를 사용하여.

process.StandardInput.WriteLine("Awin.exe -X " + filePath + "/" + fileNumber + " ID=\"" + id + "\""); 

그리고 여러 개의 fileNumber 파일에 대해이 작업을 수행해야합니다. 또한, 다음 단계로 진행하기 전에 입력에서 끝까지 프로세스가 시작될 때까지 기다려야합니다. 좋은 결과를 얻지 못하기 때문에 더 좋은 방법이있을 것입니다. WaitForExit

+0

내가 * process.WaitForExit을 사용하는 좋은 결과를받지 못했습니다 * 당신은 무엇을 의미합니까? ['Process.Exited'] (http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited.aspx) 이벤트를 정확하고 신뢰할 수있는 결과로 구독합니까? –

+0

WaitForExit이 완료되었음을 알리는 메시지가 표시되면 WaitForExit에서 작업을 끝낸 것처럼 등록했지만 cmd에서 호출 한 Awin.exe가 계속 실행됩니다. – Flopn

+0

Process.Exited 이벤트와 동일한 결과가 나타 납니까? 그렇지 않으면 Awin.exe의 ProcessID를 얻을 수 있으며 종료 할 때 계속 폴링합니다. ProcessID가 여전히 유효한지 확인하는 프로세스 –

답변

0

ProcessStartInfo 클래스에는 WorkingDirectory 속성이 있습니다.

ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe"); 
processStartInfo.WorkingDirectory = your_directory 
(...) 

//do your thing 
Process process = Process.Start(processStartInfo); 

인수가 Arguments 속성을 통해 전달 될 수

+0

이 작업을 시도했지만 항상 디렉터리 이름이 잘못되었다는 예외가 발생합니다. 슬래시 대신 백 슬래시를 사용해야합니까? – Flopn

+0

'Directory.Exists'를 실험 해보면 바로 디렉토리 이름을 얻을 수 있습니다. – mayu

관련 문제