Установка задач или компонентов "с зависимостями"

Александр85

Новичок
Здравствуйте!
Подскажите, пожалуйста, как через секцию Tasks или Code можно реализовать установку определенных задач-компонентов, чтобы один зависел от другого? Т.е, например, пользователь поставил галочку на первом пункте, тогда будет доступен подпункт 1 под основной задачей (но пользователь может и отказаться от выбора подпункта) и т.п., если он этого не выбрал, то не будет доступно.
Также как можно вынести несколько задач, "только для ознакомления", - чтобы пункты отобржались, но галочки с этих пунктов снять нельзя было?
 

HandyMan

Новичок
Код:
; -- Components.iss --
; Demonstrates a components-based installation.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!

[Setup]
AppName=My Program
AppVersion=1.5
WizardStyle=modern
DefaultDirName={autopf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output

[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help File"; Types: full
Name: "readme"; Description: "Readme File"; Types: full
Name: "readme\en"; Description: "English"; Flags: exclusive
Name: "readme\de"; Description: "German"; Flags: exclusive

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: program
Source: "MyProg.chm"; DestDir: "{app}"; Components: help
Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
 

Yaroslav950

Участник
@Александр85,если у вас не простой инсталятор, то делайте через лейблы. C такими же наборами команд.
 

Александр85

Новичок
Код:
; -- Components.iss --
; Demonstrates a components-based installation.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!

[Setup]
AppName=My Program
AppVersion=1.5
WizardStyle=modern
DefaultDirName={autopf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output

[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help File"; Types: full
Name: "readme"; Description: "Readme File"; Types: full
Name: "readme\en"; Description: "English"; Flags: exclusive
Name: "readme\de"; Description: "German"; Flags: exclusive

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: program
Source: "MyProg.chm"; DestDir: "{app}"; Components: help
Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Спасибо, конечно, но именно на этот вариант я и натыкаюсь по всему Интернету )) А как сделать только полная установка - вообще БЕЗ участия пользователя и выборная, в этом скрипте 3 варианта Полная. Компактная и выборочная, мне не нужна компактная + в выборочной мне нужно, то что я оисал выше зависимость основной задачи и подпукта, те., ну условно говоря выбрал пользователь установить DurectX и становится активным еще подпукт, хочет он поставит галочку на нём, не хочет не поставит или при выюоре задачи основной пусть галочка на подпункте ставится автоматом, но пользователь может её снять
P.S. В общем и грубо говоря как сделать такой же выбор как вот при установке кодеков, например K-Lite, с пунктами, подпунктами и не снимаемыми галочками на чём-то основном?
 

Crachlow

Старожил
Здравствуйте!
Подскажите, пожалуйста, как через секцию Tasks или Code можно реализовать установку определенных задач-компонентов, чтобы один зависел от другого? Т.е, например, пользователь поставил галочку на первом пункте, тогда будет доступен подпункт 1 под основной задачей (но пользователь может и отказаться от выбора подпункта) и т.п., если он этого не выбрал, то не будет доступно.
Также как можно вынести несколько задач, "только для ознакомления", - чтобы пункты отобржались, но галочки с этих пунктов снять нельзя было?
Код:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Components]
Name: a; Description: Father; Flags: checkablealone; Types:Full
Name: a\b; Description: child1; Flags: dontinheritcheck
Name: a\c; Description: child2;  Flags: dontinheritcheck
 
Последнее редактирование:

Александр85

Новичок
Вот мне нужно, что-то типа вот этого условно, говоря, как в пакете кодеков:
76654.jpg
Также вот, примерно - выбрал пункт и стали доступны подпункты + чтобы были те пункты которые визуально есть, но их отметить или снять галочку с них нельзя! по умолчанию, нужно чтобы галочки стояли на всём.
 

Crachlow

Старожил
Вот мне нужно, что-то типа вот этого условно, говоря, как в пакете кодеков:
Посмотреть вложение 7506
Также вот, примерно - выбрал пункт и стали доступны подпункты + чтобы были те пункты которые визуально есть, но их отметить или снять галочку с них нельзя! по умолчанию, нужно чтобы галочки стояли на всём.
В inno 5 это реализуется очень сложно, библиотеку тащить нужно дополнительную. Ставить на таймер, что бы реализовать перерисовку в реальном времени(на просторах нета где то есть пример). Если методами только инно 5 то это действует только до момента пока ты не щелкнешь по родителю. Пример
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Components]
Name: a; Description: ****Father******; Types:Full
Name: a\b; Description: child1; Types:Full; Flags: fixed
Name: a\c; Description: child2; Types:Full
Name: a\d; Description: child2; Types:Full
Name: a\e; Description: child2; Types:Full
 
