[英]Inno Setup - Multiple software versions in one installation
我需要使用多個版本的軟件進行設置,並且我想讓它具有可移植/安裝的選項。
我有一個定制的組件頁面。 它應該顯示在信息頁面之后,然后在選擇選項后應該顯示目錄選擇頁面。 我想我已經弄清楚了[Files]
和[Tasks]
和[Components]
部分。 這主要是我正在努力解決的代碼部分。
例如,如果用戶使用單選按鈕選擇安裝Pro版本,則單擊Next 后應顯示目錄選擇頁面,然后在繼續后應安裝或解壓縮(取決於便攜式或安裝選擇)。 安裝程序應根據標記為Pro 的指定文件(在[Files]
和[Components]
部分)安裝/提取指定版本。
我已經嘗試了很多代碼變體,但我當前的變體在下面並且它不起作用(忽略SelectedValueIndex
數字,我還沒有輸入正確的值,但我想確保它首先編譯)。 我有靜音開關的代碼,我也必須鏈接到單選按鈕,但我認為那部分會起作用。 它實際上只是試圖讓選擇(單選按鈕和復選框)起作用。 此外,如果您為其中一個版本 ID 選擇安裝,例如便攜式選項的組框將變灰(不可選擇),反之亦然。 目前我無法讓單選按鈕具有任何值,它們什么都不做。
更簡單的解釋:假設有兩個版本的應用程序Free和Pro 。 安裝的文件取決於用戶是選擇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.