.NET System.Diagnostics.Process가 성공적으로 실패했거나 실패한시기를 어떻게 알 수 있습니까?

StackOverflow https://stackoverflow.com/questions/155540

  •  03-07-2019
  •  | 
  •  

문제

스케줄러 나 정렬을 쓰고 있습니다. 기본적으로 exes 목록 ( "C : A.Exe")과 매 순간마다 테이블의 레코드를보고 아직 실행되지 않은 작업을 실행하는 콘솔 앱이있는 테이블입니다.

나는 다음과 같은 작업을 실행합니다.

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = someExe; // like "a.exe"
p.Start();

특정 작업이 실패했는지 어떻게 알 수 있습니까? 예를 들어 A.exe가 도달되지 않은 예외를 던지면 어떻게됩니까? 위의 코드가 언제 발생하는지 알고 "특정 작업 실패"등과 같은 작업으로 작업 테이블을 업데이트하고 싶습니다.

어떻게 할 수 있습니까?

다른 사람이 나에게 말하지 않았기 때문에 SQL 에이전트 나 Windows 스케줄러를 사용하지 않습니다. 그는 더 많은 "경험"을 가지고 있기 때문에 기본적으로 주문을 따르고 있습니다. 대안을 자유롭게 제안하십시오.

도움이 되었습니까?

해결책

당신은 잡을 수 있습니다 Win32Exception 확인하려면 process.start () 기존 또는 실행 액세스가 거부되어 파일로 인해 실패했습니다.

그러나이 클래스를 사용하여 생성 한 프로세스에서 발생한 예외를 포착 할 수 없습니다. 처음에는 응용 프로그램이 .NET로 작성되지 않을 수 있으므로 예외의 개념이 전혀 없을 수 있습니다.

당신이 할 수있는 일은 종료 코드 응용 프로그램의 또는 읽기 표준 경주 그리고 표준 에러 스트림은 오류 메시지가 게시되는지 확인합니다.

다른 팁

프로세스가 반환한다고 가정하면 프로세스를 찾고 있다고 생각합니다. 그래도 WaitforexIt ()를 사용해야 할 수도 있습니다. 앱이 stderr로 보낼 때 트리거되는 errordatareceived 이벤트도 있습니다.

ExitCode 외에도 다음과 같은 작업을 수행 할 수도 있습니다.

string output = p.StandardOutput.ReadToEnd();

그것은 명령 창에 기록 된 모든 것을 캡처 할 것입니다. 그런 다음 앱에 따라 오류를 표시하기 위해 알려진 패턴으로 해당 문자열을 구문 분석 할 수 있습니다.

@jop의 말을 확장하기 위해. 또한 프로세스가 닫히기를 기다려야합니다. 따라서:

        p.Start();
        p.WaitForExit();
        int returnCode = p.ExitCode;

0이 아닌 코드는 일반적으로 오류입니다. 일부 응용 프로그램은 부정적인 응용 프로그램을 사용하는 것은 오류이며, 긍정적 인 것은 상태 코드/경고입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top