Inno Setup (создание инсталяционных пакетов). Часть 3

Статус
В этой теме нельзя размещать новые ответы.

HoLmEs

Новичок
Такой вопрос, касается define records, после тестового прогона я раскоментировал define records после чего скомпилировал, в процессе установки часть файлов не распаковывается, но проценты отображаются нормально, но когда когда я закоментирую define records то у меня распаковываются все файлы и проценты отображаются не нормально. Как быть, подскажите кто
 

Adil

Старожил
HoLmEs, может вы отметили архив (который не распаковывается) как компонент?
 

LexBell

Борода
Супер модератор
HoLmEs, покажи ту часть, где распаковка и я покажу, где у тебя косяк.
 

EvilAlex

Старожил
Всем бобра ! Пользуюсь внешним упаковщиком, а именно фриарком. Такой вопросец, вот у меня три архива: Client.arc Music.arc Sound.arc !
Client.arc - устанавливаеться в любом случае, это клиент игры, есть пользователи которым нужны звуки и музыка, а есть кому они не нужны, как-то можно сделать выбор чтобы пользователь мог выбрать, устанавливать или нет Music.arc и Sound.arc ?
Распаковка идет через IsDone0.6final !
Пробовал сделать через компоненты, но они не отображаються в прогрессбаре и на странице установки, с виду инсталлятор просто висит около 2-3 минут, потом игра установлена. Поэтому и спрашиваю, можно ли как то сделать чтобы распаковка шла через ис дон, но при этом мжно было бы выбрать что ставить ?

Заранее спасибо !
 

vint56

