2014-11-23 3 views
2

이 코드에서 LoadVCLStyle_UnInstall 함수를 호출 할 때 uninstall.vsf 파일이 없으면 msgbox를 무시할 수 있습니까? 오류 처리 오류 메시지를 무시 하시겠습니까?

나는를 제외하고 빈 시도 블록을 사용하여 다른 언어로 충분히 될 것이라고 생각하지만 이것은 사실이 아니다.

// Import the LoadVCLStyle function from VclStylesInno.DLL 
procedure LoadVCLStyle_UnInstall(VClStyleFile: String); external '[email protected]{app}\uninstall.dll stdcall uninstallonly'; 

//E: Occurs when the uninstaller initializes. 
function InitializeUninstall: Boolean; 
begin 

    Result := True; 

    // Initialize the VCL skin style. 
    try 
    LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf')); 
    except 
    finally 
    end; 

end; 

enter image description here

+1

표시되는 내용은 예외는 아니지만 [by shown by] 메시지 상자 (https://code.google.com/p/vcl-styles-plugins/source/browse/trunk/InnoSetup%20plugin/)입니다. VclStylesInno.dpr # 61) 예외가 발생하면 플러그인. 이 경우에는 스킨을로드하기 전에'FileExists'가 있는지 확인하여 문제를 해결할 수 있습니다. 다른 예외가 있으면 운이별로 없어요. DLL은 예외를 발생 시켜서는 안되지만 IMHO가 발생하면 대화 상자를 표시해서는 안됩니다. 시스템과 같은'GetLastError'가 더 좋을 것입니다. – TLama

답변

0

사전에 이미 언급 된 파일의 존재를 확인 할 수있는 가능성.

사용자 TLama는 질문의 코드가 정규 파스칼 프로그램 코드가 아니라 Inno Setup 스크립트 코드이며이 경우에는 내 대답이 적용되지 않는다고 언급했습니다. 다음 텍스트가 파스칼 프로그래머에게 중요 할 수 있으므로 우리는 그것을 유지합니다.

진술 자체 만 예외를 처리하지 않으며, 오류가 발생한 후에 프로그램 실행을 계속해야하는 지점 만 표시합니다. 예외가 EXCEPT ... END 블록에서 처리/포착되지 않으면 다음 상위 EXCEPT 문으로 전송됩니다. (Freepacal 참조 가이드 장 17)

나는 또한 TRY ... EXCEPT ... FINALLY ... END가 작동하지 않을 것이라고 생각하지. EXCEPT 또는 FINALLY 중 하나만 사용하십시오.

당신은 같은 것을 수행해야합니다 예외 캡처 할 경우이 오류에 대한 예외 클래스는 문서에 정의되지 않은 경우

TRY 
    LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf')); 
EXCEPT 
    On EWhateverException DO ...; 
END; 

을, 당신은 예외 클래스를 찾기 위해 다음과 같은 트릭을 사용할 수 있습니다 이름 : ON Exception DO ..

TRY 
    LoadVCLStyle_UnInstall(ExpandConstant('{app}\uninstall.vsf')); 
EXCEPT 
    ON Exception DO WriteLn(ExceptObject.ClassName); 
END; 

당신은 어떤 예외를 잡을 수 있습니다,하지만 난 명확한 프로그램이 변형을 사용 권 해드립니다하지 않습니다.

+1

잘못되었습니다. 당신은 아마도'on E : ExceptionClass do'와 같은 구조를 생각하고있었습니다.'E'는'except' 블록에서 예외 객체를 얻는 변수입니다. 글쎄, 이것들은 Inno Setup Pascal Script에서 작동하지 않습니다. 또한, 그 플러그인 (그냥 메시지 상자를 보여주는 문제가 해결되지 않습니다, 그것은 설정에서 제기 예외가 아니에요). – TLama

+0

@TLama - 그렇다면 왜 TRY ... 제외하고 지원됩니까? – Kitana

+2

예외 클래스 나'on' 구조체가 지원되지 않는다고해서'try..except' 블록을 갖는 것이 의미가 없다는 것을 의미하지는 않습니다. 'except' 블록에있는 특정 예외 클래스를 걸러 낼 필요가 없습니다 (선택적입니다). 마지막으로, OP 스크립트의 예외 처리는 질문에 표시된 메시지 상자와 아무 관련이 없습니다. 이 질문에 대한 대답은 그 안에 예외가 발생하면 해당 플러그인이 메시지 상자를 표시한다는 것입니다. 'try..except' 블록이 표시되지 않게합니다. 그 플러그인에 하드 코딩되어 있습니다. – TLama