2017-09-04 4 views
3

Inno Setup 스크립팅을 처음 사용하며 아래 코드를 전제 조건으로 사용하여 .NET Framework 3.5를 설치하려고합니다. Check 함수가 여러 번 실행 중입니다. 왜 제가 이해를 도와 주실 수 있습니까?Inno Setup에서 'Check'기능이 여러 번 실행되고 있습니다.

참고 : 아래 코드의 다른 모든 섹션 (Setup, Icons 등)은 적절한 내용을 가지고 있습니다. Check parameter documentation을 인용

[Files] 
Source: "Frameworks\dotnetfx35setup.exe"; DestDir: {tmp}; Flags: deleteafterinstall; \ 
    BeforeInstall: Install35Framework; Check: Framework35IsNotInstalled 
[Code] 
function IsDotNetDetected(version: string; service: Cardinal): boolean; 
begin 
    Result := { ... }; 
end; 

function Framework35IsNotInstalled: Boolean; 
begin 
    if IsDotNetDetected('v3.5', 1) then 
    begin 
    MsgBox('Framework35IsNotInstalled: FALSE ', mbConfirmation, MB_YESNO); 
    Result := False; 
    end else begin 
    MsgBox('Framework35IsNotInstalled: TRUE ', mbConfirmation, MB_YESNO); 
    Result := True; 
    end; 
end; 

procedure Install35Framework; 
begin 
    { ... } 
end; 
+0

구글에서 로그 파일을 확인하시기 바랍니다 https://drive.google.com/open?id=0B83yra4zBsMBbm1GcVVQbzYwVWc – NSR

+0

I 드라이브 :


는이처럼 최적화 할 수 있습니다하지 그것을 있었 함수가 실행 된 횟수를 확인하는 메시지 상자가 추가되었습니다. 로그 파일에서 볼 수 있듯이 동일한 메시지 상자가 여러 번 표시됩니다. 이 코드에서 나에게 무엇이 잘못되었는지 알려주시겠습니까? – NSR

+0

죄송합니다. 질문을 편집 할 수있는 옵션을 찾을 수 없습니다. Check 메서드를 여러 번 실행 한 이유를 알려주십시오. – NSR

답변

1

:

설치 체크 함수를 사용하여 하나의 항목 만있을 경우에도, 각 검사 기능을 여러 번 호출 할 수 있습니다. 함수가 긴 코드를 수행하는 경우 코드를 한 번만 수행하고 결과를 전역 변수에 '캐싱'하여 코드를 최적화 할 수 있습니다.

동작은 설계대로입니다.

코드가 매우 간단하므로 최적화가 필요 없다고 생각합니다. 그것은 몇 번 실행하면 그것은 완벽하게 좋아.

var 
    Framework35IsNotInstalledCalled: Boolean; 
    Framework35IsNotInstalledResult: Boolean; 

function Framework35IsNotInstalled: Boolean; 
begin 
    if not Framework35IsNotInstalledCalled then 
    begin 
    Framework35IsNotInstalledResult := IsDotNetDetected('v3.5', 1); 
    Framework35IsNotInstalledCalled := True; 
    end; 

    Result := Framework35IsNotInstalledResult; 
end; 
+0

답변 해 주셔서 감사합니다. – NSR