簡體   English   中英

Inno Setup - 一次安裝中的多個軟件版本

[英]Inno Setup - Multiple software versions in one installation

我需要使用多個版本的軟件進行設置,並且我想讓它具有可移植/安裝的選項。

我有一個定制的組件頁面。 它應該顯示在信息頁面之后,然后在選擇選項后應該顯示目錄選擇頁面。 我想我已經弄清楚了[Files][Tasks][Components]部分。 這主要是我正在努力解決的代碼部分。

例如,如果用戶使用單選按鈕選擇安裝Pro版本,則單擊Next 后應顯示目錄選擇頁面,然后在繼續后應安裝或解壓縮(取決於便攜式或安裝選擇)。 安裝程序應根據標記為Pro 的指定文件(在[Files][Components]部分)安裝/提取指定版本。

我已經嘗試了很多代碼變體,但我當前的變體在下面並且它不起作用(忽略SelectedValueIndex數字,我還沒有輸入正確的值,但我想確保它首先編譯)。 我有靜音開關的代碼,我也必須鏈接到單選按鈕,但我認為那部分會起作用。 它實際上只是試圖讓選擇(單選按鈕和復選框)起作用。 此外,如果您為其中一個版本 ID 選擇安裝,例如便攜式選項的組框將變灰(不可選擇),反之亦然。 目前我無法讓單選按鈕具有任何值,它們什么都不做。

更簡單的解釋:假設有兩個版本的應用程序FreePro 安裝的文件取決於用戶是選擇Free還是Pro (分別在 [Files] 和 [Components] 部分設置)。

procedure InitializeWizard();
var  SystemMenu: HMENU;
begin
 {Create Mode Selection Page}
    UsagePage := CreateInputOptionPage(wpInfoBefore,
   'Mode', 'Select Installation Mode',
    'Mode',
   True, False);
    UsagePage.Add('FreeInstall');
    UsagePage.Add('BusinessInstall');
    UsagePage.Add('TechnicianInstall');
    UsagePage.Add('ProfessionalInstall');
    UsagePage.Add('FreePortable');
    UsagePage.Add('BusinessPortable');
    UsagePage.Add('TechnicianPortable');
    UsagePage.Add('ProfessionalPortable');
    //
    {Set Default Checkbox - Normal Install}
    if (FreeInstall)
    then
        UsagePage.SelectedValueIndex := 1
    else
        UsagePage.SelectedValueIndex := 0;

    if (BusinessInstall)
  then
        // Set the Respective Checkbox on The Wizard.
        UsagePage.SelectedValueIndex := 1
    else
        UsagePage.SelectedValueIndex := 0;

    if (TechnicianInstall)
    then
        // Set the Respective Checkbox on The Wizard.
        UsagePage.SelectedValueIndex := 1
    else
        UsagePage.SelectedValueIndex := 0;

   if (ProfessionalInstall)
    then
        // Set the Respective Checkbox on The Wizard.
        UsagePage.SelectedValueIndex := 1
    else
        UsagePage.SelectedValueIndex := 0;
        
    {Set Default Checkbox - Portable}
    if (FreePortable)
    then
        UsagePage.SelectedValueIndex := 1
    else
        UsagePage.SelectedValueIndex := 0;

    if (BusinessPortable)
    then
        // Set the Respective Checkbox on The Wizard.
        UsagePage.SelectedValueIndex := 1
    else
        UsagePage.SelectedValueIndex := 0;

    if (TechnicianPortable)
    then
        // Set the Respective Checkbox on The Wizard.
        UsagePage.SelectedValueIndex := 1
    else
        UsagePage.SelectedValueIndex := 0;

   if (ProfessionalPortable)
    then
        // Set the Respective Checkbox on The Wizard.
        UsagePage.SelectedValueIndex := 1
    else
        UsagePage.SelectedValueIndex := 0;
    WizardForm.Caption := '{#MyAppName} v{#MyAppVersion}';
      TotalSpace;
    WizardForm.DiskSpaceLabel.Hide;

它不會像這樣編譯

使用Check參數[Files]部分條目綁定到所選的自定義頁面:

[Files]
Source: "MyProgFree.exe"; DestDir: "{app}"; Check: IsModeSelected(0)
Source: "MyProgPro.exe"; DestDir: "{app}"; Check: IsModeSelected(1)

[Code]

var
  UsagePage: TInputOptionWizardPage;

function IsModeSelected(Mode: Integer): Boolean;
begin
  Result := (UsagePage.SelectedValueIndex = Mode);
end;

procedure InitializeWizard();
begin
  UsagePage :=
    CreateInputOptionPage(
      wpInfoBefore, 'Mode', 'Select Installation Mode', 'Mode', True, False);
  UsagePage.Add('FreeInstall');
  UsagePage.Add('ProInstall');
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM