Log in

View Full Version : Component Selection then extraction?


Prince4
04-06-2016, 23:58
I know there could be a Thread to this but i'm in way too curious to start another.

-> How can i have a component selection in a inno setup which then extracts particular archive or a particular file in it?

Details :

Like i created a installer which i want it to show some options like :
Component A
Component B
Component C

Component A = Setup-1.Rpk
Component B = Setup-2.Rpk
Component C = Setup-1.Rpk + Setup-2.Rpk

I just want the user to chose one of the component so then the installer extracts the particular archive or particular files in the archive.

-------------------------------

Like there's in Max Payne 3 Repack by R.G. Origami.

vint56
05-06-2016, 01:36
Prince4 ISDone0.6final Script ISDone_Example

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: Component; Description: Component Selection; Types: full; Flags: fixed // Component 0
Name: Component\a; Description: Component - A; Flags: exclusive; // Component 1
Name: Component\b; Description: Component - B; Flags: exclusive; // Component 2
Name: Component\c; Description: Component - C; Flags: exclusive; // Component 3

[ code]
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('Component\a') then Comps1:=Comps1+TmpValue; //Component 1
TmpValue:=TmpValue*2;
if IsComponentSelected('Component\b') then Comps1:=Comps1+TmpValue; //Component 2
TmpValue:=TmpValue*2;
if IsComponentSelected('Component\c') then Comps1:=Comps1+TmpValue; //Component 3
TmpValue:=TmpValue*2;
if IsComponentSelected('Component\d') then Comps1:=Comps1+TmpValue; //Component 4

#endif

If IsComponentSelected('Component\a') then
begin
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Setup-1.Rpk'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
end;

If IsComponentSelected('Component\b') then
begin
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Setup-2.Rpk'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
end;

If IsComponentSelected('Component\c') then
begin
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Setup-1.Rpk'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Setup-2.Rpk'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
end;

Prince4
05-06-2016, 01:48
can you please comment it in English BTW Thanks for the Help

ffmla
22-09-2016, 10:35
Prince4 ISDone0.6final Script ISDone_Example

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: Component; Description: Component Selection; Types: full; Flags: fixed // Component 0
Name: Component\a; Description: Component - A; Flags: exclusive; // Component 1
Name: Component\b; Description: Component - B; Flags: exclusive; // Component 2
Name: Component\c; Description: Component - C; Flags: exclusive; // Component 3

[ code]
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('Component\a') then Comps1:=Comps1+TmpValue; //Component 1
TmpValue:=TmpValue*2;
if IsComponentSelected('Component\b') then Comps1:=Comps1+TmpValue; //Component 2
TmpValue:=TmpValue*2;
if IsComponentSelected('Component\c') then Comps1:=Comps1+TmpValue; //Component 3
TmpValue:=TmpValue*2;
if IsComponentSelected('Component\d') then Comps1:=Comps1+TmpValue; //Component 4

#endif

If IsComponentSelected('Component\a') then
begin
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Setup-1.Rpk'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
end;

If IsComponentSelected('Component\b') then
begin
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Setup-2.Rpk'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
end;

If IsComponentSelected('Component\c') then
begin
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Setup-1.Rpk'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Setup-2.Rpk'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
end;


Hi,
thanks for info,
In the componenet section how to use records.ini for smooth progress bar.
If i choose single component.-->record.ini created =No Problem
but by choosing multiple file-how to make record.ini file..
please help,:)

Thanks in advance.