Последнее редактирование:

Crachlow

Старожил
Вот мне нужно, что-то типа вот этого условно, говоря, как в пакете кодеков:
Посмотреть вложение 7506
Также вот, примерно - выбрал пункт и стали доступны подпункты + чтобы были те пункты которые визуально есть, но их отметить или снять галочку с них нельзя! по умолчанию, нужно чтобы галочки стояли на всём.
Зачем тебе это вообще нужно? Показ ради показа. Делай под одним компонентом, в описании добавь что он включает.
 

Александр85

Новичок
В inno 5 это реализуется очень сложно, библиотеку тащить нужно дополнительную. Ставить на таймер, что бы реализовать перерисовку в реальном времени(на просторах нета где то есть пример). Если методами только инно 5 то это действует только до момента пока ты не щелкнешь по родителю. Пример
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Components]
Name: a; Description: ****Father******; Types:Full
Name: a\b; Description: child1; Types:Full; Flags: fixed
Name: a\c; Description: child2; Types:Full
Name: a\d; Description: child2; Types:Full
Name: a\e; Description: child2; Types:Full
Да мне и не нужно ничего супер-красивого. Просто получается очень много пунктов!
С подпунктами-то удобнее было бы? Мне даже Компоненты не нужны, нужна просто страница на которой стоят галочки напротив пункта, без какого-то выбора Полной или выборочной установки. У меня по умолчанию проставлены галочки на всех пунктах, если пользователя всё устараивает, он тупо жмёт далее и все, если нет, снимает галочку с ненужного ему пункта.

А то мне для каждого приходится писать:

1. Установить "1" с... чем-то (по умолчанию тут галочка стоит)
2. Установить "1" БЕЗ... чего-то
3. Не устанавливать "1" вообще
4. Установить "2" с... чем-то (по умолчанию тут галочка стоит)
5. Установить "2" БЕЗ... чего-то
6. Не устанавливать "2" вообще

А если было бы можно с подпунктами, то пользователь выбрал бы нужный пункт и становится активными подпункты... т.е.:

Установить 1:
  • Подпункт С
  • подпункт Без
Установить 2:
  • Подпункт С
  • подпункт Без
Если пользователь не выбирает этот пункт (снимает с него галочку), то и устанавливаться этот "1" или "2" вообще не будет! И не придётся 3 варианта для каждого писать, а у меня таких десятки пунктов!
 
Последнее редактирование:

Crachlow

Старожил
Да мне и не нужно ничего супер-красивого. Просто получается очень много пунктов!
С подпунктами-то удобнее было бы? Мне даже Компоненты не нужны, нужна просто страница на которой стоят галочки напротив пункта, без какого-то выбора Полной или выборочной установки. У меня по умолчанию проставлены галочки на всех пунктах, если пользователя всё устараивает, он тупо жмёт далее и все, если нет, снимает галочку с ненужного ему пункта.

А то мне для каждого приходится писать:

1. Установить "1" с... чем-то (по умолчанию тут галочка стоит)
2. Установить "1" БЕЗ... чего-то
3. Не устанавливать "1" вообще
4. Установить "2" с... чем-то (по умолчанию тут галочка стоит)
5. Установить "2" БЕЗ... чего-то
6. Не устанавливать "2" вообще

А если было бы можно с подпунктами, то пользователь выбрал бы нужный пункт и становится активными подпункты... т.е.:

Установить 1:
  • Подпункт С
  • подпункт Без
Установить 2:
  • Подпункт С
  • подпункт Без
Если пользователь не выбирает этот пункт (снимает с него галочку), то и устанавливаться этот "1" или "2" вообще не будет! И не придётся 3 варианта для каждого писать, а у меня таких десятки пунктов!
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Components]
Name: a; Description: ****Это компонент1******; Flags: checkablealone; Types: Full
Name: a\d; Description: Его сопутствующий;
Name: b; Description: ****Это компонент2******; Flags: checkablealone; Types: Full
Name: b\c; Description: Его сопутствующий;
 
Последнее редактирование:

Александр85

