Inno setup Inno设置-按组件定义磁盘空间
默认情况下,在components(组件)页面上,Inno Setup会将其中所有文件的大小添加到所选组件的大小中(显示在页面底部) 现在,我特别需要Inno设置所需的量与当前组件的大小完全相同。我怎样才能做到这一点 新代码:Inno setup Inno设置-按组件定义磁盘空间,inno-setup,pascalscript,Inno Setup,Pascalscript,默认情况下,在components(组件)页面上,Inno Setup会将其中所有文件的大小添加到所选组件的大小中(显示在页面底部) 现在,我特别需要Inno设置所需的量与当前组件的大小完全相同。我怎样才能做到这一点 新代码: [Setup] AppName=Dagon Video Tools AppVersion=1.0 AppVerName=Dagon Video Tools DefaultDirName={sd}\Tools\Dagon Video Tools VersionInfoPro
[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小时后回来。您使用的安装组件不正确。您的“完整包装”组件不是组件。它是两个组件的组合(“第1部分”+“第2部分”)。因此,内置的Inno设置逻辑与安装程序不匹配,现在您要问如何解决这个问题。不要试图解决这个问题,请正确使用Inno安装程序
您需要的是两个组件:
- 第一部分
- 第二部分
- 完整包(安装“第1部分”和“第2部分”组件)
- 第1部分(仅安装“第1部分”组件)
- 第2部分(仅安装“第2部分”组件)
如果您使用组件而不是类型,因为您更喜欢“单选按钮”选择而不是组合框(下拉菜单),请参阅 这样,您可以获得与屏幕截图相同的GUI,但工作正常 在您的情况下,显示组件列表可能根本没有意义。确保没有类型具有隐藏组件列表的
iscustom
标志,并确保它选择了正确的组件(iscustom
类型不选择其组件)
如果仍要显示尺寸标签,请显式显示:
procedure InitializeWizard();
开始
WizardForm.ComponentDiskSpaceLabel.Visible:=True;
结束;
如果要显示没有自定义类型的组件列表,请执行以下操作:
procedure InitializeWizard();
开始
WizardForm.ComponentsList.Visible:=True;
WizardForm.ComponentDiskSpaceLabel.Visible:=True;
结束;
OK,我定义了每个组件的大小(ExtraDiskSpaceRequired
),但对于Inno来说,它是额外的空间,因此,当显示所需的磁盘空间时,Inno实际上显示了打包在组件内的所有文件的大小+组件的大小。我需要Inno忽略其中文件的大小,并需要与当前组件一样多的磁盘空间。因此,为什么不将ExtraDiskSpaceRequired
设置为字节数,以将文件大小增加到所需的大小?实际上,这就是参数的作用。好的,问题是它是一个由两部分组成的程序。安装程序应只允许安装一个程序、另一个程序或“完整包”。因此,其中2个组件的大小小于所有文件。而“全套”已经是全部尺寸了。显然,选择“完整包”会显示所需磁盘空间的两倍。因此,任何组件的大小都不会“加满”,应该降低。它是一个组件,但所有三个组件都是独占的,仍然没有显示正确的文件大小。。。在这种情况下,我可以禁用磁盘空间需求吗?虽然,这仍然不理想。从使用Inno的第一天起,我就远离那些可怕的类型。“完整”类型不显示组合文件大小,如果我切换到其他类型,然后返回“完整”…是的,对不起。我要去上班了不,所以我有点赶时间。我也不知道关于类型的第一件事。我会在下班后回来,发布截图(不知道如何在评论中发布代码,所以这也是截图)非常感谢你,Martin。当然,它是有效的,我只需要读一点关于类型和它们是如何工作的。