2017-01-09 2 views
1

사용자 선택에 따라 특정 재배포 도구를 관리하기 위해 사용자 지정 페이지를 만들었습니다.Inno 설치 : ExtractTemporaryFile이 마법사 동결 발생

해당 도구는 사용자가 도구를 설치하거나 설치하지 않으려는 경우 해당 도구와 연결됩니다. 그런 다음 페이지를 방문하여 사용자에게 각 도구의 설치 진행 상황을 보여줍니다.

여기에있는 문제는 도구의 설정 중 첫 번째 ExtractTemporaryFile이 완료되고 진행률 페이지가 고정 된 것처럼 마지막 페이지를 보여주는 경우에만 진행률 페이지가 표시된다는 것입니다.

ExtractTemporaryFile이 발생하기 전에 진행률 페이지를 표시해야하는 유일한 방법은 설치 기능을 수행하기 전에 MsgBox를 넣는 것입니다. 그러나 ExtractTemporaryFile이 완료 될 때까지 심지어이 경우, ExtractTemporaryFile을 시작할 때, ProgressBar의 애니메이션 동결 ... 여기

이 일을 코드의 일부입니다

procedure CurPageChanged(CurPageID: Integer); 
begin 
    If CurPageID=PageInstallationPersonnalisee.ID then 
    begin 
     ProgressBarLabelPageInstPerso.Caption := 'Initialisation...'; 
     if InstallTool1 = True then 
     begin 
      ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool1...'; 
      F_InstallTool1(); 
     end; 
     if InstallTool2 = True then 
     begin 
      ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool2...'; 
      F_InstallTool2(); 
     end; 
     if InstallTool3 = True then 
     begin 
      ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool3...'; 
      F_InstallTool3(); 
     end; 

     ProgressBarPageInstPerso.Style := npbstMarquee; 
     //ProgressBarPageInstPerso.Style := npbstNormal; 
     ProgressBarPageInstPerso.Position := 100; 

     CancelWithoutPrompt:=True; 
     WizardForm.Close; 
    end; 
end; 

주를이ExtractTemporaryFile()은 각 F_InstallTooln() 함수에서 만들어집니다.

기타 도움이 될 수 설정 및 파일 섹션의 일부 : 첫째 ExtractTemporaryFile이 완료 될 때까지

다음
[Setup] 
SolidCompression=no 

[Files] 
;Temporary redists 
Source: "{#MyRessourcesPath}InstallTool1_Setup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall noencryption dontcopy 
Source: "{#MyRessourcesPath}InstallTool2_Setup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall noencryption dontcopy 
Source: "{#MyRessourcesPath}InstallTool3_Setup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall noencryption dontcopy 

, 페이지 PageInstallationPersonnalisee 내가 알고 있어요 ...

을 표시되지 않습니다 그 ExtractTemporaryFile설치 프로세스에 약간의 지연이 발생할 수 있지만 왜 마법사가 정지해야합니까?

제 질문은 : 내 시나리오에서 마법사를 강제로 새로 고쳐서 어떤 사람보다 먼저 나타낼 수있는 방법이 있습니까 ExtractTemporaryFile 절차가 시작 되었습니까?

+0

임시 폴더에 압축 해제 된 파일에는 'nocompression' 플래그를 사용하는 것이 가장 좋습니다.'[Files]'절의 맨 처음에 그들을 두는 것이 좋습니다. 그것은 또한 파일의 크기에 따라 다릅니다. – RobeN

+0

안녕하세요. 나는 압축 매개 변수를 추가하지 않았으며 파일은 이미 파일 섹션의 시작 부분에있었습니다. 그러나 ExtractTemporaryFile 절차가 완료 될 때까지 나는 여전히 얼어 붙습니다. – BenDev

+0

파일의 크기는 얼마나됩니까? –

답변

0

ExtractTemporaryFile은 실제로 마법사 양식을 중단시킵니다. 대부분의 코드가 그렇듯이.

강제로 Windows 메시지 큐를 펌핑 할 수있는 유일한 사용자 지정 페이지는 TOutputProgressWizardPage (CreateOutputProgressPage으로 생성)입니다.

당신은 같은 것을 할 수 있습니다

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    ProgressPage: TOutputProgressWizardPage; 
begin 
    if CurPageID = wpReady then 
    begin 
    ProgressPage := CreateOutputProgressPage('Preparing installations', ''); 
    ProgressPage.Show; 
    try 
     ProgressPage.Msg1Label.Caption := 'Installing 1 ...'; 
     ProgressPage.SetProgress(0, 100); 
     ExtractTemporaryFile('1.exe'); 
     Exec(...); 

     ProgressPage.Msg1Label.Caption := 'Installing 2 ...'; 
     ProgressPage.SetProgress(33, 100); 
     ExtractTemporaryFile('2.exe'); 
     Exec(...); 

     ProgressPage.Msg1Label.Caption := 'Installing 3 ...'; 
     ProgressPage.SetProgress(66, 100); 
     ExtractTemporaryFile('3.exe'); 
     Exec(...); 

     ProgressPage.SetProgress(100, 100); 
     ProgressPage.Hide; 
    finally 
    end; 
    end; 
    Result := True; 
end; 

을 당신이 자주 SetProgress를 호출 할 수없는 경우, 애니메이션, 공상 진행 막대가 윈도우의 현대 버전에 정말 잘 중 하나가 작동하지 않지만. SetProgress 호출은 메시지 대기열을 뒤에서 펌핑하는 것입니다. 따라서 매개 변수가 변경되지 않은 경우에도 호출하는 것이 좋습니다. 그러나 ExtractTemporaryFile 블럭처럼 할 수는 없습니다.


또는, [Files] 섹션에 배치를두고 설치가 AfterInstall event에서 실행될 수 있습니다.

[Files] 
;Temporary redists 
Source: "{#MyRessourcesPath}InstallTool1_Setup.exe"; DestDir: "{tmp}"; \ 
    Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install1 
Source: "{#MyRessourcesPath}InstallTool2_Setup.exe"; DestDir: "{tmp}"; \ 
    Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install2 
Source: "{#MyRessourcesPath}InstallTool3_Setup.exe"; DestDir: "{tmp}"; \ 
    Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install3 
+0

고마워, 그것은 CreateOutputProgressPage()와 잘 작동합니다. ProgressPage.Show는 실제로 ExtractTemporaryFile 앞에 페이지를 표시합니다. ExtractTemporaryFile이 시작되기 전에 ExtractTemporaryFile 프로세스가 초기화되기 전에 CreateCustomPage가 표시되지 않는 이유는 아직도 궁금합니다 ... 기본 설치 후 설치되는 툴을 관리하는 것과 관련하여 alternativ 솔루션은 저에게 효과적이지 않지만 그 툴 전체 설치를 수행하지는 않지만 설치되는 즉시 WizardForm.Close를 강제 실행하는 설치 프로그램 시나리오의 측면 부분에 있습니다. – BenDev

+0

대체 솔루션 : 여전히 ['Check' 매개 변수] (http://www.jrsoftware.org/ishelp/index.php?topic=scriptcheck)를 사용하여 수행 할 수 있습니다. –

+0

확인 매개 변수가 실제로 일치하지 않습니다. 왜냐하면이 시나리오에서는 기본 설치 및 기본 설치가 자발적으로 수행되지 않기 전에 해당 도구가 독립적 인 파일로 설치되기 때문입니다 ... 그러나 내 문제는 진행 상태 페이지가 표시되지 않고 현재 해결 된 것입니다.) – BenDev