Новичок
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Components]
Name: a; Description: ****Это компонент1******; Flags: checkablealone; Types: Full
Name: a\d; Description: Его сопутствующий;
Name: b; Description: ****Это компонент2******; Flags: checkablealone; Types: Full
Name: b\c; Description: Его сопутствующий;
Спасибо! А без компактной установки никак?
 

Александр85

Новичок
Ты ее обозвать можешь как хочешь в секции [Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom
Так вы поймите она мне НЕ нужна вообще - эта компактаная, как её НЕ назови! )) Мне даже полная установка НЕ нужна! есть то, что устанавливается БЕЗ участия пользоватля хоть он об стенку ударится )) Поэтому я и спрашивал выше как его об этом информировать, в виде НЕ снимаемых галочек на пунктах., а так мне просто нужна страница (я все остальные скрыл, сразу при запуске открвается вот эта с выбором, где пользователь может хоть какое-то участие проявить и выбрать то, что ему нужно из того, что доступно. Полная установка и так подразумевает, что пользоатль ничего не сделает - выборочная, то что он что-то выберет, а компактаная зачем? )) Есть Всё - установить БЕЗ пользователя и есть - на выбор! Третьего НЕ дано ,как говорится ) Вообще выбор - это зло, конечно для пользователя )
 
Последнее редактирование:

Crachlow

Старожил
Так вы поймите она мне НЕ нужна вообще - эта компактаная, как её НЕ назови! )) Мне даже полная установка НЕ нужна! есть то, что устанавливается БЕЗ участия пользоватля хоть он об стенку ударится )) Поэтому я и спрашивал выше как его об этом информировать, в виде НЕ снимаемых галочек на пунктах., а так мне просто нужна страница (я все остальные скрыл, сразу при запуске открвается вот эта с выбором, где пользователь может хоть какое-то участие проявить и выбрать то, что ему нужно из того, что доступно. Полная установка и так подразумевает, что пользоатль ничего не сделает - выборочная, то что он что-то выберет, а компактаная зачем? )) Есть Всё - установить БЕЗ пользователя и есть - на выбор! Третьего НЕ дано ,как говорится ) Вообще выбор - это зло, конечно для пользователя )
ComponentPage := CreateInputOptionPage(wpSelectComponents, 'Component Page', 'Selected comps', 'Choose few component', False, True);
with ComponentPage.CheckListBox do
begin
ShowLines := True;
Flat := True;
WantTabs := True;
AddCheckBox('IS 1', '', 0, True, True, True, True, nil);
AddCheckBox('IS 2', '', 1, True, True, False, False, nil);
AddCheckBox('Is 3', '', 1, True, True, False, False, nil);
AddCheckBox('IS 4', '', 0, True, True, True, True, nil);
AddCheckBox('IS 5', '', 1, True, True, False, False, nil);
AddCheckBox('IS 6', '', 1, True, True, False, False, nil);
 
Последнее редактирование:

Александр85

Новичок
with ComponentPage.CheckListBox do
begin
ShowLines := True;
Flat := True;
WantTabs := True;
AddCheckBox('IS 1', '', 0, True, True, True, True, nil);
AddCheckBox('IS 2', '', 1, True, True, False, False, nil);
AddCheckBox('Is 3', '', 1, True, True, False, False, nil);
AddCheckBox('IS 4', '', 0, True, True, True, True, nil);
AddCheckBox('IS 5', '', 1, True, True, False, False, nil);
AddCheckBox('IS 6', '', 1, True, True, False, False, nil);
А, чтобы и мне с IQ 60, который зачем-то куда ещё и лезет, было понятно куда это надо и как добавить?!
 

Crachlow

Старожил
А, чтобы и мне с IQ 60, который зачем-то куда ещё и лезет, было понятно куда это надо и как добавить?!
procedure InitializeWizard;
begin
ComponentPage := CreateInputOptionPage(wpSelectComponents, 'Component Page', 'Selected comps', 'Choose few component', False, True);
with ComponentPage.CheckListBox do
begin
ShowLines := True;
Flat := True;
WantTabs := True;
AddCheckBox('IS 1', '', 0, True, True, True, True, nil);
AddCheckBox('IS 2', '', 1, True, True, False, False, nil);
AddCheckBox('Is 3', '', 1, True, True, False, False, nil);
AddCheckBox('IS 4', '', 0, True, True, True, True, nil);
AddCheckBox('IS 5', '', 1, True, True, False, False, nil);
AddCheckBox('IS 6', '', 1, True, True, False, False, nil)
end;
end;
 
Сверху