Ru-Board.club
← Вернуться в раздел «Программы»

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

Автор: dodakaedr
Дата сообщения: 28.03.2014 22:18
Как создать чекбокс в деинсталяторе с функцией не удалять файл?
Автор: vint56
Дата сообщения: 29.03.2014 11:12
marineharrison
http://rghost.ru/53556117
Автор: tryroom
Дата сообщения: 29.03.2014 11:53
vint56
Спасибо за тот пример на png.
Разобрался, всё пошло на ура.
Автор: marineharrison
Дата сообщения: 29.03.2014 13:28
vint56
Вот это мозги. Благодарю. Я так понял один скрипт подхватывает другой, где прописано то чтомне нужно. Спасибо за помощь.
Автор: T2008
Дата сообщения: 29.03.2014 17:14
Можно ли окно выбора компонентов (или параметров установки) разбить на две страницы? Выбрал параметры установки, нажал "далее" и выбрал оставшиеся параметры.
Смотрите скриншот - будет понятнее, что я хочу.


Автор: vint56
Дата сообщения: 30.03.2014 12:58
T2008 Пример взят от Example_NewCheckListBox и переделан под свой нужды
[more][Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: C:\eng.txt; DestDir: {app}; Check: English;
Source: C:\ger.txt; DestDir: {app}; Check: German;

Source: C:\eng1.txt; DestDir: {app}; Check: English1;
Source: C:\ger2.txt; DestDir: {app}; Check: German2;

[Code]
var
ComponentsA,ComponentsB: TWizardPage;
CheckListBox,CheckListBox2: TNewCheckListBox;

function English: Boolean;
begin
Result:= CheckListBox.Checked[3];
end;

function German: Boolean;
begin
Result:= CheckListBox.Checked[4];
end;

function English1: Boolean;
begin
Result:= CheckListBox2.Checked[3];
end;

function German2: Boolean;
begin
Result:= CheckListBox2.Checked[4];
end;


procedure InitializeWizard();
begin
ComponentsA := CreateCustomPage(wpWelcome, 'Выбор компонентов', 'Какие компоненты должны быть установлены?');
CheckListBox := TNewCheckListBox.Create(WizardForm);
CheckListBox.Parent := ComponentsA.Surface;
CheckListBox.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(233));
CheckListBox.AddCheckBoxEx('Program Files', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('Help Files', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('Readme Files', '', 0, True, True, True, True, nil, True);
CheckListBox.AddRadioButtonEx('English', '', 1, True, True, nil, False);
CheckListBox.AddRadioButtonEx('German', '', 1, False, True, nil, True);
CheckListBox.AddCheckBoxEx('1', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('2', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('3', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('4', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('5', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('6', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('7', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('8', '', 0, True, True, True, True, nil, True);
CheckListBox.AddCheckBoxEx('9', '', 0, True, True, True, True, nil, True);

ComponentsB := CreateCustomPage(ComponentsA.ID, 'Выбор компонентов', 'Какие компоненты должны быть установлены?');
CheckListBox2 := TNewCheckListBox.Create(WizardForm);
CheckListBox2.Parent := ComponentsB.Surface;
CheckListBox2.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(233));
CheckListBox2.AddCheckBoxEx('Program Files', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('Help Files', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('Readme Files', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddRadioButtonEx('Русский', '', 1, True, True, nil, False);
CheckListBox2.AddRadioButtonEx('Английский', '', 1, False, True, nil, True);
CheckListBox2.AddCheckBoxEx('1', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('2', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('3', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('4', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('5', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('6', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('7', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('8', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddCheckBoxEx('9', '', 0, True, True, True, True, nil, True);
end;[/more]
Автор: marineharrison
Дата сообщения: 30.03.2014 13:52
vint56
Еще одна просьба. Я дописал скрипт.
http://rghost.ru/53601979
Добавил туда смену диска и удалил лишнее. Однако при смене диска выкидывает окно, в котором скин используется, а вот обе кнопки не используют скин и отображаются стандартно. Кнопка "обзор" по высоте меньше, чем другие кнопки. Как бы ее сделать такой же.

Как бы это исправить.
И еще. прошу удалить по возможности лишние процедуры из скрипта. И как правильно удалить строку с records.inf. Я его не сипользую. Автоматом назначил по 50% каждому из архивов.
Автор: T2008
Дата сообщения: 30.03.2014 15:23
Что за ошибка, как исправить?

Автор: nik1967
Дата сообщения: 30.03.2014 17:02

Цитата:
как исправить?

Использовать расширенную версию Inno Setup.
Автор: T2008
Дата сообщения: 30.03.2014 19:20

Цитата:
Использовать расширенную версию Inno Setup.


1) Не хочу. В стандартной поставке подобных функций не найдётся?

2) Как изменить размеры окна инсталлятора?
Если использую
procedure InitializeWizard;
begin
{ Create the pages }
WizardForm.ClientWidth:=ScaleX(790);
WizardForm.ClientHeight:=ScaleY(533);
WizardForm.Center;
end
то получаю вот такое убожество

Автор: vint56
Дата сообщения: 30.03.2014 22:29
T2008 Вот пример для стандартной версий
насчет изменить размеры окна инсталлятора всетаки установи расширинный компилятор там есть редактор форм
[more][Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: C:\eng.txt; DestDir: {app}; Check: English;
Source: C:\ger.txt; DestDir: {app}; Check: German;

Source: C:\eng1.txt; DestDir: {app}; Check: English1;
Source: C:\ger2.txt; DestDir: {app}; Check: German2;

[Code]
var
ComponentsA,ComponentsB: TWizardPage;
CheckListBox,CheckListBox2: TNewCheckListBox;

function English: Boolean;
begin
Result:= CheckListBox.Checked[3];
end;

function German: Boolean;
begin
Result:= CheckListBox.Checked[4];
end;

function English1: Boolean;
begin
Result:= CheckListBox2.Checked[3];
end;

function German2: Boolean;
begin
Result:= CheckListBox2.Checked[4];
end;


procedure InitializeWizard();
begin
ComponentsA := CreateCustomPage(wpWelcome, 'Выбор компонентов', 'Какие компоненты должны быть установлены?');
CheckListBox := TNewCheckListBox.Create(WizardForm);
CheckListBox.Parent := ComponentsA.Surface;
CheckListBox.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(233));
CheckListBox.AddCheckBox('Program Files', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('Help Files', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('Readme Files', '', 0, True, True, True, True, nil);
CheckListBox.AddRadioButton('English', '', 1, True, True, nil);
CheckListBox.AddRadioButton('German', '', 1, False, True, nil);
CheckListBox.AddCheckBox('1', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('2', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('3', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('4', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('5', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('6', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('7', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('8', '', 0, True, True, True, True, nil);
CheckListBox.AddCheckBox('9', '', 0, True, True, True, True, nil);

ComponentsB := CreateCustomPage(ComponentsA.ID, 'Выбор компонентов', 'Какие компоненты должны быть установлены?');
CheckListBox2 := TNewCheckListBox.Create(WizardForm);
CheckListBox2.Parent := ComponentsB.Surface;
CheckListBox2.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(233));
CheckListBox2.AddCheckBox('Program Files', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('Help Files', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('Readme Files', '', 0, True, True, True, True, nil);
CheckListBox2.AddRadioButton('Русский', '', 1, True, True, nil);
CheckListBox2.AddRadioButton('Английский', '', 1, False, True, nil);
CheckListBox2.AddCheckBox('1', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('2', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('3', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('4', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('5', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('6', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('7', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('8', '', 0, True, True, True, True, nil);
CheckListBox2.AddCheckBox('9', '', 0, True, True, True, True, nil);
end;[/more]

marineharrison
насчет скина без понятия
насчет records.inf она же закаментирована значит на работает зачем трогать
удалить лишние процедуры из скрипта такой фигней не занимаюсь
Автор: Klensal
Дата сообщения: 01.04.2014 17:01
[more] Как организировать возможность сочетания текста и озвучки с тремя архивами !?


Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if BtnGetChecked(LanguagetextButton[1]) then Comps1:=Comps1+TmpValue; //Компонент 1
TmpValue:=TmpValue*2;
if BtnGetChecked(LanguagetextButton[2]) then Comps1:=Comps1+TmpValue; //Компонент 2
TmpValue:=TmpValue*2;
if BtnGetChecked(LanguagevoiceButton[1]) then Comps1:=Comps1+TmpValue; //Компонент 3
TmpValue:=TmpValue*2;
if BtnGetChecked(LanguagevoiceButton[2]) then Comps1:=Comps1+TmpValue; //Компонент 4
#endif

#ifdef precomp
PCFVer:={#precomp};
#else
PCFVer:=0;
#endif
ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, 0, @ProgressCallback) then begin
repeat
// ChangeLanguage('English');
if not SrepInit(ExpandConstant('{app}\'),128,0) then break;
if not PrecompInit(ExpandConstant('{app}\'),128,PCFVer) then break;
if not FileSearchInit(true) then break;

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\BastionEN.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        //полная английская версия
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\DataTextRu.bin'), ExpandConstant('{app}\Content'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        //Рус текст
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\DataVoiceRu.bin'), ExpandConstant('{app}\Content\Audio'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        //Рус звук

P.S. если не сложно розписать что и как. [/more]
Автор: Sid007
Дата сообщения: 01.04.2014 23:55
Здравствуйте! Подскажите пожалуйста, никак не могу сделать вот что: в скрипте на странице выбора папки установки сделать 2 радиокнопки; при выборе 1-й радиокнопки, например, берется путь из реестра, при выборе второй - любой стандартный путь, что-то вроде C:\Games\Example, причем в строке где указан путь установки он меняется в зависимости от выбранной радиокнопки. Вот пример в картинках.

http://imageshack.com/i/nqxi97p
http://imageshack.com/i/mwn3gup
Автор: haladar
Дата сообщения: 02.04.2014 23:21
Всем доброго времени суток. Как заставить инсталлятор заставить не просто копировать дополнительные компоненты, а распаковывать их ?
Ссылка на скрипт
http://yadi.sk/d/22H3ByxoLhLWX
Автор: Klensal
Дата сообщения: 03.04.2014 00:37

Цитата:
Всем доброго времени суток. Как заставить инсталлятор заставить не просто копировать дополнительные компоненты, а распаковывать их ?
Ссылка на скрипт
http://yadi.sk/d/22H3ByxoLhLWX


Непосредственно распаковка вот:

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Автор: haladar
Дата сообщения: 03.04.2014 13:34

Цитата:
Непосредственно распаковка вот:
 
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

Не компилируется. Наверное, вставляю код не туда. Вставил в файл "Components ISS"
Жалуется на неизвестный идентефикатор ISArcExtract

Код:
Comp2Check:=BtnCreate(WizardForm.Handle,ScaleX(105),ScaleY(273),ScaleX(28),ScaleY(28),ExpandConstant('{tmp}\RadioBatton.png'),8,True);
BtnSetEvent(Comp2Check,BtnClickEventID,WrapBtnCallback(@Comp2Click,1));
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
BtnSetEvent(Comp2Check,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(Comp2Check,GetSysCursorHandle(32649));
BtnSetChecked(Comp2Check,True);
Автор: vint56
Дата сообщения: 03.04.2014 15:26
haladar
http://rghost.ru/53738557
Автор: haladar
Дата сообщения: 03.04.2014 18:34

Цитата:
haladar
http://rghost.ru/53738557

Спасибо, работает. Как я заметил, вы заменили модуль распаковки архивов. В связи с этим у меня возникает вопрос. Куда вбивать название основного архива, который инсталлятор должен распаковать первым делом ?
Автор: vint56
Дата сообщения: 03.04.2014 19:06
haladar
// Основной архив
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-A.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
// Компоненты
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 3, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 5, 0, ExpandConstant('{src}\russound.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 6, 0, ExpandConstant('{src}\engsound.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
Автор: haladar
Дата сообщения: 03.04.2014 19:28

Цитата:
haladar  
// Основной архив
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-A.arc'), ExpandConstant('{app}'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;  
// Компоненты
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 3, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 5, 0, ExpandConstant('{src}\russound.arc'), ExpandConstant('{app}'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 6, 0, ExpandConstant('{src}\engsound.arc'), ExpandConstant('{app}'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;


Спасибо, все начало распаковываться, но опять вылезло 1 "но"
Установка начинается не с 0 %, а с 50 %. С 50% до 97% устанавливаются компоненты, а в оставшиеся 3% распаковывается основной архив
Автор: MOD_TEC
Дата сообщения: 03.04.2014 19:46
haladar

А не легче так:

// Основной архив
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-A.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
// Компоненты
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\russound.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\engsound.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break;

Делаешь тестовый прогон далее раскоментируешь #define records

Снова компилишь и радуешься...
Автор: haladar
Дата сообщения: 03.04.2014 20:21

Цитата:
Делаешь тестовый прогон далее раскоментируешь #define records
 
Снова компилишь и радуешься...

Что-то мне это не сильно помогло.
Автор: vint56
Дата сообщения: 03.04.2014 20:33
haladar а у тебя
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-A.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break; точно 0 а не 50
Автор: haladar
Дата сообщения: 03.04.2014 21:07

Цитата:
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-A.arc'), ExpandConstant('{app}'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY) then break; точно 0 а не 50

Точно.
Решил-таки проблему. Все больше спасибо за помощь)
Автор: Klensal
Дата сообщения: 03.04.2014 23:07
Всем привет!
1.Инсталятор на русском! При добавлении английского языка "счетчик" остается на русском
http://rghost.ru/53759173/image.png Можна его исмправить или удалить!?
2. Как можна изменить размер диалогового окна http://rghost.ru/53751024/image.png.
Подскажите люди добрие!
Автор: Quite Unknown
Дата сообщения: 04.04.2014 09:11
Доброго времени суток!
Я к вам с просьбой о помощи. Очень нужно создать инсталяционный пакет, но знаний в данном направлении нет, а время поджимает.
Что имеем: Есть огромное количество инсталяционных файлов, которые делятся на 5 категорий по применению в разных ОС (ОС всего три: Win7 32, Win7 64 и XP 32), соответственно:
1) ставится не все ОС
2) ставится на Win7 64
3) ставится на любую х32
4) ставится на Win7 32
5) ставится на XP 32

что нужно: чтобы был единый файл-инсталятор, при запуске которого определялась бы ОС и в соответствии с ОС файлы запускались по очереди.

Как я уже писал, в данном вопросе я ни в зуб ногой (ни структуры INNO, ни паскаля не знаю и все получается методом тыка). На данный момент получилось только это (и это за 2 дня в свободное от работы и семьи время):


Код: [Setup]
AppName=TestInstall
AppVerName=1
DefaultDirName={tmp}\
OutputBaseFilename=Setup (сборка от {#DateTime})



[Code]
function InitializeSetup: Boolean;
var
Version: TWindowsVersion;
S: String;
begin
GetWindowsVersionEx(Version);

if (Version.Major = 6) and
(Version.Minor = 1)
then MsgBox('test message'#13'Windows 7', mbInformation, mb_Ok)

if (Version.Major = 5)
then MsgBox('test message'#13'Windows XP', mbInformation, mb_Ok)

end;
Автор: haladar
Дата сообщения: 05.04.2014 17:43
Ситуация такая:
Есть инсталлятор, который распаковывает помимо основного файла еще и компоненты, которые выбирает юзер. Если распаковывать 1 компонент, то все нормально, а если 2, то прогресс установки идет уже после 100 %
Т.Е. основной файл распаковывается до 100 %, а дальше при распаковке компонентов прогресс-бар идет дальше т.е. 110 % и т.д.
Вот основной скрипт, скрипт компонентов, и скрипт ISDone
http://yadi.sk/d/fqcHsAFILqyrY
Автор: nik1967
Дата сообщения: 05.04.2014 22:16
haladar, прочитай внимательно справку к ISDone, и не задавай больше глупых вопросов.
Автор: haladar
Дата сообщения: 05.04.2014 23:05

Цитата:
haladar, прочитай внимательно справку к ISDone, и не задавай больше глупых вопросов.

Дельный совет. Решил проблему с помощью тестового прогона.
Автор: tryroom
Дата сообщения: 06.04.2014 16:10
сделал на bmp

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.