2009-05-22 8 views
1

Inno 설치 프로그램을 사용하여 제품을 설치합니다. 설치 프로그램에서이 프로그램을 취소하거나 중단 한 경우 extern 프로그램 (Validator.exe)을 실행하고 자체 설치 프로그램을 취소해야합니다.Inno Setup을 사용하여 설치 프로그램을 취소하는 방법은 무엇입니까?

{app} 경로에 Validator.exe를 저장하고 실행합니다. Exec을 (ExpandConstant ('{응용 프로그램} /Validator.exe'), '', '', SW_SHOW, ewWaitUntilTerminated :

설치 프로그램은 내가 Validator.exe 파일을 호출 내가 가진 실행의 결과를 얻을 실행되고있는 경우 , ResultCode).

는하지만 내가 시도하는 모든 솔루션의 문제점은 다음과 같습니다

InitializeSetup :이 실행되지 않습니다 있도록 Validator.exe 파일은, {응용 프로그램}에서 복사 아직 없습니다.

중단 : (InitializeSetup, InitializeWizard, CurStepChanged (ssInstall))에서만 호출 할 수 있으므로 유효성 검사기가 아직 복사되지 않습니다.

DeinitializeSetup : 설치 후 Validator.exe를 실행할 수 있지만이 시점부터 설치 프로그램을 중단 할 수 없습니다.

Validator.exe가 복사되고 실행 된 후 설치를 취소하려면 몇 가지 방법이 필요합니다. 설치 제거를 호출 할 수는 있지만 그럴 수는 없습니다.

도움 주셔서 감사합니다.

답변

2

Inno 설치 프로그램에서 "외부"파일은 이 아니며 설치 관리자 EXE 파일에 포함되어 있습니다.입니다. 외부 적으로 존재하며 아마도 설치 프로그램 EXE 파일과 별도의 파일로 포함됩니다. AbortInitializeSetup 이벤트 내에서 호출하지 않는 이유는 유효성 검사 프로그램이 {app} 디렉토리에 아직 복사되지 않았기 때문입니다. 그 시점에서 사용자는 설치 대상을 지정하지 않았기 때문에 이해할 수 있습니다. 그러나 유효성 검사기가 대상 디렉터리에 있어야 할 필요는 없습니다. 이미 외부 파일이므로 이미있는 디렉토리에서 실행하십시오.

또 다른 가능성은 필요한 검증 기능을 DLL에 넣는 것입니다. DLL을 인스톨러에 포함시킬 수 있으며 Inno Setup은 설치 스크립트에서 함수를 호출 할 수 있도록 임시 위치에 DLL을 추출합니다.

2

고맙습니다. 훌륭하게 작동합니다. 이것이 내가 고친 방법입니다 :

function InitializeSetup(): Boolean;. 
var 
    ResultCode : Integer; 
begin 
    Result := True; 
    ExtractTemporaryFile('Validator.exe'); 

    if Exec(ExpandConstant('{tmp}\Validator.exe'), '', '', SW_SHOW, 
    ewWaitUntilTerminated, ResultCode) 
    then begin 
    if not (ResultCode = 0) then begin 
     Result := false; 
    end; 
    end; 
end;