Ekspoint 2,122 #324806 Posted April 22, 2016 В инсталляторе? Проверь актуальность библиотеки. была старая, ща все ок как в CurPageChanged сделать проверку на страницу есть ли она или нет? нужно для этого procedure NextButtonChanged(CurPageID: Integer); begin if CurPageID = wpSelectTasks then begin WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall); end else if CurPageID = ISCustomPage7.ID then begin WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall); end; end; как правильно записать? Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #324832 Posted April 22, 2016 (edited) как в CurPageChanged сделать проверку на страницу есть ли она или нет?нужно для этого Отображение страниц wpSelectTasks или ISCustomPage7 зависит от чего-то в ходе работы программы? Если да, то какая страница и от чего зависит? Просто проверку можно делать опираясь на эти зависимости. Каждая стандартная страница есть всегда для самой программы, а вот показывается ли она пользователю - другой вопрос (кроме случаев со страницами, которые могут отключаться через [setup], тут проверку можно делать препроцессором). Что касается кастомных страниц, то тут всё зависит от того, как реализовано её создание. Например, если она создаётся всегда и в зависимости от определённых параметров, выбираемых пользователем, пропускается (ShouldSkipPage и т.д.), то это не совсем правильно. Т.к. она будет существовать вне зависимости от параметров, выбранных пользователем. И подобную проверку не сделать (разве что вводить сторонние переменные, от которых будет определяться её отображение). Если же страница создаётся на определённом этапе (что всё же правильней в твоём случае), то можно будет проверять её наличие. Типа такого: procedure NextButtonChanged(CurPageID: Integer); begin if Assigned(ISCustomPage7) then if CurPageID = ISCustomPage7.ID then begin WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall); end; else if CurPageID = wpSelectTasks then WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall); end; Edited April 22, 2016 by Kotyarko_O 1 Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #324847 Posted April 22, 2016 @Kotyarko_O, если есть [tasks] то заменять кнопку на стр таска, если нет то заменять на ISCustomPage7 Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #324849 Posted April 22, 2016 (edited) если есть [tasks] то заменять кнопку на стр таска, если нет то заменять на ISCustomPage7 Пфф. Тогда динамики тут никакой нет и придумывать ничего не надо, всё же очевидно. Редактируй перед компиляцией да и всё. Вводишь секцию [Tasks] - пишешь "CurPageID = wpSelectTasks"; убираешь секцию - "CurPageID = ISCustomPage7.ID". Edited April 22, 2016 by Kotyarko_O Quote Share this post Link to post Short link Share on other sites
westfeld 0 #326247 Posted May 6, 2016 Всем привет Нужна помощ по такому вопросу. Есть три разные папки но с одинаковыми файлами внутри. Не спрашивайте почему и зачем так но так надо ) Хочется запаковать эти папки в инсталятор так что бы эти папки со своим содержимым не копировались внутрь самого установочного файла три раза , а только один ведь файлы внутри одинаковые. А при установки инсталятор их содержимое разбросал бы по трем папкам сам. Пробовали три раза указать один и тотже source но разные distdir но выходит по логу что инсталятор все равно копирует в установочный файл все 3 раза одну и ту же папку. Такое реально сделать вобще или нет ? Quote Share this post Link to post Short link Share on other sites
Yusha 8 #326270 Posted May 6, 2016 Всем привет Нужна помощ по такому вопросу. Есть три разные папки но с одинаковыми файлами внутри. Не спрашивайте почему и зачем так но так надо ) Хочется запаковать эти папки в инсталятор так что бы эти папки со своим содержимым не копировались внутрь самого установочного файла три раза , а только один ведь файлы внутри одинаковые. А при установки инсталятор их содержимое разбросал бы по трем папкам сам. Пробовали три раза указать один и тотже source но разные distdir но выходит по логу что инсталятор все равно копирует в установочный файл все 3 раза одну и ту же папку. Такое реально сделать вобще или нет ? Чтобы не заморачиваться с кодом паскаля могу предложить такую схему: Упаковываем все файлв в инталлятор и распаковываем их все в ТМП... Source: {papka}\1.json; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall; Components: c1 c2 c3 Затем устанавливаем из ТМП туда, куда надо: Source: {tmp}\1.json; DestDir: {app}\res_mods\1\; Flags: external ignoreversion skipifsourcedoesntexist; Components: c1 Source: {tmp}\1.json; DestDir: {app}\res_mods\2\; Flags: external ignoreversion skipifsourcedoesntexist; Components: c2 Source: {tmp}\1.json; DestDir: {app}\res_mods\3\; Flags: external ignoreversion skipifsourcedoesntexist; Components: c3 по логу что инсталятор все равно копирует в установочный файл все 3 раза Честно говоря, был уверен, что инно умнее и 3 раза одну и ту же папку тащить не станет... даже не думал, что такая подстава может быть. 2 1 Quote Share this post Link to post Short link Share on other sites
westfeld 0 #326276 Posted May 6, 2016 Спасибо за помощ Какая то ерунда творится. По логам он вроде бы пробегает по одной и той же папке несколько раз, а в итоге в инсталятор пакует только один раз. Сейчас для теста положил в одну папку архив с видосом на 100 мегабайт и написал в коде source тестовой папки destdir 5 раз с разными именами, в итоге размер инсталятора ни стал 500 мегабайт и больше. Получается инно все таки это отслеживает и в логах пишет одно а на самом деле не пакует все по нескольку раз. У нас просто папки были не большие по размерам вот и не могли сразу проверить как оно работает и ориинтрировались только на лог ) Извиняюсь за беспокойство. Проблема снята. Quote Share this post Link to post Short link Share on other sites
voin_123 5 #327194 Posted May 14, 2016 (edited) Доброе время суток! У кого-то есть пример скрипта кнопки доната? Edited May 14, 2016 by voin_123 Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #327202 Posted May 14, 2016 У кого-то есть пример скрипта кнопки доната ( Похожую на мод пак от Kotyarko_O)? Только там у меня не кнопки доната, а просто переход по ссылкам. Но думаю, это тебе и нужно. Сделано просто: ботвой загружается изображение (здесь), сверху накладывается прозрачный лейбл (здесь), в котором выполняется действие при нажатии (здесь). Но можно сделать и лучше, применив только ботву. Quote Share this post Link to post Short link Share on other sites
BeJIuKuu_TaHKoBbIu_BouH 4 #327393 Posted May 15, 2016 (edited) del Edited October 19, 2016 by gad_575__2 Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #327395 Posted May 15, 2016 Народ, всем привет! Есть какой-нибудь скрипт для проверки версии клиента игры перед установкой? на первых стр темы, читай, ищи Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #327400 Posted May 15, 2016 Есть какой-нибудь скрипт для проверки версии клиента игры перед установкой? Function FileVersion(const FilePath: String): String; var oFS: Variant; begin oFS := CreateOleObject('Scripting.FileSystemObject'); try Result := oFS.GetFileVersion(FilePath); except end; end; То есть, в текущий момент, вызов вида: FileVersion(ExpandConstant('{app}\WorldOfTanks.exe')) вернёт: 0.9.14.0. Дальше сравнивайте это со своей объявленной версией. Quote Share this post Link to post Short link Share on other sites
BeJIuKuu_TaHKoBbIu_BouH 4 #327448 Posted May 16, 2016 (edited) del Edited October 19, 2016 by gad_575__2 Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #327454 Posted May 16, 2016 У меня че то не работает! Показывайте код, который у вас не работает. Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #327465 Posted May 16, 2016 (edited) У меня че то не работает! Мне нужно, чтобы на странице с выбором папки с игрой при нажатии на кнопку "Далее" происходила проверка версии клиента игры и, если она не актуальная (то есть не 0.9.14), выводил сообщение типа "Модпак предназначен для версии 0.9.14 игры! Обновите клиент игры до актуальной версии!". 'Code for "wpSelectDir" ' #define WotVersion "0.9.14" #define WotExeVersion "0.9.14.0" [code] function FileVersion(const FilePath: String): String; var oFS: Variant; begin oFS:= CreateOleObject('Scripting.FileSystemObject'); try Result:= oFS.GetFileVersion(FilePath); except end; end; function NextButtonClick(CurPage: Integer): Boolean; begin Result:= true; if CurPage = wpSelectDir then if FileExists(AddBackslash(WizardForm.DirEdit.Text) + 'WorldOfTanks.exe') and (FileVersion(AddBackslash(WizardForm.DirEdit.Text) + 'WorldOfTanks.exe') <> '{#WotExeVersion}') then begin if MsgBox('Моды не подходят к данному патчу World of Tanks!' #13 'Сборка предназначена для версии патча {#WotVersion}' #13#13 'Скачайте актуальную версию на оффициальном сайте сборки.' #13#13 'P.S: Для перехода на сайт сборки нажмите на кнопку диалога в установщике.', mbConfirmation, MB_OK) = idOk then Result := false; end; end; Edited May 16, 2016 by night_dragon_on 1 Quote Share this post Link to post Short link Share on other sites
BeJIuKuu_TaHKoBbIu_BouH 4 #327612 Posted May 17, 2016 (edited) del Edited October 19, 2016 by gad_575__2 Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #327614 Posted May 17, 2016 [Code] function FileVersion(const FilePath: String): String; var oFS: Variant; begin oFS:= CreateOleObject('Scripting.FileSystemObject'); try Result:= oFS.GetFileVersion(FilePath); except end; end; function FileVersionMsgBox(const FilePath: String): String; begin GetVersionNumbersString(FilePath, Result) Result := Copy(Result,1,6); end; //"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""// Function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; case CurPageID of wpSelectDir: begin if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then begin MsgBoxEx(0, 'Установка модов невозможна, так как по выбранному пути отсутствует клиент игры World of Tanks. Выберите правильный путь и продолжайте установку!','Внимание!!',MB_OK or MB_ICONERROR, 0, 0); Result := False; end; if FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then begin if FileVersion(ExpandConstant('{app}\WorldOfTanks.exe')) < '{#Patch}.0' then begin MsgBoxEx(WizardForm.Handle, 'Моды не будут работать на данной версии игры [' + FileVersionMsgBox(ExpandConstant('{app}\WorldOfTanks.exe')) + '] ! Моды предназначены для версии патча [{#Patch}] ', 'Моды не подходят к данному патчу World of Tanks', MB_OK or MB_ICONWARNING, 0, 0); Result:= false; end; if FileVersion(ExpandConstant('{app}\WorldOfTanks.exe')) > '{#Patch}.0' then begin MsgBoxEx(WizardForm.Handle, 'Моды не будут работать на данной версии игры [' + FileVersionMsgBox(ExpandConstant('{app}\WorldOfTanks.exe')) + '] ! Моды предназначены для версии патча [{#Patch}] ', 'Моды не подходят к данному патчу World of Tanks', MB_OK or MB_ICONWARNING, 0, 0); Result:= false; end; end; end; end; end; Quote Share this post Link to post Short link Share on other sites
BeJIuKuu_TaHKoBbIu_BouH 4 #327632 Posted May 17, 2016 (edited) del Edited October 19, 2016 by gad_575__2 Quote Share this post Link to post Short link Share on other sites
BeJIuKuu_TaHKoBbIu_BouH 4 #328000 Posted May 21, 2016 (edited) del Edited October 19, 2016 by gad_575__2 Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #328006 Posted May 21, 2016 на странице с выбором папки при указании такого пути: D:\Games\World_of_Tanks и при нажатии кнопки "Далее" выходит сообщение: "Папка D:\Games\World_of_Tanks уже существует. Все равно установить в эту папку?" Есть какой-нибудь скрипт, чтобы убрать это? [Setup] DirExistsWarning=no Quote Share this post Link to post Short link Share on other sites