PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]


Страниц : 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

ValeraVentor@fb
25-02-2015, 19:28
Подскажите пожалуйста, Inno setup пользуюсь не часто, написал скрипт инсталлятор в котором две игры, все нормально запускается, при выборе компонентов можна выбрать какую игру ставить, или все ставить. Но если ничего не выбрать (тоесть снять все галочки) установку все равно можна продолжить и установиться только деисталлятор. Как сделать чтобы при выборе компонентов невозможно было продолжить установку если не выбран не один компонент?

kotyarko@fb
25-02-2015, 19:33
Как сделать чтобы при выборе компонентов невозможно было продолжить установку если не выбран не один компонент? »
Function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectComponents:
begin
if WizardSelectedComponents(False) = '' then
begin
MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
Result := False;
end;
end;
end;
end;

ValeraVentor@fb
25-02-2015, 19:41
Спасибо большое. А то из за такой ерунды целый день потратил)

MogilShik2007
26-02-2015, 20:10
Всем прив, возник такой вопрос как реализовать такую фичу, нужно чтоб из папки Redist устанавливалась полная версия DirectX, а после запускался DirectXweb (так как DirectXweb работает через пень колоду, а при отсутствии 9 версии на компе тупо на это забивает)?
Видел в каком то инсталле такую фичу - там при выборе компонентов было установить/обновить DX, есесно до кода не добраться, но при распаковке и просмотре видел, что в папке находились, как полная версия DX, так веб.

И еще, что за параметры постоянно прописывают (для чего они):
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs; Check: CheckError;
Source: "calc.exe"; DestDir: "{app}"; DestName: nfs.exe; Flags: external; Check: CheckError;

