응답이 늦었지 만 답변을 찾는 다른 사용자를 위해 만든 코드 예입니다.
위의 [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]
섹션의 항목 간 진행을 구현하는 방법을 알 수 없습니다.
[Inno Setup : 실행 섹션에서 진행률 막대를 조작하는 방법?] (http://stackoverflow.com/questions/34336466/inno-setup-how-to-manipulate-progress-bar-on-run)의 가능한 복제본 -section) –