2009-06-12 3 views
6

예외가 발생하여 호출 스택 위로 충분히 전파되면 응용 프로그램의 주 루프가 예외를 처리하고 대화 상자를 표시합니다. 그 행동은 Windows Vista에서 깨진 것 같습니다. 예외가 해당 수준에 도달하면 Vista는 XP에 들어가서 XP에서 완벽하게 계속 사용할 수있을 때 프로그램이 "작동을 멈췄다"고 말합니다. (그 이유는 메인 루프의 예외 처리기가 하늘에 있기 때문입니다.)Vista가 내 프로그램을 예외로 죽이지 않도록하려면 어떻게해야합니까?

이 문제를 해결할 방법이 있습니까? 가급적 내 컴퓨터 에서뿐만 아니라 내 코드 자체에서도 다른 시스템에서 작동하지 않을 것입니다.

+0

mmmm ... try..catch 블록을 사용하여 텍스트 파일에 NLog 또는 Log4Net을 사용하여 오류를 기록 하시겠습니까 ??? – Perpetualcoder

+0

Application.OnException 이벤트를 자신의 것으로 바꾸는 것은 그리 어려운 일이 아니며, 그 시점에서도 예외를 파일에 기록 할 수 있습니다. –

+0

그래,하지만 나는 개인적인 용도로 약간의 도구를 해킹 할 때마다이를 설정하지 않는 것을 선호한다. –

답변

11

System, JITEnable의 전역 변수가 0으로 설정되어 있는지 확인하십시오. 해당 변수가 1로 설정되어 있으면 하드웨어 (및 외부) 예외가 UnhandledExceptionFilter를 호출하여 해당 동작을 유발합니다. 2로 설정하면 예외가 발생합니다.

+0

감사합니다. 그게 효과가 있었어. –

+1

@Mason : 처음에는 JITEnable이 어떻게 설정 되었습니까? 나는 그것이 0으로 기본값이라고 생각했다. –

1

응용 프로그램 수준 예외 처리기 http://www.chami.com/tips/delphi/011497D.html을 추가해야합니다. 또한 이러한 예외가 발생하는 이유를 확인하기 위해 madexcept를 실행해야하므로 수정할 수 있습니다.

+1

+1 MadExcept. 놀라운 제품, 절대적으로 놀라운. –

0

불행히도 XP 에서조차 모든 예외가 잘 잡히지는 않았습니다. 적 응용 프로그램을 그냥 사라지고, 그냥 매달려과 pskill 필요가 있었나요? (일부 델파이 버전 누구?)
나는 애플 리케이션에 EurekaLog를 연결하고 어떤 일이 벌어 지는지에 대한 정보를 제공하는지 확인하려고합니다.

관련 문제