Ветеран
Проверенный
EvilAlex этот пример из справки
[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

Comps1:=0; Comps2:=0; Comps3:=0;
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
if not FileSearchInit(false) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\BasicData.arc'), ExpandConstant('{app}\'), '', false, '', '', '', notPCFonFLY) then break;
if not ISArcExtract ( 1, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
if not ISArcExtract ( 3, 0, ExpandConstant('{src}\rusvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
if not ISArcExtract ( 4, 0, ExpandConstant('{src}\engvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
ISDoneError:=false;
until true;
ISDoneStop;
end;

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

[Components]
Name: voice; Description: Язык озвучки; Types: full;
Name: voice\Audio; Description: Audio;
Name: voice\Music; Description: Music;

Код:
procedure InitializeWizard();
begin
  with WizardForm.ComponentsList do
    begin
    Checked[1]:=True
    Checked[2]:=True
  end;
end;

Comps1:=0; Comps2:=0; Comps3:=0;
 TmpValue:=1;
 if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
 TmpValue:=TmpValue*2;
 if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
 TmpValue:=TmpValue*2;
 if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
 TmpValue:=TmpValue*2;
 if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4

 ISDoneError:=true;
 if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
 repeat
 if not FileSearchInit(false) then break;
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\BasicData.arc'), ExpandConstant('{app}\'), '', false, '', '', '', notPCFonFLY) then break;
 if not ISArcExtract ( 1, 0, ExpandConstant('{src}\Audio.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
 if not ISArcExtract ( 2, 0, ExpandConstant('{src}\Music.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;

 ISDoneError:=false;
 until true;
 ISDoneStop;
 end;[/SPOILER]
 
Последнее редактирование:

EvilAlex

Старожил
vint56, Огромное спасибо, только небольшая проблемка. У меня нет страницы компонентов, у меня вот как -
 

LexBell

Борода
Супер модератор
У меня нет страницы компонентов
IsComponentSelected('text\rus')
- простая булевая функция. вместо нее можешь использовать абсолютно. то есть вообще совершенно любую булевую функцию или переменную. вообще - это значит совершенно любую, какую твоей душе угодно. любое условие, которое должно знаменовать собой необходимость распаковки нужного архива. если не вдаваться - порядок заявления - есть цифра, которую напишешь в параметре привязки к компонентам.

 

EvilAlex

Старожил
- простая булевая функция. вместо нее можешь использовать абсолютно. то есть вообще совершенно любую булевую функцию или переменную. вообще - это значит совершенно любую, какую твоей душе угодно. любое условие, которое должно знаменовать собой необходимость распаковки нужного архива. если не вдаваться - порядок заявления - есть цифра, которую напишешь в параметре привязки к компонентам.

Не буду отрицать, читал только основы, и я не говорю что скрипт не работает, он работает даже очень хорошо, просто у меня идет 4 страницы, 1-приветствия, 2-папки и компоненты, 3-установка и 4-финишная. Мне надо два чек бокса "1- установить Музыку, 2- установить Звуки" на 2 странице. Я делал по справке и по примеру от vint56, появляеться пустая белая страница после папок и компонентов, где нечего нет, жму установить и идет полная установка, музыка, звук и клиент. У меня не получаеться просто сделать два чек бокса привязаных к этим двум компанентам, на 2 странице, так чтобы не появлялась пустая страница компонентов, но при этом распаковка шла через исдон ! Если кто понял и может помочь, огромная просьба, хелп ми !?
 

LexBell

Борода
Супер модератор
совершенно любую булевую функцию
создаешь булевые функции, которые возвращают состояния твоих чекбоксов в булевом выражении. далее просто:

Код:
Comps1:=0; Comps2:=0; Comps3:=0;
TmpValue:=1;
if твоя булева функция номер 1 then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if твоя булева функция номер 2 then Comps1:=Comps1+TmpValue; //компонент 2
Не спорю, я тоже както не сразу въехал в этот момент. но мой вопрос звучал тогда так -
можно-ли использовать вместо IsComponentSelected другую булевую функцию?
 

EvilAlex

Старожил
создаешь булевые функции, которые возвращают состояния твоих чекбоксов в булевом выражении. далее просто:

Код:
Comps1:=0; Comps2:=0; Comps3:=0;
TmpValue:=1;
if твоя булева функция номер 1 then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if твоя булева функция номер 2 then Comps1:=Comps1+TmpValue; //компонент 2
Не спорю, я тоже както не сразу въехал в этот момент. но мой вопрос звучал тогда так -
Суть я понял, но вот что туда втыкать до меня не доходит... Если можно пример ?
 

LexBell

Борода
Супер модератор
[SOURCE="iss"]function CheckMusik(): boolean;
begin
Result := Чекбокс Musik.cheked;
end;

function CheckAudio(): boolean;
begin
Result := Чекбокс Audio.cheked;
end;


............................
Comps1:=0; Comps2:=0; Comps3:=0;
TmpValue:=1;
if CheckMusik then Comps1:=Comps1+TmpValue; //если нужно распаковать архив Musik
TmpValue:=TmpValue*2;
if CheckAudio then Comps1:=Comps1+TmpValue; //если нужно распаковать архив Audio


............................
if not ISArcExtract ( 1, 0, ExpandConstant('{src}\Musik.bin'), ...) then break;
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\Audio.bin'), ...) then break;[/SOURCE]
что-то еще осталось непонятным? тут, кстати, еще и ответ на вопрос HoLmEs
 

EvilAlex

Старожил
что-то еще осталось непонятным? тут, кстати, еще и ответ на вопрос HoLmEs


вот мой скрипт:
 

EvilAlex

Старожил
Извените что пришлось писать два сообщения, он ругаеться что слишком много знаков.

вот исдон:
 

LexBell

Борода
Супер модератор
EvilAlex, у тебя уже готовые функции
[SOURCE="iss"]function Music: Boolean;
begin
Result:= BtnGetChecked(MusicCheck);
end;

function Sound: Boolean;
begin
Result:= BtnGetChecked(SoundCheck);
end;[/SOURCE]
вот они-то тебе и нужны. используй их вместо тех, которые я привел для примера(вместо CheckMusik и CheckAudio берешь свои Music и Sound).
 

HoLmEs

Новичок
HoLmEs, покажи ту часть, где распаковка и я покажу, где у тебя косяк.
if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\setup-1.bin'), ExpandConstant('{app}'), false,CallBack, '', '', '') then break;
if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\setup-2.bin'), ExpandConstant('{app}'), false,CallBack, '', '', '') then break;
if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\setup-3.bin'), ExpandConstant('{app}\DI\Data'), false,CallBack, '', '', '') then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_buildinginterior_b_PC.srep'), ExpandConstant('{app}\DI\Data\bs_buildinginterior_b_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_buildinginterior_b_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_buildinginterior_b_PC.rpack'), true, CallBack ) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_buildinginterior_PC.srep'), ExpandConstant('{app}\DI\Data\bs_buildinginterior_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_buildinginterior_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_buildinginterior_PC.rpack'), true, CallBack ) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_jungle_b_PC.srep'), ExpandConstant('{app}\DI\Data\bs_jungle_b_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_jungle_b_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_jungle_b_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_jungle_high_PC.srep'), ExpandConstant('{app}\DI\Data\bs_jungle_high_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_jungle_high_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_jungle_high_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_jungle_PC.srep'), ExpandConstant('{app}\DI\Data\bs_jungle_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_jungle_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_jungle_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_laboratory_PC.srep'), ExpandConstant('{app}\DI\Data\bs_laboratory_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_laboratory_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_laboratory_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_military_quarters_PC.srep'), ExpandConstant('{app}\DI\Data\bs_military_quarters_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_military_quarters_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_military_quarters_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_quarantine_PC.srep'), ExpandConstant('{app}\DI\Data\bs_quarantine_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_quarantine_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_quarantine_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_ship_PC.srep'), ExpandConstant('{app}\DI\Data\bs_ship_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_ship_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_ship_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_town_PC.srep'), ExpandConstant('{app}\DI\Data\bs_town_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_town_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_town_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_tunnels_PC.srep'), ExpandConstant('{app}\DI\Data\bs_tunnels_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\bs_tunnels_PC.pcf'), ExpandConstant('{app}\DI\Data\bs_tunnels_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\menuback_PC.srep'), ExpandConstant('{app}\DI\Data\menuback_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\menuback_PC.pcf'), ExpandConstant('{app}\DI\Data\menuback_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\weapons_PC.srep'), ExpandConstant('{app}\DI\Data\weapons_PC.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\weapons_PC.pcf'), ExpandConstant('{app}\DI\Data\weapons_PC.rpack'), true, CallBack) then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\DI\Data\music_stream.srep'), ExpandConstant('{app}\DI\Data\music_stream.xwb'), '', true, CallBack ) then break;
 

LexBell

Борода
Супер модератор
мдеээээ.............
OveralPct - эт че за? (простите мой французкий, но на самом деле - что это за ...)
далее. да, это цитата, но я помню, в сообщении на другом форуме, с которого цитата, пара функций была с первым параметром, отличным от нуля. беда, в общем-то была именно там.
 

vint56

Ветеран
Проверенный
HoLmEs ты когда делал первую установку ты все компоненты включил что создался records.inf если ты их не включил потому они не работают
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху