2011-12-14 10 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

あなたは、各[Run]エントリのBeforeInstallおよび/または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反する:

常に内部で隠すコールを置きますCodeDlg.issに示すように、try..finally言語構造の一部になります。 Hideを呼び出さないと、ウィザードが進捗ページに永続的に表示されなくなります。

しかし、これを行わないと、[run]セクションに項目間の進捗を実装する方法を理解できませんでした。

+0

あなたのコードが実際に新しい進行状況ページを作成することを説明する必要があるかもしれません。標準の「インストール中」ページでプログレスバーを操作する代わりに、何を求めているのですか? –

関連する問題