kotyarko@fb
26-02-2015, 21:25
что за параметры постоянно прописывают (для чего они) »
В справке всё есть (http://www.jrsoftware.org/ishelp/index.php?topic=filessection).

MogilShik2007
26-02-2015, 22:01
В справке всё есть. »
Вопрос что ли не ясен, я не про флаги спрашиваю, а для чего конкретно эту хрень используют:
Source: {win}\help\; DestDir: {app}\Files
Source: "calc.exe"; DestDir: "{app}"

kotyarko@fb
26-02-2015, 22:05
Вопрос что ли не ясен »
Да.

Dodakaedr
26-02-2015, 22:54
Вопрос что ли не ясен, я не про флаги спрашиваю, а для чего конкретно эту хрень используют: »
для примера

jack_nuclear
27-02-2015, 02:41
MogilShik2007, вам дали ссылку на справку, где описывается ваш вопрос. Впадлу читать? Идите лесом тогда...

Котярко спасибо за скрипт прошлый. Все работает. Не обращай внимание на неадекватов

Nordek
27-02-2015, 06:56
MogilShik2007, "Не борзей".
Вопрос что ли не ясен, я не про флаги спрашиваю, а для чего конкретно эту хрень используют: »И другие не поняли вашего вопроса, и вы не поняли чего хотите.
То что вы поправили себя и написали что:
я не про флаги спрашиваю »
в этом вы сильно ошибаетесь. Flags ещё как вас интересует, только вы сами об этом даже не подозреваете.
Кстати, Flags играет не малую роль.

Смотрите сами:
Вы создали проект.
Например проект будет расположен в "D:\Project", т.е на Локальном диске "D:\", в папке "Project".
В папке "Project" у вас будет скрипт "iss" с содержимым:
[Setup]
AppName=Test
AppVersion=1.1
DefaultDirName={pf}\Test

[Files]
Source: {win}\help\; DestDir: {app}\Files; Flags: external


Константа {win} - Это "C:\Windows\", т.е папка "Windows" расположенная на Локальном диске "C:\"

Этот скрипт:
[Setup]
AppName=Test
AppVersion=1.1
DefaultDirName={pf}\Test

[Files]
Source: {win}\help\; DestDir: {app}\Files; Flags: external

отработает как надо.

А этот:
[Setup]
AppName=Test
AppVersion=1.1
DefaultDirName={pf}\Test

[Files]
Source: {win}\help\; DestDir: {app}\Files

уже нет.

external - Означает "Внешний", т.е данный Flags указывает "Inno Setup" не компилировать файл и/или содержимое каталога указанные в качестве источника в дистрибутив, а копировать уже существующее содержимое из дистрибутива или с компьютера пользователя.

Получается, что, если у вас будет:
Source: {win}\help\; DestDir: {app}\Files; Flags: external

то компиляция пройдёт успешно и при инсталляции, содержимое будет скопировано из "C:\Windows\help\" в назначенную папку.
При компиляции, файлы в инсталлятор не будут помещены т.к при инсталляции, они будут браться из внешнего источника.

А если у вас будет:
Source: {win}\help\; DestDir: {app}\Files

то уже, скомпилировать не получится т.к будет воспроизведена попытка скомпилировать содержимое из "D:\Project\{win}\help\" в инсталлятор.

Также важно:
recursesubdirs - Обрабатывать подкаталоги
Указывает компилятору или мастеру искать исходный файл (каталог) заданный именем/шаблоном также и в подкаталогах исходного каталога.

createallsubdirs - Создавать все подкаталоги
По умолчанию компилятор пропускает пустые каталоги, имена которых совпадают с данным именем/шаблоном и которые являются вложенными подкаталогами исходного каталога. Флаг "Создавать все подкаталоги (recursesubdirs)" указывает Мастеру создавать эти каталоги во время установки (точно так же, как если бы вы создали их в секции "Файлы и каталоги [Dirs]". Должен использоваться совместно с флагом "Обрабатывать подкаталоги (recursesubdirs)")

И опять не всё.
skipifsourcedoesntexist - этот Flags у вас в скрипте не указан.

skipifsourcedoesntexist - Пропустить, если нет источника.
Этот флаг при совместном использовании флагом "Внешний (external)" указывает компилятору или Мастеру продолжить установку не выводя сообщение об ошибке если исходный файл не существует.

Кстати, если будет указано:
Source: {win}\help\; DestDir: {app}\Files то при инсталляции будут созданы пустые каталоги.
а если Source: {win}\help\*; DestDir: {app}\Files то при инсталляции будут созданы каталоги и скопировано всё содержимое .

jack_nuclear, "Не лезь, если не понял".
Впадлу читать? »Могу задать аналогичный встречный вопрос: Впадлу воспользоваться поиском? Результат: #265 (http://forum.oszone.net/post-2136581-265.html).
Не думайте что вы от других чем-то отличаетесь.

MogilShik2007
27-02-2015, 08:03
Такс, сначала:
интересует - функции этих строк, для чего они:
Source: {win}\help\; - вызывается справка оттуда или что?
Source: "calc.exe"; - проверка хешей или наподобии?

в этом вы сильно ошибаетесь. Flags ещё как вас интересует, только вы сами об этом даже не подозреваете.
Кстати, Flags играет не малую роль. »
По флагам повторяюсь вопросов не было, и так понятно, что используются и где используются.

MogilShik2007, вам дали ссылку на справку, где описывается ваш вопрос. Впадлу читать? Идите лесом тогда...
Котярко спасибо за скрипт прошлый. Все работает. Не обращай внимание на неадекватов »
Ты коней осади, помогли с кодом вали дальше, и не хами тут.

Zabeal
27-02-2015, 08:06
Друзья, помогите разобраться с задачей.

Мне нужно записать в реестр несколько значений. Заранее количество значений не известно и будет вычисляться на этапе выполнения.
Для реализации задачи я применяю пользовательский макрос с директивой #for:
#for {i = 1; i <= count; i++} _GetAutoLoad

Возник вопрос: можно ли пробросить переменную из секции в директиву #for пользовательского макроса?
Цель: количество итераций цикла должно быть не константой, заданной на этапе компиляции, а переменной, вычисляемой в коде в InitializeWizard.
В моём случае для переменной count нужно присвоить значение переменной GlobalCount.
Пытался в скрипте указать такую конструкцию: #define count {#GlobalCount}, но конечно не прошло.

Выборка из скрипта:

[CODE]
[Registry]
#define i
#define count {#GlobalCount}

#sub _GetAutoLoad
Root: HKCU; Subkey: {code:GetAutoload|{#i}}
#endsub

#for {i = 1; i <= count; i++} _GetAutoLoad


/////////////////////////////////////////////////
[ Code]
const
MapInfoPath = 'SOFTWARE\MapInfo\MapInfo\Professional\';
var
GlobalCount : integer;
function GetAutoload(Param : string) : string;
begin
Result := MapInfoPath + 'FLD-' + Param;
end;
procedure InitializeWizard;
begin
// Тут вычисляется значение для переменной GlobalCount
GlobalCount := XYZ;
end;

Nordek
27-02-2015, 09:06
вызывается справка оттуда или что? »Вообще да, в С:\Windows\Help - Расположена справочная информация.
Для примера: Диспетчер устройств - "C:\Windows\Help\mui\0419\devmgr.CHM"

проверка хешей или наподобии? »

Т.е
[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs
Source: "calc.exe"; DestDir: "{app}"; DestName: nfs.exe; Flags: external

Скопировать: Содержимое из "C:\Windows\Help" и файл калькулятора из "C:\Windows\System32\" в назначенную папку и запустить оттуда? Радикальное решение! Таковое действие можно обозначить как человеческой тупостью.

Выполнение возможно без копирования:
[Run]
Filename: {sys}\calc.exe; Flags: skipifdoesntexist postinstall nowait; Description: "Открыть ""Калькулятор""."
Filename: {win}\Help\mui\0419\devmgr.CHM; Flags: skipifdoesntexist postinstall shellexec nowait; Description: "Открыть справку по ""Диспетчеру устройств""."



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

jack_nuclear
27-02-2015, 09:11
Цитата Nordek:
Могу задать аналогичный встречный вопрос: Впадлу воспользоваться поиском? Результат: #265.
Не думайте что вы от других чем-то отличаетесь. »


А этот пост к чему? Сначала смотри кто спрашивал, лол xD Ники не перепутал? Я вроде не ValeraVentor@fb =)

Да. Отличаюсь. Я наизусть знаю справку и не спрашиваю то. что в ней написано, как 99% пользователей

MogilShik2007 А ты еще задай тупейший вопрос, который написан в первых двух предложениях справки. Меня такие люди поражают своей безмозглостью.

Nordek
27-02-2015, 09:37
jack_nuclear, #1009 (http://forum.oszone.net/post-2200990-1009.html)

jack_nuclear
27-02-2015, 09:48
Nordek, Ай-ай-ай. Это опять не то, что я спрашивал. Перед тем, как пытаться вы*бнутся - надо быть уверенным на все 100% =)

котярко меня понял и кинул ссылкой на правильную реализацию. Я задавал конкретный вопрос под конкретные задачи, а не "дайте мне реализацию звуков в компонентах" + Вы дали ссылку на "говнокод". Реализация ужасная.

Ваши 2 попытки не удались. Третья будет?

Nordek
27-02-2015, 09:58
А ты еще задай тупейший вопрос »Какой тупой вопрос?
Вот этот? »
интересует - функции этих строк, для чего они:
Source: {win}\help\; - вызывается справка оттуда или что?
Source: "calc.exe"; - проверка хешей или наподобии? »

jack_nuclear, Задайте себе вопрос: "Смогли его объяснить?".
На сколько я понял, MogilShik2007 - а интересовало зачем применили подобное:
[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs
Source: "calc.exe"; DestDir: "{app}"; DestName: nfs.exe; Flags: external

и для каких целей.
Что однозначно ясно: Для примера, но не для последующего исполнения.
Меня такие люди поражают своей безмозглостью. »Не буду показывать пальцем и переходить на личности, но о написанном предложении направленное другому человеку, стоит думать: что то предложение больше относится тому, кто его написал.

jack_nuclear, Научитесь цитировать.

jack_nuclear
27-02-2015, 10:04
Цитата Nordek:
Не буду показывать пальцем и переходить на личности, но о написанном предложении направленное другому человеку, стоит думать: что то предложение больше относится тому, кто его написал. »


Видимо вы из той же партии. Ну сидите-сидите. Объясняйте друг другу справку (да-да. Справка -> Files и там написано что к чему) раз вы только на это способны. Люди хотят ремонтировать двигатель, но инструментов в глаза не видели. Человек не понимает азов (что вообще делает Files -> Source) и не читает справку

+Если не знаешь зачем, но есть пример - скомпилируй и нечего форум засорять тупейшими вещами. Я за 8 закрытых тем первый раз обратился с умным вопросом. В первых темах люди были умней. Деградируете. Объяснять справку!! ахаха))

Цитата Nordek:
jack_nuclear, Научитесь цитировать. »
С телефона? Пожалуйста, перестаньте умничать. Смотритесь жалким, когда в 5-ый раз не получается

MogilShik2007
27-02-2015, 10:56
Цитата jack_nuclear:
MogilShik2007 А ты еще задай тупейший вопрос, который написан в первых двух предложениях справки. Меня такие люди поражают своей безмозглостью. »

Глаза помой, походу долбишься в них постоянно, если ума не хватает понять вопроса - помалкивай.
Nordek вопрос понял, объяснил, а ты сидишь тут вые..ваешсься.

Так с этим разобрались, что по поводу первой части вопроса про реализацию DX?

jack_nuclear
27-02-2015, 11:54
Цитата MogilShik2007:
Так с этим разобрались, что по поводу первой части вопроса про реализацию DX? »


Это описано в СПРАВКЕ, долбень. Мне хватает мозгов, что б написать инсталл в 1500 строк, а ты сиди на примерах с инета. По поводу DX смотри в справке и примерах с [Run] или для твоего начального уровня - напиши батник на запуск 2 екзешников типо такого

@ECHO OFF
START "" /WAIT Setup1.exe
START "" Setup2.exe

и запускай через него компонент. Примеров в инете куча (проверил гуглением). Дерзай

Этот вопрос не тупой и тут надо хоть что-то знать, поэтому ответил.

Для "умных" - я дал самую простую реализацию. Можно и в компоненты добавить, но с задержкой придется мучатся или через exec (лучший вариант)

Примеры:
Exec('шляпа.exe', 'параметры', 'C:\путь', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode); //тебе нужен ewWaitUntilTerminated

функция:
function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;




© OSzone.net 2001-2012