2011-12-14 3 views
4

이이 질문에 유사합니다 Inno Setup Simple progress page for Run sectionInno Setup 설치 스크립트의 [Run] 섹션에서 진행률 막대 값을 설정하는 방법은 무엇입니까?

Inno Setup 스크립트에 일부 MSI 파일을 추가 해요 경우, 나는 [Run] 섹션에서 이러한 파일을 설치할 수 있습니다. 이때 진행률 표시 줄에 100 %가 표시되고 진행률 막대 위에 StatusMsg이 표시됩니다.

[Run] 섹션의 진행률 막대 값을 수동으로 설정하려면 50 %의 값을 지정해야합니다. 이 같은 유사

:

[Run] 
Filename: msiexec.exe; Parameters: "/i ""{#MyRtePath}\runtime.msi"" /qn /norestart"; \ 
    StatusMsg: Installing Runtime Engine; WizardForm.ProgressGauge.progress: 50 ; 
+0

[Inno Setup : 실행 섹션에서 진행률 막대를 조작하는 방법?] (http://stackoverflow.com/questions/34336466/inno-setup-how-to-manipulate-progress-bar-on-run)의 가능한 복제본 -section) –

답변

2

당신은 BeforeInstall 및/또는 각 [Run] 항목에 대한 AfterInstall 핸들러에서 호출에 의해, 당신이에 연결된 질문에 유사한 코드를 사용할 수 있습니다. Inno 자체는 파일 섹션에서 100 %까지 실행되므로 코드를 0 %에서 다시 시작하거나 사용자 정의 위치 지정을 사용하기 위해 모든 항목을 조정해야합니다.

+0

답변 해 주셔서 감사합니다. 나는 당신이 전달하려고하는 것을 이해할 수 없다. 샘플 코드를 제공 할 수 있습니까 ..? – SamuelJames84

+0

아니요, 도움말 파일 이상입니다. 간단히 말하면, 진행률 표시 줄은 0에서 100 %로 이동 한 다음'[Run]'항목이 처리되어'AfterInstall' 매개 변수에서 코드를 호출하여 각 항목에 대해 0 % 및 증가분에서 다시 시작해야합니다. – Deanna

1

응답이 늦었지 만 답변을 찾는 다른 사용자를 위해 만든 코드 예입니다.

위의 [Setup] 섹션에서 나중에 사용하기 위해 AppName이라는 상수를 정의해야 할 수도 있으며,이를 사용하여 Setup AppName 변수를 설정할 수도 있습니다.

#define AppName "Test Installer" 
[Setup] 
AppName={#AppName} 

이제 [code] 섹션에 다음을 추가해야합니다.

[Code] 
var 
InstallWithProgressPage : TOutputProgressWizardPage; 

//Create custom progress bar for install progress 
procedure InitializeWizard; 
var 
    UpdatedPageString: AnsiString; 
    OriginalPageString: String; 
begin 
    //The string msgWizardPreparing has the macro '[name]' inside that we have to replace. 
    OriginalPageString := SetupMessage(msgPreparingDesc); 
    StringChange(OriginalPageString, '[name]', '{#AppName}'); 
    UpdatedPageString := OriginalPageString; 
    InstallWithProgressPage := CreateOutputProgressPage(SetupMessage(msgWizardPreparing), UpdatedPageString); 
end; 

//Enable or Disable the install progress page (also set initial progress/text) 
procedure DisplayInstallProgress(showPage:Boolean; progressText:String); 
begin 
    if(showPage = True) then 
     begin 
     InstallWithProgressPage.Show; 
     InstallWithProgressPage.SetText(progressText, ''); 
     InstallWithProgressPage.SetProgress(0,100); 
     end 
    else 
     begin 
     InstallWithProgressPage.Hide; 
     end 
end; 

//Update the install progress page 
procedure UpdateInstallProgress(progressText:String; progressPercent:Integer); 
begin 
    InstallWithProgressPage.SetProgress(progressPercent,100); 
    InstallWithProgressPage.SetText(progressText, ''); 
end; 

이제 아래처럼 BeforeInstall 및 AfterInstall 매개 변수를 사용하여 [Run] 섹션에서 DisplayInstallProgress 및 UpdateInstallProgress 프로 시저를 호출 할 수 있습니다.

[Run] 
FileName: "Powershell.exe"; Parameters: "-File {app}\Part1.ps1"; BeforeInstall: DisplayInstallProgress(True, 'Installing part 1.'); 
FileName: "Powershell.exe"; Parameters: "-File {app}\Part2.ps1"; BeforeInstall: UpdateInstallProgress('Installing part 2.', 30); 
FileName: "Powershell.exe"; Parameters: "-File {app}\Part3.ps1"; BeforeInstall: UpdateInstallProgress('Installing part 3.', 60); 
FileName: "Powershell.exe"; Parameters: "-File {app}\Part3.ps1"; BeforeInstall: UpdateInstallProgress('Installing part 4.',90); AfterInstall: DisplayInstallProgress(False, ''); 

내가 진행 페이지를 만들기위한 템플릿으로 질문/대답을 사용했다 : How to show progress during “PrepareToInstall”?

최종 메모를,이 구현은 jrsoftware's advice에 반하는 :

항상 내부 숨기기 통화를 보류 마침내 try..finally 언어 구조의 일부로, CodeDlg.iss에 나와 있습니다. 숨기기를 호출하지 않으면 마법사가 진행률 페이지에 영구히 멈추게됩니다.

그러나이 작업을 수행하지 않으면 [run] 섹션의 항목 간 진행을 구현하는 방법을 알 수 없습니다.

+0

아마도 코드가 실제로 새로운 진행률 페이지를 생성한다는 것을 설명해야합니다. 표준 "설치"페이지에서 진행률 막대를 조작하는 대신 질문에 대한 질문. –