2011-12-14 3 views
4

Это похоже на этот вопрос: Inno Setup Simple progress page for Run sectionКак установить значение индикатора выполнения в разделе [Выполнить] установочного скрипта Inno Setup?

Если я добавляю некоторые файлы MSI на мой Inno Setup сценарий, я могу установить эти файлы из раздела [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 -секция) –

ответ

2

Вы можете использовать подобный код на вопрос вы связаны, вызвав ее из BeforeInstall и/или AfterInstall обработчика для каждого [Run] записи. Обратите внимание, что сам Inno будет работать до 100% в разделе файлов, поэтому вам нужно будет снова начать с 0% или отрегулировать КАЖДУЮ запись, чтобы использовать настраиваемое позиционирование.

+0

Спасибо за ваш ответ. Я не могу понять, что вы пытаетесь передать. Можете ли вы предоставить пример кода ..? – SamuelJames84

+0

Нет, я не могу, кроме файла справки. Проще говоря, индикатор выполнения переходит от 0 до 100%, затем записи '[Run]' обрабатываются, поэтому он должен начинаться с 0% и приращения для каждой записи, вызывая код из параметра 'AfterInstall'. – Deanna

1

Поздний отклик, но вот какой-то пример кода, который я сделал для всех, кто ищет ответ.

В разделе [Setup] вы должны указать константу с именем AppName для использования позже, вы также можете использовать ее для установки переменной App Appame.

#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; 

Теперь вы можете вызвать процедуры DisplayInstallProgress и UpdateInstallProgress в разделе [Run] с использованием BeforeInstall и AfterInstall параметров, как показано ниже.

[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

Возможно, вам стоит объяснить, что ваш код фактически создает новую страницу прогресса. Вместо того, чтобы манипулировать индикатором выполнения на стандартной странице «Установка», что задал вопрос. –