문제

Process.Start ()를 통해 관리되지 않는 C ++ 응용 프로그램을 호출하는 C# 앱이 있습니다.

일부 컴퓨터 에서이 C ++ 앱이 중단되면 방금 오류 대화 상자가 표시됩니다.

C#에서 C ++ 앱이 잘못되었음을 감지하고 다시 시작하는 방법이 있습니까?

(소스가 없으므로 C ++ 앱을 수정할 수 없습니다)

도움이 되었습니까?

해결책

C ++ 앱이 어떤 식 으로든 충돌했기 때문에 JIT 디버거 대화 상자가 표시됩니다. 대화 상자가 열려있는 동안 프로세스가 여전히 존재하지만 (하지만 중단)이므로 프로세스 클래스는 JIT 대화가 기각되거나 첨부 된 디버거가 프로세스를 종료 할 때까지 "종료"할 것이라고 생각하지 않습니다.

문제가 발생한 기계에서 JIT 디버깅을 비활성화 할 수 있습니다 (I 생각한다 이 기계 디버그 관리자 서비스를 비활성화하면 JIT 디버깅이 비활성화 될 수 있습니다. 앱이 충돌 및 죽을 수있게되면 (따라서 "종료 된"것으로보고), 또는 (그리고 어떻게이 작업을 수행 할 것인지 전혀 모른다) 호스트 C# 앱이 C ++ 앱의 디버거로 첨부하고 C ++ 앱에서 충돌 알림을받은 다음 종료 한 다음 종료 된 정보에 따라 작동 할 수 있습니다.

다른 팁

C ++가 콘솔 기반 인 경우 두 가지를 확인할 수 있습니다.

  1. exitcode, 일반적으로 0은 일반적으로 닫히는 것을 의미합니다. 그렇지 않으면 문제가 있습니다 (그러나 이것은이 응용 프로그램을 개발하는 데 사용되는 규칙에 달려 있다고 생각합니다).

  2. 표준 오류가 비어 있으면 모든 것이 정상입니다.

    사용 (프로세스 p = new Process ()) {

     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardError = true;
     p.StartInfo.FileName = "any.exe";
     p.Start();
     string error = p.StandardError.ReadToEnd();
     p.WaitForExit()
     if(error.Length == 0 && p.ExitCode == 0)
     {
     }
    }
    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top