2011-03-14 6 views
6

무엇 자동 충돌의 모든 종류의에 다시 시작할 수 있도록 내 응용 프로그램에 크래시 복구을 구축하는 가장 좋은 방법은 (아마도 표준 용액을)입니다.크래시 복구

tnx.

+0

신청서에 어떤 주를 가지고 있습니까? –

+0

죄송합니다. "주"? – MBZ

+0

상태, 현재보기, 저장되지 않은 변경 사항, 탐색 기록, 응용 프로그램의 "위치"와 사용자가 작성한 내용에 대한 모든 것. –

답변

6

여기에 몇 가지 옵션이 있습니다.

첫 번째 (최고의) 하나가 어떤 다른 캐치되지 않는 예외를 포착하고 적절하게 처리 할 글로벌 오류 처리의 몇 가지 유형을 추가하는 것입니다. 이 행을 따라 코드 기반에 적절한 특정 예외 처리를 추가해야합니다. 스택 오버플로와 특정 보안 및 메모리 예외가 전역 처리를 불문하고 불어날 것이라는 점에 유의하십시오.

두 번째 옵션은 현재 응용 프로그램이 여전히 작동하는지 확인하기 위해 테스트하는 모니터링 서비스를하는 것입니다. 그렇지 않으면 기존 응용 프로그램을 강제 종료하고 새 인스턴스를 다시 시작합니다.

세 번째 옵션은 애플리케이션을 두 개의 앱으로 분리하는 것입니다. 다른 프로세스를 단순히 실행하는 외부 '컨테이너'유형의 앱입니다. 컨테이너 앱에는 UI가 없지만 주 프로세스를 시작하고이를 볼 것입니다 (위의 옵션 2와 매우 유사 함). 나는이 모듈이 다양한 "모듈 형"응용 프로그램에서 사용되는 것을 보았습니다. 하나는, 다른 하나는 실제로 UI와 다른 모든 일을 모니터링하기 :

는 요점은,이 작업을 수행 할 수있는 유일한 방법은이 응용 프로그램을하는 것입니다.

+4

글로벌 오류 '핸들러', 많은 오류를 처리 할 수 ​​없습니다 .. 그 정의에 폭포를 건설 즉, 응용 프로그램 상태가 여전히 유효한지 여부.) 진정한 충돌 (적절한 계층에서 처리 할 수 ​​없거나 처리 할 수 ​​없었던 예외)을 처리하기 위해 주 프로세스로 시작하고 중지하는 호스팅 프로세스 솔루션에 투표합니다. .NET에서는 완전히 별도의 프로세스가 필요하지 않고 호스트 된 응용 프로그램에 대해 별도의 AppDomain을 사용하여 완전히 완료 할 수 있습니다. –

0

트랜잭션을 지원하는 항목에 영구 상태를 둡니다. 예 : 데이터베이스 (sqlite) 또는 필요가 너무 복잡하지 않은 경우 copy on write를 사용하십시오 (새 파일에 변경 사항을 쓰고 성공한 경우에만 이전 파일을 버려야합니다)

이러한 제안은 매우 일반적입니다.

10

그것은 더 나은이 작업을 수행하지 일반적이며, 지속적으로 시작하고 즉시 사용자가 속수무책 대학살을보고 다시 충돌 과정에 대해 꽤 아무것도 없다. 하지만 총알 만 건네 줄 수 있습니다. 발에 총을 겨누는 것은 당신에게 달린 것입니다. 다음과 같은 코드가 필요합니다.

static void Main(string[] args) { 
     AppDomain.CurrentDomain.UnhandledException += ReportAndRestart; 
     // etc.. 
    } 

    static void ReportAndRestart(object sender, UnhandledExceptionEventArgs e) { 
     string info = e.ExceptionObject.ToString(); 
     // Log or display info 
     //... 
     // Let the user know you're restarting 
     //... 
     // And restart: 
     System.Diagnostics.Process.Start(
      System.Reflection.Assembly.GetEntryAssembly().Location, 
      string.Join(" ", Environment.GetCommandLineArgs())); 
     Environment.Exit(1); 
    } 
} 

명령 줄 인수에 대한 바로 가기를 사용했는지주의하십시오. 공백이 포함 된 파일의 경로가 포함되어있는 경우 따옴표로 묶어야합니다. 줄임표에 넣어야하는 코드에 바로 가기를 사용하지 마십시오.

+0

Windows 서비스에서 지속적으로 다시 시작하는 충돌 프로세스의 한 가지 해결 방법은 프로세스를 다시 시작하려고 시도하는 횟수 제한입니다. 이는 시작된 응용 프로그램을 모니터링하고 충돌에 대한 상태를 유지할 수있는 외부 '호스팅'프로세스가있을 때 가장 효과적입니다. 이것은 UI 기반 응용 프로그램보다 서비스에서 더 잘 작동하지만 적어도 서비스에서는 충돌 및 재시작이 대부분 사용자에게 투명합니다. –

+0

신청 상태를 회복하는 것은 어떻습니까? 각 단위는 응용 프로그램을 계속 사용하는 데 중요한 상태를 가질 수 있습니다. – Arijoon