2013-11-27 4 views
6

폴더를 설치 한 후 함수를 호출하려고하지만 InstallEnv 함수가 여러 번 호출되는 것 같습니다. 각 파일에 대해 확인해야 할 폴더 일 수 있습니다. 파일을 모두 설치 한 후에 한 번만 호출하는 방법이 있습니까? 리턴 코드를 잡는 데 오류가 있기 때문에 Run 섹션을 사용할 수 없습니다.Inno Setup AfterInstall 함수가 각 파일에 대해 호출되었습니다.

Source: "InputFiles\virtualenv-1.8.2\*"; DestDir: "{tmp}/virtualenv"; \ 
    Flags: recursesubdirs; AfterInstall: InstallEnv; 
+1

두 질문을 모두 보면서 [CurStepChanged'] (http://www.jrsoftware.org/ishelp/index.php?topic=scriptevents&anchor=CurStepChanged) 이벤트에서 필요한 것을 실행하고 싶지 않습니까? 'Curstep' 매개 변수가'ssPostInstall' 일 때 어떻게해야합니까? – TLama

+0

실제로 월요일에 시도했지만 실행이 0과 다른 코드를 반환하면 설치를 실패 (또는 중단)하려고합니다. 그러나'WizardForm.Close; '코드는'ssPostInstall'에서 작동하지 않습니다 (실제 설치 이후 일 수 있습니다). 내가 알기로, – Amaranth

+1

. 'InstallEnv' 과정의 어떤 것이 잘못되면 설치 과정을 중단하고 (변경 사항을 롤백하는) 방법을 찾고 있습니다. 글쎄, 필자는 어찌하여 예측할 수없는 느낌을 갖기 때문에 마지막으로 설치된 파일의 이름에 의존하지 않을 것이다. 또 다른 옵션은 다음에 설치된'[Files]'항목에 대한'BeforeInstall' 절차를 작성하는 것입니다. 또는'InstallEnv' 절차에 대한 통과 카운터를 만들고 전 처리기로 파일의 총 개수를 결정하십시오. 프로 시저가 호출 될 때마다 카운터를 증가시키고 그 상수 값에 도달하면 마지막 파일이됩니다. – TLama

답변

3

예, 각 파일마다 한 번씩 실행됩니다. reference은 (내게로 강조) 그것에 대해 말한다 :

BeforeInstall 또는 와일드 카드를 사용하여 [파일] 섹션의 항목 에 대한 AfterInstall 기능 가 와일드 카드와 일치하는 파일에 한 번이라고합니다. 함수가 호출되는 파일을 확인하려면 CurrentFileName을 사용하십시오.

아니요, 모든 파일을 설치 한 후에는 한 번 호출 할 방법이 없습니다. 함수를 이미 호출했음을 나타내는 플래그 변수를 선언 할 수 있지만 마지막 호출인지 여부를 감지하려면이 함수를 한 번만 실행하면 문제가되지 않습니다. 해결 방법은 없습니다.

글쎄, 아마도 그 파일에서 가장 최근에 설치 한 파일이 무엇인지 알고 있다면 CurrentFileName 함수 호출의 결과와 비교해 볼 수 있지만, 마지막으로 설치 될 파일을 결정할 수 있을지는 의문입니다. 컴파일 타임에는 (런타임에는 현재 설치된 파일의 목록을 얻을 수있는 방법이 없기 때문에).

5

단일 항목 내에서 해당 파일 그룹 설치가 끝날 때 호출 할 방법이 없습니다. 그러나 더미 항목을 이용하여 적절한 시간에 함수를 호출 할 수 있습니다 :

[Files] 
Source: "InputFiles\virtualenv-1.8.2\*"; DestDir: "{tmp}\virtualenv"; Flags: recursesubdirs 
Source: dummy.txt; DestDir: {tmp}; AfterInstall: InstallEnv 

Source 파일이 존재해야하지만, 0 바이트 파일이 될 수 있습니다. 설치는 {tmp}이므로 설치 후 삭제되므로 내용이 적절하지 않습니다.

[Files] 항목이 지정된 순서대로 설치 되었기 때문에 작동합니다.