默認情況下,在組件頁面上,Inno Setup會將所有文件的大小添加到所選組件的大小(顯示在頁面底部)。Inno Setup - 按組件定義磁盤空間
現在,我特別需要Inno Setup來精確地滿足當前組件的尺寸要求。我怎樣才能做到這一點?
新代碼:
[Setup]
AppName=Dagon Video Tools
AppVersion=1.0
AppVerName=Dagon Video Tools
DefaultDirName={sd}\Tools\Dagon Video Tools
VersionInfoProductName=Dagon Video Tools
WizardImageFile=Include\WizardImage.bmp
WizardSmallImageFile=Include\WizardSmallImage.bmp
SetupIconFile=Include\Icon.ico
[Files]
.....
[ThirdParty]
UseRelativePaths=True
[Components]
Name: "Slasher"; Description: "Dagon Slasher"; Types: Slasher Full
Name: "Frankenstein"; Description: "Dagon Frankenstein"; Types: Frankenstein Full
[Types]
Name: "Full"; Description: "Full"
Name: "Slasher"; Description: "Dagon Slasher"
Name: "Frankenstein"; Description: "Dagon FrankenStein"
[Icons]
Name: "{group}\{cm:UninstallProgram,Dagon Slasher}"; Filename: "{uninstallexe}"; Components: Slasher
Name: "{group}\{cm:UninstallProgram,Dagon Frankenstein}"; Filename: "{uninstallexe}"; Components: Frankenstein
Name: "{group}\{cm:UninstallProgram,Dagon Video Tools}"; Filename: "{uninstallexe}"; Components: Slasher and Frankenstein
[Code]
procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID=wpSelectProgramGroup) then
begin
if IsComponentSelected('Slasher') then
begin
WizardForm.DirEdit.Text := ExpandConstant('{sd}\Tools\Dagon Slasher');
WizardForm.GroupEdit.Text := 'Dagon Slasher';
end;
if IsComponentSelected('Frankenstein') then
begin
WizardForm.DirEdit.Text := ExpandConstant('{sd}\Tools\Dagon FrankenStein');
WizardForm.GroupEdit.Text := 'Dagon FrankenStein';
end;
if IsComponentSelected('Slasher') and IsComponentSelected('Frankenstein') then
begin
WizardForm.GroupEdit.Text := 'Dagon Video Tools';
end
end;
End;
procedure OnTypeChange(Sender: TObject);
begin
// set the item index in hidden TypesCombo
WizardForm.TypesCombo.ItemIndex := TNewCheckListBox(Sender).ItemIndex;
// notify TypesCombo about the selection change
WizardForm.TypesCombo.OnChange(nil);
end;
procedure InitializeWizard;
var
I: Integer;
CheckListBox: TNewCheckListBox;
begin
// create the TNewCheckListBox object and set the basic properties
CheckListBox := TNewCheckListBox.Create(WizardForm);
CheckListBox.Parent := WizardForm.SelectComponentsPage;
CheckListBox.Left := WizardForm.TypesCombo.Left;
CheckListBox.Top := WizardForm.TypesCombo.Top;
CheckListBox.Width := WizardForm.TypesCombo.Width;
CheckListBox.Height := CheckListBox.MinItemHeight *
WizardForm.TypesCombo.Items.Count + 4;
CheckListBox.TabOrder := 0;
// assign the selection change event
CheckListBox.OnClickCheck := @OnTypeChange;
// add radio buttons from all TypesCombo items, select the first item
for I := 0 to WizardForm.TypesCombo.Items.Count - 1 do
CheckListBox.AddRadioButton(WizardForm.TypesCombo.Items[I],
'', 0, I = 0, True, nil);
// hide the TypesCombo combo box
WizardForm.TypesCombo.Visible := False;
WizardForm.ComponentsList.Visible := False;
WizardForm.ComponentsDiskSpaceLabel.Visible := True;
end;
發佈完整的代碼,因爲你可以看到,我的代碼更改{app}
和{group}
取決於組件。我現在得去上班了,所以我會在下半天離線。此代碼似乎顯示正確的文件大小,我正在去附加組件選擇的一些其他功能,所以,如果這個工程,我將不得不張貼另一個問題。回到〜8小時。
OK,我定義了每個組件的大小('ExtraDiskSpaceRequired'),但對於Inno而言,它是額外空間,因此,當顯示所需的磁盤空間時,Inno實際顯示組件內大小+所有文件的大小。我需要Inno忽略它裏面的文件的大小,並且需要與當前組件一樣多的磁盤空間。 –
那麼,爲什麼不只是將'ExtraDiskSpaceRequired'設置爲字節數來將文件的大小填充到所需的大小呢?那麼,實際上這就是參數的用途。 –
好的,這是一個2部分的程序。安裝程序應只允許安裝一個程序,或者另一個程序或「完整軟件包」。因此,其中2個組件的大小比所有文件都小。而「全包」已經是整個尺寸。顯然,選擇「Full Pack」會顯示所需磁盤空間的兩倍。因此,沒有任何組件的尺寸「高於」任何東西,它應該下降。 –