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

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

Автор: SotM
Дата сообщения: 25.08.2008 10:46
nOobCrafter
Дык, а что делает CurPageID и wpSelectTasks в InitializeWizard??? Их там по определению не должно быть.
И естественно то, что ты написал не будет работать.
Автор: nOobCrafter
Дата сообщения: 25.08.2008 13:44

Цитата:
nOobCrafter
это не глюк. что написал, то и получил
если на пальцах, то у тебя написано: при смене страницы добавлять чекбоксы, т.е. пр нажатии кнопки "Далее" добавляются чекбоксы, пролистал страницу, вернулся назад (это тоже смена страницы) добавились еще чекбоксы и т.д. до бесконечности

попробуй это сделать в InitializeWizard

Вот что мне посоветовали, то я и сделал, вопрос задавал раньше


Цитата:
Кстати нашел как мне кажеться небольшой глюк, хотя может это и не глюк. [more=Вот]procedure CurPageChanged(CurPageID: Integer);
begin
if DirExists('C:\123') then
if CurPageID = wpSelectTasks then
begin
WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('2', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('3', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('4', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('5', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('6', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('7', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('8', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('9', '', 1, True, True, True, True, nil)
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
if WizardForm.TasksList.Checked[1] = True then
begin
...;
end;

if WizardForm.TasksList.Checked[2] = True then
begin
...
end;

if WizardForm.TasksList.Checked[3] = True then
begin
...
end;

if WizardForm.TasksList.Checked[4] = True then
begin
...
end;

if WizardForm.TasksList.Checked[5] = True then
begin
...
end;

if WizardForm.TasksList.Checked[6] = True then
begin
...
end;

if WizardForm.TasksList.Checked[7] = True then
begin
...

if WizardForm.TasksList.Checked[8] = True then
begin
...
end;
end;[/more] пример кода по добавлению чекбоксов при наличии такой то папки. В меня выбора задач (тасков) все корректно отображается и работает, но как только кликаешь Далее, а потом снова Назад, (возвращаешься на страницу выбора задач), то кол-во чекбоксов удваивается. Как это можно обойти и глюк ли это?
Автор: SotM
Дата сообщения: 25.08.2008 14:09
nOobCrafter
Он всё правильно посоветовал, но это не означает, что надо просто напросто скопировать код из одного места в другое и всё заработает. Надо ведь еще и мозг использовать.

На крайний случай попробуй так:


Код:
Procedure InitializeWizard;
Begin
    if DirExists('C:\Windows') then
    begin
        WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil)
        WizardForm.TasksList.AddCheckBox('1.1', '', 1, True, True, False, True, nil)
        WizardForm.TasksList.AddCheckBox('1.2', '', 1, True, True, True, True, nil)
        WizardForm.TasksList.AddCheckBox('1.3', '', 1, True, True, True, True, nil)
        WizardForm.TasksList.AddCheckBox('1.4', '', 1, True, True, True, True, nil)
        WizardForm.TasksList.AddCheckBox('1.5', '', 1, True, True, True, True, nil)
    end;
End;
Автор: Raf_SE
Дата сообщения: 25.08.2008 14:36
А можно какнить сделать чтоб файлы
Source: L:\Games\Diablo II - Lord of Destruction\VERSION\v1.7\data\local\LNG\ENG\patchstring.tbl; DestDir: {app}\data\local\LNG\ENG;
Source: L:\Games\Diablo II - Lord of Destruction\VERSION\v1.7\data\local\LNG\ENG\string.tbl; DestDir: {app}\data\local\LNG\ENG;
Source: L:\Games\Diablo II - Lord of Destruction\VERSION\v1.7\data\local\LNG\ENG\expansionstring.tbl; DestDir: {app}\data\local\LNG\ENG;
Расспаковывались только если выбрано 2 компонента, "Text\Russian" и "Voice\Russian\Fargus"?
Автор: nOobCrafter
Дата сообщения: 25.08.2008 14:49
Не не не не...Я папку с виндой для примера использовал, что бы чекбоксы были видны, а вообще у меня другая папка с жесткой привязкой к месту инстала, так что это я знаю.
1 лишний "End;" и всеравно ничего непашет((
Автор: SotM
Дата сообщения: 25.08.2008 15:06
Исправил свой предыдущий пост...
Автор: nOobCrafter
Дата сообщения: 25.08.2008 15:16
Все еще неработает. Вопрос на случай если я уж савсем сегодня тормооооз. Больше нигде ничего прописывать для этого скприта ненадо?
Автор: SotM
Дата сообщения: 25.08.2008 15:35
nOobCrafter
Выложи сюда весь свой скрипт, чтобы можно было его просто запустить.

Автор: nOobCrafter
Дата сообщения: 25.08.2008 16:03
гхым.. Весь неполучится большой больно, но [more=даже][Setup]
AppName=ISSkin Example
AppVerName=ISSkin Example v1.0
DefaultDirName=C:\innosetup\output\2
OutputBaseFilename=ïðèìåð123
[Files]
Source: "ISTask.dll"; DestDir: "{app}"; flags: dontcopy

[Tasks]
Name: desktopicon; Description: "задача 1"; GroupDescription: {cm:AdditionalIcons}
Name: askini; Description: "задача 2"; GroupDescription: "123"
Name: arc; Description: "задача 3"; GroupDescription: "123"; Flags: unchecked

[_Code]
Procedure InitializeWizard;
var
CurPageID: Integer;
Begin
if DirExists('C:\Windows') then
begin
WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.1', '', 1, True, True, False, True, nil)
WizardForm.TasksList.AddCheckBox('1.2', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.3', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.4', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.5', '', 1, True, True, True, True, nil)
end;
End;[/more] это непашет, хотя мне кажеться что тут уж должно работать полюбому, ибо никаких помех и ошибок неможет быть.
Автор: Diawer
Дата сообщения: 25.08.2008 16:10

Цитата:
Заменил в innounp enhanced 0.23 build 2008-08-08 китайский текст на английский.


Не качаеться, перазалейте пожалуйста.
Автор: RaP1D
Дата сообщения: 25.08.2008 22:12
Помогите сделать следущее:

в секции CODE должна объявляться переменная, которая указывает на путь назначения ({app});

далее в секции RUN это:
Filename: "7-Zip4.exe"; Parameters: "......"; Flags: shellexec

Параметры должны быть такие 7-Zip4 -x -oPEREMENNAYA_APP -y

ТО есть, мне надо, чтоб распакововался sfx 7-z архив из папки инсталятора в папку установки приложения.
Автор: Victor_Dobrov
Дата сообщения: 26.08.2008 01:35
Diawer

Цитата:
Не качаеться, перезалейте пожалуйста...

innounp enhanced 0.23 build 2008-08-08 english
Автор: SotM
Дата сообщения: 26.08.2008 07:39
RaP1D
А кто тебе мешает сразу использовать константу {app}? Зачем для этого заводить отдельную переменную?
Автор: RaP1D
Дата сообщения: 26.08.2008 07:49
SotM
Когда я пишу так: Parameters: "7-Zip4 -x -o{app} -y"; прога считает {app} за директорию, а не за переменную точки назначения...
Автор: SotM
Дата сообщения: 26.08.2008 08:17
RaP1D

Цитата:
Когда я пишу так: Parameters: "7-Zip4 -x -o{app} -y"; прога считает {app} за директорию, а не за переменную точки назначения...

Ну и правильно она считает. Инструкцию нужно читать, и смотреть разные примеры, в шапке для кого они даны?

"7-Zip4 -x -o""{app}""-y"
Автор: RaP1D
Дата сообщения: 26.08.2008 09:04
SotM
Неа, неправильно, я так пробовал! Все равно, когда в конце инсталяции запускается распаковка sfx 7-z архива с этими параметрами {app} является директорией.

Что так:
"7-Zip4 -x -o{app} -y"
Что так:
"7-Zip4 -x -o""{app}""-y"
Один хлеб с маслом...
Автор: nOobCrafter
Дата сообщения: 26.08.2008 09:35
Так кто нить может помоч с моим предыдущим постом?..а то так ничего и не работает(((
Автор: NightW0lf
Дата сообщения: 26.08.2008 09:38
RaP1D

Цитата:
Когда я пишу так: Parameters: "7-Zip4 -x -o{app} -y"; прога считает {app} за директорию, а не за переменную точки назначения...


Код: Filename: "{src}\SFX_archive.exe"; WorkingDir: "{src}"; Parameters: "-y -o""{app}"""; Flags: waituntilterminated
Автор: RaP1D
Дата сообщения: 26.08.2008 10:06
NightW0lf
Спс, забыл {src}

Добавлено:
Теперь другая проблема:
Filename: "{src}\SFX_archive.exe"; WorkingDir: "{src}"; Parameters: "-y -o""{app}"""; Flags: waituntilterminated

По идеи {src} должна возвращать полный путь к папке инсталятора, у меня инсталятор лежит в папке, допустим d:\install\setup.exe

При инсталяции высвечивается, что d:\SFX_archive.exe не найден...

Как можно вернуть полный путь, где бы не находился инсталятор??
Автор: NightW0lf
Дата сообщения: 26.08.2008 10:44
RaP1D
Тот пример который я тебе дал рассчитан только на тот случай когда SFX-архив расположен рядом с исполняемым файлом сетапа (инсталлятора), т.е. в твоем случае инсталлятор расположен в подпапке \install - значит надо указывать для запуска SFX-архив так:

Код: Filename: "{src}\install\SFX_archive.exe"; WorkingDir: "{src}\install"; Parameters: "-y -o""{app}"""; Flags: waituntilterminated
Автор: RaP1D
Дата сообщения: 26.08.2008 10:50
NightW0lf
Не, я имел ввиду, как вернуть полый путь к инсталятору. Просто када я пишу просто так:
Filename: "{src}\SFX_archive.exe"; WorkingDir: "{src}"; Parameters: "-y -o""{app}"""; Flags: waituntilterminated

А сам инсталятор находиться в папке D:\Setup\eee\qqq то инсталятор ругается, что не найден D:\SFX_archive.exe

Добавлено:
Тьфу, я ступил. Поменял Output dir на D а сам архив лежал не там...

Все работает! Спасибо за помощь!
Автор: nOobCrafter
Дата сообщения: 26.08.2008 11:22
Помогите кто со [more=скриптом][Setup]
AppName=ISSkin Example
AppVerName=ISSkin Example v1.0
DefaultDirName=C:\innosetup\output\2
OutputBaseFilename=ïðèìåð123
[Files]
Source: "ISTask.dll"; DestDir: "{app}"; flags: dontcopy

[Tasks]
Name: desktopicon; Description: "задача 1"; GroupDescription: {cm:AdditionalIcons}
Name: askini; Description: "задача 2"; GroupDescription: "123"
Name: arc; Description: "задача 3"; GroupDescription: "123"; Flags: unchecked

[_Code]
Procedure InitializeWizard;
var
CurPageID: Integer;
Begin
if DirExists('C:\Windows') then
begin
WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.1', '', 1, True, True, False, True, nil)
WizardForm.TasksList.AddCheckBox('1.2', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.3', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.4', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.5', '', 1, True, True, True, True, nil)
end;
End;[/more]. Это непашет, хотя мне кажеться что тут уж должно работать полюбому, ибо никаких помех и ошибок неможет быть.
Автор: Victor_Dobrov
Дата сообщения: 26.08.2008 12:16
nOobCrafter - Пока страница wpSelectTasks не отобразится, её не изменить. Попробуй [more=вот так]
[Setup]
AppName=ISSkin Example
AppVerName=ISSkin Example v1.0
DefaultDirName=C:\innosetup\output\2

[Files]
Source: ISTask.dll; DestDir: {app}; flags: dontcopy

[Tasks]
Name: desktopicon; Description: задача 1; GroupDescription: {cm:AdditionalIcons}
Name: askini; Description: задача 2; GroupDescription: 123
Name: arc; Description: задача 3; GroupDescription: 123; Flags: unchecked

[Code]
Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID = wpSelectTasks then
    if DirExists('C:\Windows') then begin
WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil, true)
WizardForm.TasksList.AddCheckBox('1.1', '', 1, True, True, False, True, nil, true)
WizardForm.TasksList.AddCheckBox('1.2', '', 1, True, True, True, True, nil, true)
WizardForm.TasksList.AddCheckBox('1.3', '', 1, True, True, True, True, nil, true)
WizardForm.TasksList.AddCheckBox('1.4', '', 1, True, True, True, True, nil, true)
WizardForm.TasksList.AddCheckBox('1.5', '', 1, True, True, True, True, nil, true)
    end;
End;
[/more].
Автор: htuos
Дата сообщения: 26.08.2008 13:15
Victor_Dobrov
у AddCheckBox всего 8 параметров, 9-й не воспринимает.
если убрать последний параметр, то так у него уже было. при возврате на страницу чекбоксы добавляются еще раз

Цитата:
Пока страница wpSelectTasks не отобразится, её не изменить

мало того, при возврате на предыдущую страницу (перед wpSelectTasks), все что было добавлено потеряется и нужно все делать снова

по мне так проще флаг завести, добавили чекбоксы или нет еще
[more][Setup]
AppName=ISSkin Example
AppVerName=ISSkin Example v1.0
DefaultDirName=C:\innosetup\output\2

;[Files]
;Source: ISTask.dll; DestDir: {app}; flags: dontcopy

[Tasks]
Name: desktopicon; Description: задача 1; GroupDescription: {cm:AdditionalIcons}
Name: askini; Description: задача 2; GroupDescription: 123
Name: arc; Description: задача 3; GroupDescription: 123; Flags: unchecked

[Code_]
var
AddCheckBoxExist:boolean;

Procedure InitializeWizard;
begin
AddCheckBoxExist:=False;
end;

function BackButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID=wpSelectTasks then AddCheckBoxExist:=False;
Result:=True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpSelectTasks) and not AddCheckBoxExist then begin
if DirExists('C:\Windows') then begin
WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil);
WizardForm.TasksList.AddCheckBox('1.1', '', 1, True, True, False, True, nil)
WizardForm.TasksList.AddCheckBox('1.2', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.3', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.4', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.5', '', 1, True, True, True, True, nil)
end;
AddCheckBoxExist:=True;
end;
end;
[/more]
Автор: KurtWagner
Дата сообщения: 26.08.2008 13:30
А сожно ли сделать след.
запоковать WinRar-ом файлы и поставить под пароль, и чтоб инсталлер их распаковал вводя код, через [Code]
или хотябы 7-zip распаковал парольный...
п.с. желательно WinRar
--------------------------------------------
Сле. вопрос...
-------------------------

Дайте плиз все команды
[Run]
Parameters:

Типа (Parameters: -y -o и т.д.
п.с. листая ntcmds.chm я ничего так и не понял! там не все команды рабочие!
Мне надо пропачить "файл" Universal UXTheme Patcher 1.1.exe
----------------------------------------------
Заранее спасибо...
Автор: Victor_Dobrov
Дата сообщения: 26.08.2008 13:51
htuos
Цитата:
у AddCheckBox всего 8 параметров, 9-й не воспринимает.

Да, забыл убрать 9-й параметр, это синтаксис AddCheckBox для китайской сборки Inno, где чекбоксы сворачиваются как в NSIS.
P.S. Посмотреть, как это выглядит сворачивание чекбоксов, можно здесь.

Цитата:
при возврате на предыдущую страницу (перед wpSelectTasks), все что было добавлено потеряется и нужно все делать снова

Ещё могу заметить, что в процессе установки нельзя добавить ваш ключ/раздел в ветку реестра ...\Uninstall\{AppName}_is1.
Автор: SotM
Дата сообщения: 26.08.2008 13:57

Цитата:
А сожно ли сделать след.
запоковать WinRar-ом файлы и поставить под пароль, и чтоб инсталлер их распаковал вводя код, через

ЗапАковать то можно, но судя по rar.txt у него нет команды, чтобы при распаковке он брал откуда нить пароль нужный для распаковки.


Цитата:
Дайте плиз все команды
[Run]
Parameters:

Все команды чего именно? Командной строки или как? Сформулируй свой вопрос правильно.

Дык, ты бы еще написал что такое ntcmds.chm, а то ведь не у всех он есть.

Victor_Dobrov

Цитата:
P.S. Посмотреть, как это выглядит сворачивание чекбоксов, можно здесь.

Хммм, вполне не плохой пример. Где можно все необходимое для этого скачать? Понравилось сворачивание чекбоксов, а так же диалоговое окно о создание ярлыков в разных местах.
Автор: Sampron
Дата сообщения: 26.08.2008 14:22
SotM

Цитата:
Где можно все необходимое для этого скачать?

Раньше уже выкладывал ссылки:
http://forum.ru-board.com/topic.cgi?forum=5&topic=27438&start=600#11
Автор: nOobCrafter
Дата сообщения: 26.08.2008 14:31
Все спасибо заработало все!!) А вот и не все((
Теперь почему то когда нет указанной папки, то как и положено чекбоксы непоказывают, но инсталяции тоже нет, пишет мол List Index out of bounds, как я уже понял из практики ругается потому что чекбоксов к которым обращаются
просто нету, и нужно задать условие как выше, (по наличию папки) но невыходит(((((

[more=Код]var
AddCheckBoxExist:boolean;

Procedure InitializeWizard;
begin
AddCheckBoxExist:=False;
end;

function BackButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID=wpSelectTasks then AddCheckBoxExist:=False;
Result:=True;
end;

procedure CurPageChanged(CurPageID: Integer);
Begin
if DirExists('C:\Rovalant') then
if (CurPageID = wpSelectTasks) and not AddCheckBoxExist then begin
begin
    begin
WizardForm.TasksList.AddCheckBox('1', '', 0, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.1', '', 1, True, True, False, True, nil)
WizardForm.TasksList.AddCheckBox('1.2', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.3', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.4', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.5', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.6', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.7', '', 1, True, True, True, True, nil)
WizardForm.TasksList.AddCheckBox('1.8', '', 1, True, True, True, True, nil)
    end;
AddCheckBoxExist:=True;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall and DirExists('C:\Rovalant') then begin // мне кажеться что надо тут добавить условие, но у меня невыходит(((
if WizardForm.TasksList.Checked[5] = True then
begin

end;
if WizardForm.TasksList.Checked[6] = True then
begin

end;

if WizardForm.TasksList.Checked[7] = True then
begin

end;

if WizardForm.TasksList.Checked[8] = True then
begin

end;

if WizardForm.TasksList.Checked[9] = True then
begin

end;

if WizardForm.TasksList.Checked[10] = True then
begin

end;

if WizardForm.TasksList.Checked[11] = True then
begin

end;

if WizardForm.TasksList.Checked[12] = True then
begin

end;
end;
end;[/more]
Автор: Victor_Dobrov
Дата сообщения: 26.08.2008 14:53
SotM
Цитата:
Где можно все необходимое для этого скачать? Понравилось сворачивание чекбоксов, а так же диалоговое окно создания ярлыков в разных местах.

Про чекбоксы Sampron сказал, а такая страница выбора ярлыков будет в новой Corona Skin, которая в процессе завершения...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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