2009-09-16 11 views
1

C# 클래스 라이브러리에서 실행되는 명령 줄 실행 파일이 있습니다. 매우 드문 경우이지만 명령 행 데이터가 전달되어 실행 파일이 정지합니다. 유감스럽게도 이로 인해 C# DLL을 호출하는 응용 프로그램이 프로세스가 종료 될 때까지 무기한 대기하는 동안 중단됩니다.시간 후 외부 프로세스 강제 종료

명령 줄 exe가 1 초 이내에 실행을 끝내지 않으면 절대 종료하지 않습니다. 내가 뭘하고 싶은지는 프로세스가 시작된 직후에 타이머를 생성하고 몇 초 안에 종료하지 않으면 프로세스를 강제 종료하는 것입니다.

가장 좋은 방법은 무엇입니까? 이 명령 줄 프로세스는 반복적 인 작업에서 병목 현상이 있기 때문에 솔루션은 성능에 미치는 영향이 최소화되어야합니다.

편집 : Threading.Timer가 아닌 System.Timer를 사용해야하는 이유 또는 그 반대로?

  ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.CreateNoWindow = false; 
      startInfo.UseShellExecute = true; 
      startInfo.WorkingDirectory = workingDirectory; 
      startInfo.FileName = commandLineExe; 
      startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      startInfo.Arguments = strArguments; 



      // Call WaitForExit and then the using statement will close. 
      using (Process exeProcess = Process.Start(startInfo)) 
      { 

       exeProcess.WaitForExit(); 
      } 

내가 시도하고 명령 줄 응용 프로그램이 걸려 이유를 알아낼 수 있나요, 아니면 제가 소스 코드에 명령 줄 기능을 리팩토링해야한다 제안은 삼가 해 주시기 바랍니다. 우리는이 문제에 적극적으로 노력하고 있지만 응용 프로그램의 안정성이 우선되어야합니다.

+1

정확한 중복 : http://stackoverflow.com/questions/1422594 – dtb

+0

예 사실, 그러나 나는 제목에 사용한 문구가 반대 방향에서 문제가보고됩니다. 바라건대 그것은 검색에 유용 할 것입니다. – Alex

답변

4

그냥 추가 :

// Call WaitForExit and then the using statement will close. 
using (Process exeProcess = Process.Start(startInfo)) { 
    if(!exeProcess.WaitForExit(1000)) 
      exeProcess.Kill(); 
} 
+0

오, 얼마나 당황 스럽습니까. 나는 내가 전에 그것을 보지 못했다고 생각한다. – Alex