Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка приложений (http://forum.oszone.net/forumdisplay.php?f=61)
-   -   Скрипты Inno Setup. Помощь и советы [часть 8] (http://forum.oszone.net/showthread.php?t=294838)

El Sanchez 02-02-2015 08:52 2465013

Скрипты Inno Setup. Помощь и советы [часть 8]
 
Вложений: 3
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6]
Скрипты Inno Setup. Помощь и советы [часть 7]

Farser21 02-02-2015 11:09 2465055

Добрый день уважаемые гуру.
В окне компонентов не работает прокрутка мышкой (прокрутить окно компонентов можно либо скролл баром либо стрелочками на клавиатуре, что не очень удобно.)
Я подозреваю, что данная проблема из-за использования скина либо из-за того, что на окна Components и Tasks, накладывается фоновое изображение.
Как пример прилагаю установщик тык
Можно ли вернуть возможность прокрутки колесом мыши, есди да, то как?

Nordek 02-02-2015 11:31 2465073

Цитата:

Цитата Farser21
Как пример прилагаю установщик тык »

Даже до стартовой страницы инсталлятора не дошло:
1. "Игра World_of_Tanks не найдена! Укажите путь к папке с игрой вручную!"
Имейте ввиду: Пример - это пример, а не готовый инсталлятор. Устанавливать какую-то игру ради проверки, никому не нужно.
2. "Внутренняя ошибка: ExtractTemporaryFile: The file "ProtoSans.ttf" was not found."

Farser21 02-02-2015 11:55 2465089

Nordek, прошу прощения, вот убрал все лишнее тык.

deathid@vk 02-02-2015 13:02 2465135

Добрый день, подскажите пожалуйста, как решить проблему с прогресс баром. Скрипт Metro UI Install.
Сам скрипт - https://yadi.sk/d/RQGO6AmDeQhdb

nik1967 02-02-2015 14:57 2465225

Цитата:

Цитата Okta_333
Просто уже замучилась вшивать в скрипт ISDone 06, вообще ничего не получается (((
И никто помочь не желает.......

Кто не мог прикрутить ISDone 6 final к скрипту Need for Speed™ Undercover - пробуйте. Вроде ошибки все исправил, но нужно погонять ещё, вдруг что вылезет.

MogilShik2007 02-02-2015 16:22 2465282

Блин голова закипел, бред какой-то, почему-то не хотят меняться названия у ярлыков:
Оригинал:
Name: "{group}\{#GameName}"; Filename: "{app}\c3.exe"; WorkingDir: {app}; Comment: "Запустить {#GameName}"; Check: NoIcons and not Install;
Name: "{userdesktop}\{#GameName}"; Filename: "{app}\c3.exe"; WorkingDir: {app}; Check: Desktop and not Install;

Вписываю свое:
Name: "{group}\Хана бобру"; Filename: "{app}\c3.exe"; WorkingDir: {app}; Comment: "Запустить {#GameName}"; Check: NoIcons and not Install;
Name: "{userdesktop}\Хана бобру"; Filename: "{app}\c3.exe"; WorkingDir: {app}; Check: Desktop and not Install;

И нифига, на рабочем столе и в меню пуск, просто белый значок и подпись которая прописана в GameName.


Все разобрался - было двоеточие в названиях ярлыка)))

deathid@vk 02-02-2015 16:36 2465292

Цитата:

Цитата MogilShik2007
Блин голова закипел, бред какой-то, почему-то не хотят меняться названия у ярлыков:
Оригинал:
Name: "{group}\{#GameName}"; Filename: "{app}\c3.exe"; WorkingDir: {app}; Comment: "Запустить {#GameName}"; Check: NoIcons and not Install;
Name: "{userdesktop}\{#GameName}"; Filename: "{app}\c3.exe"; WorkingDir: {app}; Check: Desktop and not Install;
Вписываю свое:
Name: "{group}\Хана бобру"; Filename: "{app}\c3.exe"; WorkingDir: {app}; Comment: "Запустить {#GameName}"; Check: NoIcons and not Install;
Name: "{userdesktop}\Хана бобру"; Filename: "{app}\c3.exe"; WorkingDir: {app}; Check: Desktop and not Install;
И нифига, на рабочем столе и в меню пуск, просто белый значок и подпись которая прописана в GameName. »

Попробуй создай.
#define IconDesktop "Хана бобру"
и вставь
{#IconDesktop}

MogilShik2007 02-02-2015 16:43 2465297

Цитата:

Цитата deathid@vk
Попробуй создай.
#define IconDesktop "Хана бобру"
и вставь
{#IconDesktop} »

Не, не помогает)))

El Sanchez 02-02-2015 20:12 2465401

Цитата:

Цитата Farser21
Я подозреваю, что данная проблема из-за использования скина либо из-за того, что на окна Components и Tasks, накладывается фоновое изображение. »

Farser21, скин убрать, фон оставить - результат в студию; скин врубить, фон убрать - результат в студию; убрать скин и фон - результат в студию.
Цитата:

Цитата deathid@vk
Добрый день, подскажите пожалуйста, как решить проблему с прогресс баром. Скрипт Metro UI Install. »

deathid@vk, было уже: http://forum.oszone.net/post-2388672.html#post2388672

deathid@vk 02-02-2015 20:15 2465405

Цитата:

Цитата El Sanchez

Я видел, но в дело в том, что все равно не работает.

Nordek 02-02-2015 21:54 2465444

Цитата:

Цитата Farser21
Я подозреваю, что данная проблема из-за использования скина »

Вообще, было уже: #2259. Если говорить о скине, то при использовании кода исключительно только скина - то у меня бы тоже не работала прокрутка. Попробовал использовать скин: который использован в вашем инсталляторе - итог: прокрутка работает.

nik1967 03-02-2015 23:00 2465992

deathid@vk, пробуй.

MogilShik2007 04-02-2015 12:57 2466183

Привет. просветите мну)))
В общем создаю фриарком архив кидаю к ехе все путем.
Создаю фриарком архив с шифрованием каталогов и паролем -р -hp при установке кричит IsDone, мол заголовки повреждены.

В общем как создать фриком архив, чтоб нормально работало с шифрованием. И чтоб при попытке открыть сам архив, не открывались внутренности, а запрашивался пасс.

Okta_333 04-02-2015 16:39 2466311

Подскажите пожалуйста.
7z (без сжатия) + Precomp + SRep + FreeArc
Все вроде бы нормально распаковывается, но, архив 7z, тот, который без сжатия, остается в папке с распакованными файлами. Содержимое этого 7z скидывается в указанное место, но и архив остается тоже.
Как можно сделать, чтобы установщик удалял этот архив в конце установки?

Dodakaedr 04-02-2015 16:54 2466320

Okta_333, используйте флаг deleteafterinstall
Код:

Source: "sniper.7z"; DestDir: "{tmp}"; Flags: dontcopy deleteafterinstall

Okta_333 04-02-2015 17:32 2466347

MogilShik2007

Смотрите тут, я спрашивала:
forum.oszone.net/thread-278998-238.html
Там Shift85 указывал где именно в ISDone писать пароль.

В ISDone 05 пароль не срабатывает, а в 06 версии все прекрасно работает.
Единственное что могу от себя добавить, не ставь сильное шифрование, вполне достаточно стандартного (ставьте aes, serpent что-то не переваривает). Команда -hp дает сокрытие каталогов, т.е. никто не увидит что находится в архиве.
Вообще, советую почитать документацию на FreeArc, много нового для себя узнаете.

MogilShik2007 04-02-2015 18:02 2466363

Спасибо, пока ждал ответа прочитал справку по IsDone, но теперь стало интересно у меня IsDone.dll 0.5, если тупо заменить на 0,6 код нужно переписывать или и так сработает?

MogilShik2007 04-02-2015 18:11 2466366

Вложений: 1
Как только пытаюсь подсунуть шифрованный файл к ехе выдает:

Okta_333 04-02-2015 18:13 2466367

MogilShik2007

Нужно подредактировать код.
Сама этого не делала, мне помогли, за что отдельное спасибо пользователю Nik1967, сама пока учусь.

Dodakaedr

Спасибо, попробую!

MogilShik2007 04-02-2015 18:31 2466376

Okta_333,
Можешь скинуть скрины, какие галочки ставишь в FreeArc?

nik1967 04-02-2015 18:37 2466380

Okta_333, а зачем такие сложности: зип - прекомп - среп - арк? Это раньше так делали, сейчас, когда есть CLS (cls-precomp.dll, CLS-srep.dll) распаковка идёт в один заход.

Okta_333 04-02-2015 18:39 2466381

MogilShik2007

Нет, скрины скинуть не смогу, сижу с телефона.
Но по памяти скажу, как сама делала. Заходишь во вкладку Шифрование, указываешь пароль. Далее возвращаешься на первую вкладку и ставишь галочку на Шифрование (алгоритм стандартный, в нем как раз отмечена команда -hp, сокрытие каталогов). Далее архиваруешь.

Nik1967

Вот научиться бы ими пользоваться!!! Я новичок!!!

CLS для меня пока что китайские иероглифы!!! Стараюсь учиться.....

А распаковка этим CLS пошустрее проходит? Или это для простоты использования?

MogilShik2007 04-02-2015 18:59 2466394

Может кто наскоряк переделать скрипт под IsDone 0.6
Вынесено отдельно в модуль.

http://rghost.ru/6XjXpPjGX

MogilShik2007 04-02-2015 19:00 2466395

Цитата Okta_333:
Но по памяти скажу, как сама делала. Заходишь во вкладку Шифрование, указываешь пароль. Далее возвращаешься на первую вкладку и ставишь галочку на Шифрование (алгоритм стандартный, в нем как раз отмечена команда -hp, сокрытие каталогов). Далее архиваруешь. »

Так на вкладке шифрование ты галочки не ставила - Зашифровать каталог архива и Использовать пароль?
Мда, хотя толку все-равно нет, нужно переделывать под IsDone 0.6

Okta_333 04-02-2015 19:09 2466400

MogilShik2007
У меня в алгоритме шифрования стоит -hp

Выглядит это кажется так: aes256 -p? -hp?

Пишу по памяти, так что в алгоритме могу ошибиться, пусть меня поправят знающие люди.

MogilShik2007 04-02-2015 19:13 2466408

Цитата Okta_333:
У меня в алгоритме шифрования стоит -hp
Выглядит это кажется так: aes256 -p? -hp?
Пишу по памяти, так что в алгоритме могу ошибиться, пусть меня поправят знающие люди. »

Да я уже по разному пробовал, ни в какую - исдон 0.5 бунтует)))
Рискнул просто заменил 0.5 на 0.6, ехе собирается, но при запуске кричит, что не может выгрузить исдон во временную папку)))

Okta_333 04-02-2015 19:20 2466419

MogilShik2007

Ну да, нужен 6-й ISDone.
Я бы вам с радостью помогла, но, к сожалению, и себе не смогла помочь в данном вопросе.

deathid@vk 04-02-2015 20:04 2466433

Цитата:

Цитата nik1967
deathid@vk, пробуй. »

не, никаких изменений.

nik1967 04-02-2015 21:17 2466468

Цитата:

Цитата deathid@vk
не, никаких изменений. »

Ну уж, батенька, ищи проблему у себя в системе. Либо внимательнее при задании параметров распаковки (может нужно, например, задать пароль - параметр
;Пароль для распаковки архивов
#define Password "").
Я этот скрипт перелопатил, много чего поменял - работает 100%! По крайней мере на win 7 x64.


Цитата:

Цитата Okta_333
А распаковка этим CLS пошустрее проходит? »

Ну сама прикинь - или распаковка сначала арк, затем среп, прекомп, 7зип, или в один проход всё сразу.

Цитата:

Цитата MogilShik2007
Может кто наскоряк переделать скрипт под IsDone 0.6 »

Наскоряк не выйдет, а так лень - и так 2 скрипта за последнее время переделал - а это всё время. Хочется уже и поиграть, ну и что, что уже почти 48 лет :). Да и ещё что-нибудь для R.G. Catalyst сделать, как никак, пока, что я там состою.
Может воспользоваться уже готовыми скриптами с исдон'ом 6-ым?

deathid@vk 04-02-2015 21:42 2466478

Цитата:

Цитата nik1967
Ну уж, батенька, ищи проблему у себя в системе. Либо внимательнее при задании параметров распаковки (может нужно например задать пароль - параметр
;Пароль для распаковки архивов
#define Password "").
Я этот скрипт перелопатил, много чего поменял - работает 100%! По крайней мере на win 7 x64. »

Может быть проблема в
этом?
PHP код:

;Hазвание и расширение архивов
;#define Data1 "data.cst"
;#define Data2 "data2.bin"
;#define Data3 "data3.bin"
;#define Data4 "data4.bin"
;#define Data5 "data5.bin"

;Опции ISDone
;#define records
;#define facompress
;#define PrecompInside
#define SrepInside
#define MSCInside
;#define precomp "0.42"
;#define unrar
;#define XDelta
;#define  PackZIP 




Я кагбы новичок, и не хочу использоват арк, да и если не за коментировать ;#define Data то ошибка при установке - "не найдено не одного файла указаного для ISArcExtract

Okta_333 04-02-2015 21:54 2466484

Nik1967

О! Это в высшей степени интересно! Буду учиться! Спасибо вам за наводку!

nik1967 04-02-2015 22:07 2466496

Цитата:

Цитата deathid@vk
Я кагбы новичок, и не хочу использоват арк »

Так бы сразу и сказал - данный скрипт работает ТОЛЬКО с ISDone. Чтобы он использовался по умолчанию - нужно его капитально переделывать.

deathid@vk 04-02-2015 23:12 2466513

Цитата:

Цитата nik1967
Я кагбы новичок, и не хочу использоват арк »
Так бы сразу и сказал - данный скрипт работает ТОЛЬКО с ISDone. Чтобы он использовался по умолчанию - нужно его капитально переделывать. »

спасибо что объяснил.

MogilShik2007 05-02-2015 09:46 2466601

Цитата:

Цитата nik1967
Наскоряк не выйдет, а так лень - и так 2 скрипта за последнее время переделал - а это всё время. Хочется уже и поиграть, ну и что, что уже почти 48 лет . Да и ещё что-нибудь для R.G. Catalyst сделать, как никак, пока, что я там состою.
Может воспользоваться уже готовыми скриптами с исдон'ом 6-ым? »

Может глянешь? Там около 300 строк, из них 200 с копейками индентичны исдону 0.6, а вот с остальнвми прям беда)))

Farser21 05-02-2015 17:30 2466879

Добрый вечер.
Вообщем разобрался я со скроллом, спасибо вам за советы!
Но теперь появилась другая проблема... фон в окне компонентов не закреплен, можно ли его как-то закрепить?
Вот установщик для наглядности тык

MogilShik2007 05-02-2015 20:22 2466986

Ааа, шайтан, чего опять то не так?)))
Такс, делаю .bin архив - выставляю такие настройки -

Прописываю в IsDone пароль -


На выходе имею -


Ну вот и чего снова то не так?)))

Воткнул в основном скрипте #define Password "111", в исдоне '{#Password}' - резултат все равно как на последнем скрине.

Okta_333 05-02-2015 21:00 2467011

MogilShik2007

Буду на "ты", так проще!
Скачай любой готовый скрипт с ISDone 06 final и "проверь" свой архив.
Могу тебе в стандартный скрипт вогнать ISDone 06 и попробуешь.

ShadeUa 05-02-2015 21:02 2467012

Здраствуйте , не подскажете как переместить строницу "язык " между страницами "меню "пуск"" и "здачаи"
https://yadi.sk/i/xP_VWb3meVLWc

MogilShik2007 05-02-2015 21:05 2467013

Цитата:

Цитата Okta_333
Буду на "ты", так проще!
Скачай любой готовый скрипт с ISDone 06 final и "проверь" свой архив.
Могу тебе в стандартный скрипт вогнать ISDone 06 и попробуешь. »

Ок, проверял на 0.6 но там бета была, результат такой же, попробую на финале, но чет сомневаюсь)))

Okta_333 05-02-2015 21:08 2467015

MogilShik2007
На 6 версии пароли прекрасно работают.

MogilShik2007 05-02-2015 21:28 2467025

Цитата:

Цитата Okta_333
MogilShik2007
На 6 версии пароли прекрасно работают. »

Да на 0.6 Final все сработало, на бетке не хотело...
Эх, будем ждать добряка, мож кто скрипт под 0.6 переделает)))

Okta_333 05-02-2015 21:37 2467033

MogilShik2007

Другой скачай, есть много классных скриптов, спасибо добрым людям.

MogilShik2007 05-02-2015 21:39 2467035

Тот который прошу переделать, таких похожих больше не нашел, в этом есть все, что нужно)))
А если похожие чем-то попадаются, то тоже на исдоне 0.5.

ShadeUa 05-02-2015 21:53 2467044

Ребята , помогите, очень нужно

Okta_333 05-02-2015 23:00 2467077

Цитата:

Цитата Okta_333
Подскажите пожалуйста.
7z (без сжатия) + Precomp + SRep + FreeArc
Все вроде бы нормально распаковывается, но, архив 7z, тот, который без сжатия, остается в папке с распакованными файлами. Содержимое этого 7z скидывается в указанное место, но и архив остается тоже.
Как можно сделать, чтобы установщик удалял этот архив в конце установки?

Цитата:

Цитата Dodakaedr
Source: "sniper.7z"; DestDir: "{tmp}"; Flags: dontcopy deleteafterinstall »


Не помогло. Ругается на отсутствие файла.

ShadeUa 05-02-2015 23:13 2467086

И еще вопрос , что ето за ошибка , скачал новый скрипт , и тут же ошибка
https://yadi.sk/i/Cf6QrGR2eVUWx

Dodakaedr 05-02-2015 23:14 2467088

Вложений: 1
Цитата:

Цитата Okta_333
Не помогло. Ругается на отсутствие файла. »

Надеюсь вы заменили название архива sniper.7z на свой. Если да то как вариант можно через DeleteFile после обработки архива:
Код:

  DeleteFile(ExpandConstant('{app}\sniper.7z'));
Цитата:

Цитата ShadeUa
И еще вопрос , что ето за ошибка , скачал новый скрипт , и тут же ошибка »

в том модуле в секции [code] пропишите такое:
Код:

type
PChar=Pansichar;

Цитата:

Цитата ShadeUa
Ребята , помогите, очень нужно »

Удалите модуль ST.iss и все что с ним связано в скрипте Alan wake.iss. В модуле Panel.iss укажите новое расположение лейбла Language и замените модуль Page.iss на этот:

Okta_333 05-02-2015 23:18 2467090

Dodakaedr

Название архива заменила.
А в какой секции это прописать?
Код:

DeleteFile(ExpandConstant('{app}\sniper.7z'));

Dodakaedr 05-02-2015 23:21 2467091

Цитата:

Цитата Okta_333
А в какой секции это прописать? »

туда где обрабатывается ваш архив:
Пример
Код:

If MakeMusic and (FileExists(ExpandConstant('{app}\Example_1.7z'))) then
begin
  Exec(ExpandConstant('{app}\7zA_Files\7zA.exe'), 'x -y ..\Example_1.7z -o..\Data', '', SW_Hide, ewWaitUntilTerminated, ResultCode);
  DeleteFile(ExpandConstant('{app}\Example_1.7z'));
end;


ShadeUa 05-02-2015 23:22 2467092

Цитата:

Цитата Dodakaedr
в том модуле в секции [code] пропишите такое:
Код: Выделить весь код
type
PChar=Pansichar; »

спасибо большое :)

Okta_333 05-02-2015 23:26 2467095

Dodakaedr

Помогло! Спасибо!

Farser21 06-02-2015 11:55 2467277

Добрый вечер.
Вообщем разобрался я со скроллом, спасибо вам за советы!
Но теперь появилась другая проблема... фон в окне компонентов не закреплен, можно ли его как-то закрепить?
Вот установщик для наглядности тык

El Sanchez 06-02-2015 21:31 2467605

Цитата:

Цитата Farser21
Но теперь появилась другая проблема... фон в окне компонентов не закреплен, можно ли его как-то закрепить? »

Farser21, можно, сделайте окно композитным:
Код:

SetWindowLong(WizardForm.ComponentsList.Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);

MogilShik2007 07-02-2015 00:31 2467693

Все прив, может кто объяснить чего это за беда и где копать?

Okta_333 07-02-2015 09:36 2467751

Господа эксперты, подскажите как работать с PrecompInside и SRepInside.

Разжимаю файл при помощи precomp040.exe. Полученный pcf-файл пропускаю через SRep и сжимаю Arc'ом. Далее прописываю в ISDone пути:
Код:


if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-1.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISSRepExtract  ( 0, 0, ExpandConstant('{app}\1.srep'),ExpandConstant('{app}\1.pcf'), true) then break;
if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\1.pcf'),    ExpandConstant('{app}\animation.kfs'), true) then break;

Активирую в скрипте #define PrecompInside и #define SRepInside, коприлирую.

При установке выдаёт ошибку



Из этого следуют 2 вопроса.
1. Правильно ли я прописываю пути для распаковки SRepInside и PrecompInside?
2. Нужно ли в скрипте активировать #define precomp04 ?

Farser21 07-02-2015 14:27 2467877

El Sanchez, спасибо за помощь, но я немного не понял, где именно в коде это использовать...

Dodakaedr 07-02-2015 14:38 2467883

Цитата:

Цитата Farser21
спасибо за помощь, но я немного не понял, где именно в коде это использовать... »

Скорее всего в InitializeWizard

Farser21 07-02-2015 14:51 2467887

Dodakaedr, уже пробовал.

Dodakaedr 07-02-2015 15:05 2467892

Farser21, попробуйте еще добавить в секцию [code]
Код:

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall';


Farser21 07-02-2015 15:10 2467894

Dodakaedr, теперь код не может понять индефикатор GWL_EXSTYLE

Dodakaedr 07-02-2015 15:15 2467897

Цитата:

Цитата Farser21
теперь код не может понять индефикатор GWL_EXSTYLE »

попробуйте так обьявить
Код:

[code]
const
  GWL_EXSTYLE = (-20);
  WS_EX_COMPOSITED = $2000000;


MogilShik2007 07-02-2015 15:32 2467907

Такс, вроде перелопатил в скрипте исдон 0.5 в 0.6, но терь исдон отказывается извлекаться, мож кто подскажет - http://rghost.ru/8ZdbkzBdh

Farser21 07-02-2015 15:46 2467913

Dodakaedr, теперь Handle не понимает.
P.S. Это окно скрыть можно?

Dodakaedr 07-02-2015 16:06 2467920

Цитата:

Цитата Farser21
теперь Handle не понимает. »

ну тогда не знаю.
Цитата:

Цитата Farser21
P.S. Это окно скрыть можно? »

компонентам добавьте флаг disablenouninstallwarning

Farser21 07-02-2015 16:21 2467927

Dodakaedr, спасибо за помощь.
Еще есть небольшой вопрос... Можно ли в окне компонентов сменить цвет\стиль\размер определенный надписи? Не все тексты в окне компонентов а например только заголовки.

MogilShik2007 07-02-2015 16:34 2467931

Цитата:

Цитата Farser21
Dodakaedr, спасибо за помощь.
Еще есть небольшой вопрос... Можно ли в окне компонентов сменить цвет\стиль\размер определенный надписи? Не все тексты в окне компонентов а например только заголовки. »

Можно через скрипт ReDrawText 1.5e, но если не шаришь, то не разберешься.

Dodakaedr 07-02-2015 16:43 2467934

Цитата:

Цитата Farser21
Можно ли в окне компонентов сменить цвет\стиль\размер определенный надписи? »

стиль можно так:
Код:

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold];
end;

а насчет цвета и размера не знаю, но хотел бы узнать))

Farser21 07-02-2015 17:04 2467946

Dodakaedr, хм.. интересно, а можно ли менять стиль заданному тексту, ибо сейчас он сменился только в самой первой строке.

Dodakaedr 07-02-2015 17:07 2467947

Цитата:

Цитата Farser21
хм.. интересно, а можно ли менять стиль заданному тексту, ибо сейчас он сменился только в самой первой строке. »

указывайте по индексу... отсчет с 0 (нуля). 0=первая строка в компонент листе
Код:

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold];
  WizardForm.ComponentsList.ItemFontStyle[6] := [fsBold];
end;


MogilShik2007 07-02-2015 17:10 2467949

Вложений: 1
Вот модуль работы с текстом, цвета, правка и т.д.

Dodakaedr 07-02-2015 17:58 2467969

Цитата:

Цитата MogilShik2007
Вот модуль работы с текстом, цвета, правка и т.д. »

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

#include "ReDrawText v.1.5e4.iss"

[Setup]
AppName=MyProgram
AppVerName=1.0
DefaultDirName={pf}\MyProgram
OutputDir=.


[Components]
Name: one; Description: "Компонент 1"; Types: full custom;
Name: one\two; Description: "Компонент 2"; Types: full custom;

[Code]

var
  Label1: TLabel;
  Label1Rdw: TRedrawedLabel;

procedure RedesignWizardForm;
begin
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Hint:=IntToStr($00FF00);
    AutoSize:=False;
    Parent := WizardForm.WelcomePage;
    Alignment:=taCenter;
    Left := ScaleX(216);
    Top := ScaleY(256);
    Width := ScaleX(40);
    Height := ScaleY(14);
//звездочки удалите
    Caption := '[*name=Verdana][*size=8][*i][*color=$FF0000]Крутая Игра[/color][/i][/size][/name]';
  end;
  Label1Rdw:= ReDrawText(Label1);
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
WizardForm.ComponentsList.ItemCaption[0] := Label1.Caption;
end;


Модуль ReDrawText v.1.5e4.iss
Код:

[code]
type
  TSize = record
    cx: Longint;
    cy: Longint;
  end;
  ABC = record
    abcA: Integer;
    abcB: UINT;
    abcC: Integer;
  end;
  HDC = Longword;
  HGDIOBJ = Longword;
  TRedrawedLabel = record Base: TLabel; Parts, Shadow: array of Tlabel; end;
  #ifdef UNICODE
    #define A "W"
    PChar = PAnsiChar;
  #else
    #define A "A"
  #endif

const
  FS_SOLID = $8;
  FS_MINIMIZE = $10;
 
function GetTextExtentPoint32(DC: HDC; S: String; Len: Integer; var Size: TSize): Boolean; external 'GetTextExtentPoint32{#A}@gdi32.dll stdcall';
function GetTextExtentExPoint(DC: HDC; lpszStr: PChar; cchString, nMaxExtent: Integer; var lpnFit: Integer; alpDx: Integer; var lpSize: TSize): Boolean; external 'GetTextExtentExPoint{#A}@gdi32.dll stdcall';
function GetClientDC(hWnd: HWND): HDC; external 'GetDC@user32.dll stdcall';
function ReleaseClientDC(hWnd: HWND; hDC: HDC): Integer; external 'ReleaseDC@user32.dll stdcall';
function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; external 'SelectObject@gdi32.dll stdcall';
function SetRect(var lpRect: TRect; xLeft,yTop,xRight,yBottom: Integer): Boolean; external 'SetRect@user32.dll stdcall';
function InvalidateRect(hWnd: HWND; lpRect: TRect; bErase: BOOL): BOOL; external 'InvalidateRect@user32.dll stdcall';
function GetCharABCWidths(DC: HDC; uFirstChar, uLastChar: UINT; var lpAbc: ABC): Boolean; external 'GetCharABCWidths{#A}@gdi32.dll stdcall';

function FindSpace(s: string; Min, Max: Integer): Integer;
var n: integer;
begin
  Result:= -1;
  if (Max=0)or(s='') then Exit;
  if Max>Length(S) then Max:=Length(S);
  if Min<=0 then Min:=1;
  if s[Max]=' ' then begin
    Result:= Max;
    Exit;
  end;
  for n:=Max downto min do begin
    if s[n]=' ' then begin
      Result:= n;
      Break;
    end;
  end;
end;

function GetTextWidth(aFont: TFont; Text: String): Integer;
var DC: HDC; aSize: TSize; OldObj: Longword; abc1, abc2: ABC;
begin
  DC:= GetClientDC(0);
  try
    if Text='' then Exit;
    OldObj:= SelectObject(DC, aFont.Handle);
    GetTextExtentPoint32(DC, PChar(Text), Length(Text), aSize);
    GetCharABCWidths(DC, Ord(Text[1]), Ord(Text[1]), abc1);
    GetCharABCWidths(DC, Ord(Text[Length(text)]), Ord(Text[Length(text)]), abc2);
    Result:= aSize.cx;
    if (Length(Text)<>1)and(aFont.Style + [fsItalic]=aFont.Style) then begin
      if abc1.abcA<0 then Result:= Result-abc1.abcA;
      if abc2.abcC<0 then Result:= Result-abc2.abcC
    end;
  finally
    SelectObject(DC, OldObj);
    ReleaseClientDC(0, DC);
  end;
end;

function GetTextHeight(aFont: TFont; Text: String): Integer;
var DC: HDC; aSize: TSize; OldObj: Longword;
begin
  DC:= GetClientDC(0);
  try
    OldObj:= SelectObject(DC, aFont.Handle);
    GetTextExtentPoint32(DC, PChar(Text), Length(Text), aSize);
    Result:= aSize.cy;
  finally
    SelectObject(DC, OldObj);
    ReleaseClientDC(0, DC);
  end;
end;

function GetTextLen(aFont: TFont; Text: String; MaxWidth: Integer): Integer;
var DC: HDC; aSize: TSize; OutLen: Integer; OldObj: Longword;
begin
  DC:= GetClientDC(0);
  try
    OldObj:= SelectObject(DC, aFont.Handle);
    GetTextExtentExPoint(DC, PChar(Text), Length(Text), MaxWidth, OutLen, 0, aSize);
    Result:= OutLen;
  finally
    SelectObject(DC, OldObj);
    ReleaseClientDC(0, DC);
  end;
end;

function TrimEx(S: String): String;
begin
  if S <> '' then begin
    while (Length(S)>0)and(S[1]=' ') do Delete(S, 1, 1);
    while (Length(S)>0)and(S[length(S)]= ' ') do Delete(S, Length(S), 1);
  end;
  Result:= S;
end;

procedure DestroyRWlabel(var Lbl: TRedrawedlabel);
var n: Integer; r: TRect;
begin
  for n:=0 to GetArrayLength(Lbl.Shadow)-1 do Lbl.Shadow[n].Free;
  for n:=0 to GetArrayLength(Lbl.Parts)-1 do Lbl.Parts[n].Free;
  SetArrayLength(lbl.Shadow, 0);
  SetArrayLength(lbl.Parts, 0);
  if Lbl.Base <> nil then begin
    SetRect(r, Lbl.Base.Left, Lbl.base.Top, Lbl.base.left+Lbl.Base.Width, Lbl.Base.Top+Lbl.Base.Height);
    InvalidateRect(Lbl.Base.Parent.Handle, r, true);
  end;
  Lbl.Base:= nil;
end;

procedure ShowRWLabel(var Lbl: TRedrawedlabel);
var n: Integer;
begin
  if Lbl.Base.Enabled then for n:=0 to getArraylength(Lbl.Shadow)-1 do Lbl.Shadow[n].Show;
  for n:=0 to getArraylength(Lbl.Parts)-1 do Lbl.Parts[n].Show;
end;

procedure HideRWLabel(var Lbl: TRedrawedlabel);
var n: Integer;
begin
  if Lbl.Base.Enabled then for n:=0 to getArraylength(Lbl.Shadow)-1 do Lbl.Shadow[n].Hide;
  for n:=0 to getArraylength(Lbl.Parts)-1 do Lbl.Parts[n].Hide;
end;

procedure CopyFont(InFnt: TFont; var OutFont: TFont);
begin
  OutFont.Height:= InFnt.Height;
  OutFont.Name:= InFnt.Name;
  OutFont.Pitch:= InFnt.Pitch;
  OutFont.Size:= InFnt.Size;
  OutFont.Style:= InFnt.Style;
  OutFont.PixelsPerInch:= InFnt.PixelsPerInch;
  OutFont.Color:= InFnt.Color;
end;

function ReDrawText(var Lbl: Tlabel): TRedrawedLabel;
var s, b: string; i, k, l, newline, aLeft, aTop, aWidth, aHeight, Space, TW,x: Integer;
    Flags: Dword; tp1, tp2, tp3, tp4, minlen, lens: Integer; tags, et, ev: string; aFont: TFont;
begin
  DestroyRWlabel(Result);
  Result.Base:= lbl; aFont:= TFont.Create;
  ALeft:=Lbl.Left; ATop:= LBL.Top; AWidth:=0; s:= Lbl.Caption; Space:= GetTextWidth(Lbl.Font, ' ');
  repeat
    s:=TrimEx(s); k:=Pos('[', s); Flags:=0; tags:=''; lens:= Length(S);
    CopyFont(lbl.Font, aFont);
    if k=1 then try
      repeat
        if (s='')or(s[1]<>'[')or((s[1]='[')and(s[2]='/')) then break;
        tp1:=2; while (tp1<lenS)and(s[tp1]<>']') do tp1:=tp1+1;
        tp2:=2; while (tp2<tp1)and(s[tp2]<>'=') do tp2:=tp2+1;
        et:= copy(s, 2, tp2-2);
        ev:= copy(s, tp2+1, tp1-tp2-1);
        case lowercase(et) of
          'b'    : aFont.Style:= aFont.Style + [fsBold];
          'i'    : aFont.Style:= aFont.Style + [fsItalic];
          'u'    : aFont.Style:= aFont.Style + [fsUnderline];
          's'    : aFont.Style:= aFont.Style + [fsStrikeOut];
          'color': aFont.Color:= StrToInt(ev);
          'min'  : begin
                    if StrToInt(ev) >= Lbl.Width then minlen:= Lbl.Width else minlen:= StrToInt(ev);
                    Flags:= Flags or FS_MINIMIZE or FS_SOLID;
                  end;
          'name' : aFont.Name:= ev;
          'size' : aFont.Size:= StrToInt(ev);
          'solid': Flags:= Flags or FS_SOLID;
        end;
        tags:= tags+copy(s, 1, tp1);
        delete(s, 1, tp1);
      until k=0;
    finally
      k:=Pos('[', s);
    end;
    aHeight:=GetTextHeight(aFont, s)+2;
    aWidth:=(Lbl.Left+Lbl.Width)-ALeft;
    newline:= Pos(#13#10, S);
    i:= Pos('%n', S);
    if (i<>0)and((i<newline)or(newline=0)) then newline:= i;
    if newline=1 then begin
      aLeft:= Lbl.Left;
      aTop:= ATop+AHeight;
      Delete(S, 1, 2);
      s:=tags+s;
      Continue;
    end;
    l:= GetTextLen(aFont, s, aWidth);
    while Pos(' ',Copy(s,1,l)) = 0 do begin
    l:=l+1;
    if l>=Length(s) then break;
    end;
    if (k<>0)and(l>k) then l:=k-1;
    if k=0 then if lenS<=l then l:= lenS;
    if (l>0)and(l<>(k-1))and(lenS>l)and(s[l]<>' ') then l:= FindSpace(s, 1, l);
    if (l<k-1)and(Flags and FS_SOLID <> 0) then l:= k-1;
    if ((newline-1)<l)and(newline<>0) then l:= newline-1;
    b:= copy(s, 1, l);
    Delete(s, 1, l);
    try
      repeat
        if (s='')or(s[1]<>'[')or((s[1]='[')and(s[2]<>'/')) then Break;
        tp2:=2; while s[tp2]<>']' do tp2:=tp2+1;
        tp3:= pos('['+copy(s, 3, tp2-3), tags);
        tp4:= tp3; while tags[tp4]<>']' do tp4:=tp4+1;
        delete(tags, tp3, tp4-tp3+1);
        delete(s, 1, tp2);
      until k=0;
    finally
      if tags<>'' then s:=tags+s;
    end;
    if b<>'' then begin
      b:= TrimEx(b); if Flags and FS_MINIMIZE <> 0 then b:= MinimizePathName(b, aFont, MinLen);
      i:= GetArrayLength(Result.Parts); SetArrayLength(Result.Parts, i+1); SetArrayLength(Result.Shadow, i+1);
      aWidth:= GetTextWidth(aFont, b);
      if ((aLeft+aWidth)-(Lbl.Left+Lbl.Width)>=0) then begin
      if Length(Lbl.Caption) <> Length(s+b+' ') then aTop:= aTop+aHeight;
      aLeft:= Lbl.Left;
      end;
      if aHeight+aTop > Lbl.Top+Lbl.Height then aHeight:=aHeight-((aHeight+aTop)-(Lbl.Top+Lbl.Height));
      Result.Parts[i]:= TLabel.Create(Lbl.Parent);
      with Result.Parts[i] do begin
        Autosize:= False; Font:= aFont;
        SetBounds(aLeft,aTop,aWidth,aHeight);
        Transparent:= True;
        Parent:= Lbl.Parent;
        Caption:= b;
        Alignment:=Lbl.Alignment;
      end;
      if Lbl.Enabled then begin
      Result.Shadow[i]:= TLabel.Create(Lbl.Parent);
      with Result.Shadow[i] do begin
        Autosize:= False; Font:= aFont;
        SetBounds(aLeft,aTop+1,aWidth,aHeight);
        Transparent:= True;
        Parent:= Lbl.Parent;
        Caption:= b;
        Font.Color:=StrToIntDef(Lbl.Hint,$000000);
        SendToBack;
        Alignment:=Lbl.Alignment;
      end;
      end;
      case Lbl.Alignment of
      taLeftJustify:
      begin
        if Result.Parts[i].Width > Lbl.Width then begin
          Result.Parts[i].Width:=Lbl.Width;
          if Lbl.Enabled then Result.Shadow[i].Width:=Result.Parts[i].Width;
          end;
        ALeft:= ALeft+AWidth+Space;
      end;
      taCenter:
      begin
        TW:=TW+aWidth+Space;
        if Result.Parts[i].Width > Lbl.Width then begin
          Result.Parts[i].Width:=Lbl.Width;
          if Lbl.Enabled then Result.Shadow[i].Width:=Result.Parts[i].Width;
          Result.Parts[i].Left:=Lbl.Left;
          if Lbl.Enabled then Result.Shadow[i].Left:=Result.Parts[i].Left+1;
          TW:=TW-aWidth;
          aWidth:=Lbl.Width;
          TW:=TW+aWidth;
        end;
        if aLeft = Lbl.Left then begin
          TW:=TW-aWidth-Space;
            while x > 0 do begin
              Result.Parts[i-x].Left:=(Result.Parts[i-x].Left+(Lbl.Width/2))-(TW/2);
              if Lbl.Enabled then Result.Shadow[i-x].Left:=Result.Parts[i-x].Left+1;
              x:=x-1;
            end;
          TW:=aWidth+Space;
          x:=1;
        end else x:=x+1;
          if Length(s)=0 then begin
          x:=x-1;
            while x >= 0 do begin
              Result.Parts[i-x].Left:=(Result.Parts[i-x].Left+(Lbl.Width/2))-(TW/2);
              if Lbl.Enabled then Result.Shadow[i-x].Left:=Result.Parts[i-x].Left+1;
              x:=x-1;
            end;
          end;
        ALeft:= ALeft+AWidth+Space;
      end;
      taRightJustify:
      begin
        TW:=TW+aWidth+Space;
        if Result.Parts[i].Width > Lbl.Width then begin
          Result.Parts[i].Width:=Lbl.Width;
          if Lbl.Enabled then Result.Shadow[i].Width:=Result.Parts[i].Width;
          Result.Parts[i].Left:=Lbl.Left;
          if Lbl.Enabled then Result.Shadow[i].Left:=Result.Parts[i].Left+1;
          TW:=TW-aWidth;
          aWidth:=Lbl.Width;
          TW:=TW+aWidth;
        end;
        if aLeft = Lbl.Left then begin
          TW:=TW-aWidth-Space;
            while x > 0 do begin
              Result.Parts[i-x].Left:=(Lbl.Left+Lbl.Width)-TW;
              if Lbl.Enabled then Result.Shadow[i-x].Left:=Result.Parts[i-x].Left+1;
              TW:=TW-Result.Parts[i-x].Width-Space;
              x:=x-1;
            end;
          TW:=aWidth+Space;
          x:=1;
        end else x:=x+1;
          if Length(s)=0 then begin
          x:=x-1;
            while x >= 0 do begin
              Result.Parts[i-x].Left:=(Lbl.Left+Lbl.Width)-TW;
              if Lbl.Enabled then Result.Shadow[i-x].Left:=Result.Parts[i-x].Left+1;
              TW:=TW-Result.Parts[i-x].Width-Space;
              x:=x-1;
            end;
          end;
        ALeft:= ALeft+AWidth+Space;
      end;
      end;
    end;
      if aHeight < 0 then begin
      Lbl.Hide;
      exit;
      end;
  until (Length(s)=0);
  Lbl.Hide; aFont.Free;
end;


Okta_333 07-02-2015 20:22 2468016

Никто не пользуется PrecompInside и SRepInside ?!!!

sergey3695 07-02-2015 20:59 2468034

Okta_333, что это? Скрипты Inno Setup. Помощь и советы
http://krinkels.org/threads/precompinside.50/
http://krinkels.org/threads/srepinside.49/

Okta_333 07-02-2015 21:04 2468036

sergey3695
А разве вопрос не по теме?
Я же до этого описывала ситуацию.

И всё равно не понимаю что я делаю не так.....

MogilShik2007 07-02-2015 21:07 2468037

Цитата:

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

Когда то давно, делал для себя репачок, цвет текста менял, все работает:
Тыц


ЗЫ. с моим скриптом то, кто поможет? Смотрю уже 4 человека скачало и тишина)))

Dodakaedr 07-02-2015 21:13 2468042

Цитата:

Цитата MogilShik2007
Когда то давно, делал для себя репачок, цвет текста менял, все работает: »

для компонент листа нет...

sergey3695 07-02-2015 21:23 2468048

Okta_333, это не скрипты inno setup. пиши там куда ссылочки ведут.

MogilShik2007 07-02-2015 22:55 2468080

Цитата:

Цитата Dodakaedr
для компонент листа нет... »

Для любой страницы, здесь - обсуждение

El Sanchez 08-02-2015 16:19 2468392

Цитата:

Цитата Farser21
но я немного не понял, где именно в коде это использовать »

Цитата:

Цитата Farser21
теперь код не может понять индефикатор GWL_EXSTYLE »

Цитата:

Цитата Farser21
теперь Handle не понимает. »

Farser21, для ленивых подробно:
Код:

#define A = (Defined UNICODE) ? "W" : "A"
const
   
GWL_EXSTYLE = (-20);
    WS_EX_COMPOSITED = $02000000;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';

//////////////////////////
function InitializeWizard;
begin
    with
WizardForm.ComponentsList do
       
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);
end;


Farser21 08-02-2015 16:50 2468427

El Sanchez, благодарю за помощь.

ShadeUa 09-02-2015 22:38 2469250

Здраствуйте как такое реализовать , и есть возможноость на 3 -4 языка ?
https://yadi.sk/i/-sJv0Rd0eZshJ

Kashtan007 09-02-2015 23:00 2469262

Привет всем.
Как сделать, чтобы после деинсталяции компонентов, по заданному пути создавалась папка?
Заранее спасибо за ответы!

kotyarko@fb 10-02-2015 00:00 2469281

Цитата:

Цитата Kashtan007
Как сделать, чтобы после деинсталяции компонентов, по заданному пути создавалась папка? »

Код:

Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if CurUninstallStep = usDone then
 CreateDir(ExpandConstant('{app}\New folder');
end;


Kashtan007 10-02-2015 00:23 2469287

kotyarko@fb, все я разобрался, спасибо за помощь.

Okta_333 10-02-2015 10:35 2469388

Скажите пожалуйста, а какие вообще цвета поддерживает Inno Setup? А то ставлю синий, а отображается жёлтый.

ROMKA-1977 10-02-2015 11:26 2469405

Okta_333, наверное прописал цвет в RGB? В инно BGR - цвета используются, меняй первые два знака с последними.

diman_21Ru 10-02-2015 15:46 2469522

Всем привет в чем может быть проблема выходит ошибка radio item cannot have disabled child items

Shift85 10-02-2015 15:49 2469525

Цитата:

Цитата Okta_333
Скажите пожалуйста, а какие вообще цвета поддерживает Inno Setup? А то ставлю синий, а отображается жёлтый. »

Okta_333, Вот немножко... :tongue:

Код:

clScrollBar          = $80000000;
  clBackground          = $80000001;
  clActiveCaption      = $80000002;
  clInactiveCaption    = $80000003;
  clMenu                = $80000004;
  clWindow              = $80000005;
  clWindowFrame        = $80000006;
  clMenuText            = $80000007;
  clWindowText          = $80000008;
  clCaptionText        = $80000009;
  clActiveBorder        = $8000000A;
  clInactiveBorder      = $8000000B;
  clAppWorkSpace        = $8000000C;
  clHighlight          = $8000000D;
  clHighlightText      = $8000000E;
  clBtnFace            = $8000000F;
  clBtnShadow          = $80000010;
  clGrayText            = $80000011;
  clBtnText            = $80000012;
  clInactiveCaptionText = $80000013;
  clBtnHighlight        = $80000014;
  cl3DDkShadow          = $80000015;
  cl3DLight            = $80000016;
  clInfoText            = $80000017;
  clInfoBk              = $80000018;
  clHotLight            = $8000001A;

  clBlack  = $000000;
  clMaroon  = $000080;
  clGreen  = $008000;
  clOlive  = $008080;
  clNavy    = $800000;
  clPurple  = $800080;
  clTeal    = $808000;
  clGray    = $808080;
  clSilver  = $C0C0C0;
  clRed    = $0000FF;
  clLime    = $00FF00;
  clYellow  = $00FFFF;
  clBlue    = $FF0000;
  clFuchsia = $FF00FF;
  clAqua    = $FFFF00;
  clLtGray  = $C0C0C0;
  clDkGray  = $808080;
  clWhite  = $FFFFFF;
  clNone    = $1FFFFFFF;
  clDefault = $20000000;

Цитата:

Цитата diman_21Ru
Всем привет в чем может быть проблема выходит ошибка radio item cannot have disabled child items »

diman_21Ru, Телепаты в отпуске.:jester:

diman_21Ru 10-02-2015 15:55 2469530

Shift85, так я сам не пойму из за чего она компиляция проходит успешно

ShadeUa 10-02-2015 19:56 2469626

Здраствуйте ,у меня возникла така проблема , походу неправильно скрипт соеденил https://yadi.sk/i/6SaACTKeeavWa
помогите пожайлуста.

ShadeUa 11-02-2015 21:13 2470061

Ребята , помогите реализовать ету шнягу (

Shift85 11-02-2015 21:48 2470067

Цитата:

Цитата ShadeUa
Здраствуйте ,у меня возникла така проблема , походу неправильно скрипт соеденил https://yadi.sk/i/6SaACTKeeavWa
помогите пожайлуста. »

Цитата:

Цитата ShadeUa
Ребята , помогите реализовать ету шнягу ( »

ShadeUa, Скрипт кто давать будет? Пушкин да. :hi: :bow:

Dodakaedr 11-02-2015 22:46 2470092

Подскажите кто знает, используется вот такая функция
Код:

Root: HKCR; Subkey: "Pro.Session\DefaultIcon"; ValueType: String; ValueData: "{code:GetExeShortPath},0"; Flags: uninsdeletevalue
и она создает вот такую запись
Цитата:

C:\PROGRA~1\EXAMDI~1\ExeName.exe,0
Как создать короткий путь в inno?

ShadeUa 11-02-2015 22:49 2470094

Цитата:

Цитата Shift85
ShadeUa, Скрипт кто давать будет? Пушкин да. »

Спасибо что откликнулись , сейчас лазью скрипт ))

Цитата:

Цитата Shift85
ShadeUa, Скрипт кто давать будет? Пушкин да »

В архиве 3 папки ,
Скрипты - ето основной мой скрипт
1- ето то что я хочу реализовать
w- ето то что я хочу получить в финале ( на основе готового скрипта )( ето не обезательно но если знаете как сделать помогите новечку , буду очень благодарен ))
https://yadi.sk/d/zJHtiYE1ecUEh

diman_21Ru 12-02-2015 16:25 2470416

Всем привет как можно категорию Tasks изменять в размере, вот скрин : http://s47.radikal.ru/i115/1502/b3/8eab69b26246.png

Dodakaedr 12-02-2015 17:02 2470432

diman_21Ru,
Код:

WizardForm.TasksList.SetBounds(ScaleX(100), ScaleY(10), ScaleX(WizardForm.TasksList.Width), ScaleY(WizardForm.TasksList.Height));

diman_21Ru 12-02-2015 17:10 2470435

Dodakaedr, а куда можно прикруть именно ?

Shift85 12-02-2015 17:20 2470442

Цитата:

Цитата diman_21Ru
а куда можно прикруть именно ? »

diman_21Ru, :fool:

Сюда:

Код:

with WizardForm.TasksList do
begin
SetBounds(ScaleX(100), ScaleY(10), ScaleX(WizardForm.TasksList.Width), ScaleY(WizardForm.TasksList.Height));
end;


Dodakaedr 12-02-2015 17:48 2470457

Цитата:

Цитата diman_21Ru
а куда можно прикруть именно ? »

сюда можно:
Код:

procedure InitializeWizard();
begin
  WizardForm.TasksList.SetBounds(ScaleX(100), ScaleY(10), ScaleX(WizardForm.TasksList.Width), ScaleY(WizardForm.TasksList.Height));
end;


ShadeUa 12-02-2015 22:12 2470622

Ребята , помогите з скриптом , оочень нужно ((

Shift85 12-02-2015 22:41 2470634

Цитата:

Цитата ShadeUa
Ребята , помогите з скриптом , оочень нужно (( »

Окей. :coffee:
Описание проблемы и скрипт в студию. ;)

ShadeUa 12-02-2015 23:51 2470659

Цитата:

Цитата Shift85
Описание проблемы и скрипт в студию. »

http://forum.oszone.net/post-2469626-91.html вот проблема
http://forum.oszone.net/post-2470094-95.html
вот я писал , там просто не так его соеденил , и сам же скрипт

ShadeUa 13-02-2015 18:03 2470961

самого сначала я хотел просто впихнуть тот скрипт на языки в свой инстал , но потом с той проблемой я понял что для меня, и моих знаний ето не невзомжно по етому попросил у експертов на форуме

ROMKA-1977 14-02-2015 14:59 2471252

Вложений: 2
Помогите пож. перевести два кода с ansi в unicode.

Dodakaedr 14-02-2015 15:46 2471266

ROMKA-1977, Пробуйте:
Disks
Код:

[Setup]
OutputDir=Setup
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
EnableDirDoesntExistWarning=true


[CustomMessages]
Ru.SysDirSelect=Выбранный путь включает в себя системную папку!%nВы уверены, что необходимо продолжать установку?

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

[Icons]
Name: {group}\Notepad; Filename: notepad.exe

[Code]
type
PcHar=Pansichar;

var n: Integer;
FreeMB, TotalMB: Cardinal;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
        if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
                if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
                        if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
                                If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
                                        If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
                                                Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб';
        StringChange(Result, ',', '.');
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
        Begin        while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
        Begin
                if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
                else Result:= String;
        End;

Procedure GetDiskInfo(Disk: String);
        Begin
                FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
                        GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
                FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
        End;

Procedure ListBoxRefresh;        var FreeB, TotalB: Cardinal; Path, String: string; Begin
        ListBox.Items.Clear
for n:= 1 to 31 do        // диск 'А' пропустить
        if (GetLogicalDrives and (1 shl n)) > 0 then
                if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
                        if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
        Path:= Copy(ListBox.Items[n],1,2) +'\'                { если в накопителе нет диска, пропустить обновление }
        if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
                if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
                if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего| '+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
        ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
        ListBox:        for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
end; End;

Function NextButtonClick(CurPageID: Integer): Boolean; Begin
        Result:= True
        if (CurPageID = wpSelectDir) and (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'), 'Установка в системную папку', MB_YESNO or $30) = idYes;
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
        if CurPageID = wpSelectDir then ListBoxRefresh
End;

Procedure InitializeWizard;
Begin
          ListBox:= TListBox.Create(WizardForm)
                ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
                ListBox.Font.Size:= 9
                ListBox.Font.Style:= [fsBold]
                ListBox.Font.Name:= 'Courier New';
                ListBox.OnClick:= @ObjectOnClick;
                ListBox.Parent:= WizardForm.SelectDirPage;
End;


GameuxInstallHelper
Код:

#define MainExe "{app}\MassEffectLauncher.exe"
#define GDFBinary "{app}\Binaries\MassEffectGDF.dll"

[Files]
Source: GameuxInstallHelper.dll; DestDir: {app}; Flags: overwritereadonly

[Code]
#ifdef UNICODE
  #define A "W"
#else
  #define A "A"
#endif

type
TGUID = record
Data1: Cardinal;
Data2,
Data3: Word;
Data4: array [0..8] of char;
end;

function GenerateGUID(var GUID: TGUID): Cardinal; external 'GenerateGUID{#A}@files:GameuxInstallHelper.dll stdcall setuponly';
function AddToGameExplorer(Binary: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal; external 'AddToGameExplorerA{#A}@files:GameuxInstallHelper.dll stdcall setuponly';
function CreateTask(InstallType: Integer; var GUID: TGUID; TaskType: Integer; TaskNumber: Integer; TaskName: String; Binary: String; Parameters: String): Cardinal; external 'CreateTaskA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(Binary: String; var GUID: TGUID): Cardinal; external 'RetrieveGUIDForApplicationA@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal; external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveTasks(var GUID: TGUID): Cardinal; external 'RemoveTasks@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

const
PlayTask = 0;
SupportTask = 1;

var
GUID: TGUID;

procedure CurStepChanged(CurStep: TSetupStep);
var
Binary, MainExe: String;
begin
if CurStep = ssInstall then
GenerateGUID(GUID);

if CurStep = ssPostInstall then
begin
Binary:=ExpandConstant('{#GDFBinary}');
MainExe:=ExpandConstant('{#MainExe}');
AddToGameExplorer(Binary, ExpandConstant('{app}'), 3, GUID);
CreateTask(3, GUID, PlayTask, 0, 'Play', MainExe, '');
CreateTask(3, GUID, SupportTask, 0, 'BioWare Website', 'http://www.bioware.com/', '');
CreateTask(3, GUID, SupportTask, 1, 'Support WebSite', 'http://masseffect.bioware.com/route/me/pc/vt/cs/en/', '');
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Binary: String;
GUID: TGUID;
begin
if CurUninstallStep=usUninstall then
begin
Binary:=ExpandConstant('{#GDFBinary}');
RetrieveGUIDForApplication(Binary, GUID);
RemoveFromGameExplorer(GUID);
RemoveTasks(GUID);
UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
end;
end;


ROMKA-1977 14-02-2015 16:12 2471278

Цитата:

Цитата Dodakaedr
Пробуйте: »

в коде GameuxInstallHelper ошибка - Duplicate identifier TGUID",
код с дисками ничего не отображает.

Kashtan007 14-02-2015 17:37 2471309

Всем привет, можно ли сделать несколько страниц Components, если да, то как?
Заранее спасибо за ответы!

Dodakaedr 14-02-2015 18:02 2471326

Цитата:

Цитата Kashtan007
Всем привет, можно ли сделать несколько страниц Components, если да, то как?
Заранее спасибо за ответы! »

Одну страницу через секцию [Components] а вторую вручную создавать.
Пример
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

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

[CustomMessages]
rus.CompName1=Зима.
rus.CompName2=Снежинки при загрузке.
rus.CompName3=Обводка персонажа снежинкой.

rus.CompName4=Интерфейс игры.

rus.CompName5=Модели.
rus.CompName6=Конфедерат.
rus.CompName7=Анархист.

rus.CompName8=Шарик для скила "Заморозка".
rus.CompName9=Fix убирающий тряску экрана.
rus.CompName10=Шарик + Fix,2в1.

rus.CompName11=Электро.
rus.CompName12=Огненная.
rus.CompName13=Снежная.
rus.CompName14=Сфера.

rus.CompName15=Электро.
rus.CompName16=Огненная.
rus.CompName17=Снежная.
rus.CompName18=Сфера.

rus.CompName19=Электро.
rus.CompName20=Огненная.
rus.CompName21=Снежная.
rus.CompName22=Сфера.(Для-3Б)

rus.CompName23=1-Электро,2-Огонь,3-Снег.
rus.CompName24=1-Огонь,2-Снег,3-Сфера.
rus.CompName25=1-Снег,2-Сфера,3-Электро.
rus.CompName26=1-Сфера,2-Электро,3-Огонь.
rus.CompName27=1-Электро,2-Снег,3-Огонь.
rus.CompName28=1-Огонь,2-Сфера,3-Снег.
rus.CompName29=1-Снег,2-Огонь,3-Сфера.
rus.CompName30=1-Сфера,2-Снег,3-Электро.
rus.CompName31=1-Электро,2-Огонь,3-Сфера.
rus.CompName32=1-Огонь,2-Электро,3-Сфера.
rus.CompName33=1-Снег,2-Огонь,3-Электро.
rus.CompName34=1-Сфера,2-Снег,3-Огонь.
rus.CompName35=1-Стрел,2-Пех,3-Мед.

[Components]
Name: Mode; Description: mode; Types: Full; flags: fixed
Name: Mode/SPOnly; Description: SPOnly; Flags:  disablenouninstallwarning exclusive
Name: Mode/MPOnly; Description: MPOnly; Flags: disablenouninstallwarning exclusive
Name: Mode2; Description: mode; Types: Full; flags: fixed
Name: Mode2/SPOnly2; Description: SPOnly; Flags: disablenouninstallwarning exclusive
Name: Mode2/MPOnly2; Description: MPOnly; Flags: disablenouninstallwarning exclusive


[Code]
var
ComponentsPage: TWizardPage;
ComponentsList: TNewCheckListBox;

procedure RedesignWizardForm;
begin
  ComponentsPage := CreateCustomPage(wpSelectComponents, SetupMessage(msgWizardSelectComponents), SetupMessage(msgSelectComponentsDesc));

  ComponentsList := TNewCheckListBox.Create(WizardForm);
  with ComponentsList do
  begin
    Parent := ComponentsPage.Surface;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(416), ScaleY(220));

    AddCheckBox('Дополнительные компоненты.', '', 0, False, True, False, True, nil);
      AddCheckBox('Winter', '', 1, False, True, False, True, nil);
        AddCheckBox(CustomMessage('CompName1'), '', 2, False, True, False, True, nil);
        AddCheckBox(CustomMessage('CompName2'), '', 2, False, True, False, True, nil);
        AddCheckBox(CustomMessage('CompName3'), '', 2, False, True, False, True, nil);
      AddCheckBox('Interface', '', 1, False, True, False, True, nil);
        AddCheckBox(CustomMessage('CompName4'), '', 2, False, True, False, True, nil);

      AddCheckBox('Models', '', 1, False, True, False, True, nil);
        AddCheckBox(CustomMessage('CompName5'), '', 2, False, True, False, True, nil);
        AddCheckBox(CustomMessage('CompName6'), '', 2, False, True, False, True, nil);
        AddCheckBox(CustomMessage('CompName7'), '', 2, False, True, False, True, nil);

      AddCheckBox('Шарик от скила ''Заморозка'',Fix на массу киборга', '', 1, False, True, False, True, nil);
        AddRadioButton(CustomMessage('CompName8'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName9'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName10'), '', 2, False, True, nil);

    AddCheckBox('Сферы 3B', '', 0, False, True, False, True, nil);
      AddCheckBox('Стрел', '', 1, False, True, False, True, nil);
        AddRadioButton(CustomMessage('CompName11'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName12'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName13'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName14'), '', 2, False, True, nil);

      AddCheckBox('Пех', '', 1, False, True, False, True, nil);
        AddRadioButton(CustomMessage('CompName15'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName16'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName17'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName18'), '', 2, False, True, nil);

      AddCheckBox('Мед', '', 1, False, True, False, True, nil);
        AddRadioButton(CustomMessage('CompName19'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName20'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName21'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName22'), '', 2, False, True, nil);

      AddCheckBox('Сферы для 3B + Tesla.Cкрины идут по цифре 1,показывая как выглядит тесла пуха.Как выглядит 3B смотрите выше', '', 1, False, True, False, True, nil);
        AddRadioButton(CustomMessage('CompName23'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName24'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName25'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName26'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName27'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName28'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName29'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName30'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName31'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName32'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName33'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName34'), '', 2, False, True, nil);
        AddRadioButton(CustomMessage('CompName35'), '', 2, False, True, nil);
  end;
end;

procedure InitializeWizard();
begin
    RedesignWizardForm;
end;


ShadeUa 14-02-2015 22:31 2471390

Здраствуйте еще раз , я ту проблемку уже как то сам решил возник другой вопрос . У меня в старом коде выполнялась процедура через "EngOnClick" , неподскажете как сделать артельнативу , тоесть через ьту процедуру у меня выполнялась нажатия на кнопку ,.... блин мне сложно обьяснить , если кто то понял поможете ?
https://yadi.sk/i/_48ekHNVegFvk

вот еще , в том инстале одна кнопка активна а одна не активная в моем оба , ето все изза той процедури https://yadi.sk/i/Kk9r5DcyegGGP

Dodakaedr 15-02-2015 00:16 2471413

ShadeUa, Скрипт еще раз скиньте, как-нибудь попробую.

ShadeUa 15-02-2015 00:27 2471415

Цитата:

Цитата Dodakaedr
Скрипт еще раз скиньте, как-нибудь попробую. »

хорошо , я сейчас закину скрипт , и откуда я его свиснул , вы сможете помочь точно так же арелизовать с языками?

Dodakaedr 15-02-2015 00:29 2471417

Цитата:

Цитата ShadeUa
хорошо , я сейчас закину скрипт , и откуда я его свиснул , вы сможете помочь точно так же арелизовать с языками? »

Если смогу то помогу, а если нет то извиняйте.

ShadeUa 15-02-2015 00:32 2471418

Цитата:

Цитата Dodakaedr
Если смогу то помогу, а если нет то извиняйте. »

https://yadi.sk/d/OPHiOIRpegLWV
вот скрипт , там мой основной и готовый скаченный с интернета , окуда я хотел своровать затею

ShadeUa 16-02-2015 17:02 2472058

Цитата:

Цитата Dodakaedr
Если смогу то помогу, а если нет то извиняйте. »

Извините что так навяжчиво , у вас получилось что то с делать скриптом ?

spaun55555 16-02-2015 20:02 2472125

Я прошу прощение, а может кто подсказать: в конце инсталятора стоит галочка "запустить...."
А что прописать чтобы еще была строчка "Перейти на сайт..."
В папке есть фал my site.url
Подскажите плиз

Tixo 16-02-2015 21:01 2472153

создать еще один месадж бокс, по типу запустить?

spaun55555 16-02-2015 21:08 2472157

"создать еще один месадж бокс, по типу запустить?"
Пробовал не работает...если просто указать файл ты выдается сообщение что это типа не исполняющий файл exe (приложение)

Dodakaedr 16-02-2015 22:25 2472194

Цитата:

Цитата ShadeUa
Извините что так навяжчиво , у вас получилось что то с делать скриптом ? »

Вам в почту еще вчера ответил.

Цитата:

Цитата spaun55555
Я прошу прощение, а может кто подсказать: в конце инсталятора стоит галочка "запустить...."
А что прописать чтобы еще была строчка "Перейти на сайт..."
В папке есть фал my site.url
Подскажите плиз »

для не исполняемых файлов применяется флаг shellexec
файл my site.url не обязательно, но все же:
Пример
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

//[Files]
//Source: my site.url; DesDir: "{app}";

[Run]
Filename: "http://forum.oszone.net/thread-294838-12.html"; Description: "Посетить OsZone"; Flags: shellexec skipifsilent postinstall
;или через файл my site.url
//Filename: "{app}\my site.url"; Description: "Посетить my site"; Flags: shellexec skipifsilent postinstall unchecked


spaun55555 16-02-2015 22:35 2472198

Dodakaedr - спасибо огромное

diman_21Ru 17-02-2015 13:47 2472451

Всем привет может кто нибудь скинуть скрипт пикник с отображением картинок при наведение на компонент.

Dodakaedr 17-02-2015 16:34 2472502

Как можно выгрузить dll (разблокировать путь) не закрывая процесс?
Скриншот

Dodakaedr 17-02-2015 20:34 2472600

Цитата:

Цитата diman_21Ru
Всем привет может кто нибудь скинуть скрипт пикник с отображением картинок при наведение на компонент. »

Скрытый текст
Код:

[Setup]
AppName=Моя программа
AppVersion=1.5
AppPublisher=YURSHAT
AppPublisherURL=http://krinkels.org/
DefaultDirName={pf}\Моя программа

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

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2
RU.ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.
RU.ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.
RU.CompDesc1=Описание первого компонента
RU.CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[Code]
type
  TComponentDesc = record
    Description: String;
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescPanel, CompDescImgPanel: TPanel;
  CompDescText: array[1..2] of TLabel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    CompDescImg.Show;

    CompDescText[2].Caption := CompDescs[CompIndex].Description;
    CompDescText[2].Enabled := True;
  end else
  begin
    CompDescText[2].Caption := CustomMessage('ComponentsInfo');
    CompDescText[2].Enabled := False;
    CompDescImg.Hide;
  end;
  LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescImg.Hide;
  CompDescText[2].Caption := CustomMessage('ComponentsInfo');
  CompDescText[2].Enabled := False;
  LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
  end;

  CompDescText[1] := TLabel.Create(WizardForm);
  with CompDescText[1] do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsImgInfo');
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Hide;
  end;

  CompDescPanel := TPanel.Create(WizardForm);
  with CompDescPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(125), ScaleX(225), ScaleY(80));
    BevelInner := bvLowered;
  end;

  CompDescText[2] := TLabel.Create(WizardForm);
  with CompDescText[2] do
  begin
    Parent := CompDescPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsInfo');
  end;

  AddCompDescription(1, CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
  AddCompDescription(2, CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
end;


diman_21Ru 18-02-2015 12:16 2472834

Dodakaedr, А код на без описаний компонентов не найдется?

diman_21Ru 18-02-2015 13:21 2472881

Вложений: 1
По умолчанию стоят галочки на Бекап и удаление , как можно снять галочки? что бы по умолчанию они были сняты

Dodakaedr 18-02-2015 14:44 2472933

Цитата:

Цитата diman_21Ru
А код на без описаний компонентов не найдется? »

Удалите что касается описания и получим это:
Скрытый текст
Код:

[Setup]
AppName=Моя программа
AppVersion=1.5
AppPublisher=YURSHAT
AppPublisherURL=http://krinkels.org/
DefaultDirName={pf}\Моя программа

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

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2
RU.ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.
RU.ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.
RU.CompDesc1=Описание первого компонента
RU.CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[Code]
type
  TComponentDesc = record
    Description: String;
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescImgPanel: TPanel;
  CompDescText: array[1..2] of TLabel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    CompDescImg.Show;

  end else
  begin
    CompDescImg.Hide;
  end;
  LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescImg.Hide;
  LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
  end;

  CompDescText[1] := TLabel.Create(WizardForm);
  with CompDescText[1] do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsImgInfo');
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Hide;
  end;

  AddCompDescription(1, '', 'CompDescImg1.bmp');
  AddCompDescription(2, '', 'CompDescImg2.bmp');
end;



Цитата:

Цитата diman_21Ru
По умолчанию стоят галочки на Бекап и удаление , как можно снять галочки? что бы по умолчанию они были сняты »

Присвоить чекбоксам Checked := False;

diman_21Ru 18-02-2015 15:09 2472941

Как можно не нажимая на галочку или флажок а просто на строчку компонента чтобы он выбирался.

ShadeUa 18-02-2015 21:58 2473191

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

Dodakaedr 18-02-2015 22:46 2473231

Цитата:

Цитата ShadeUa
Здраствуйте , не подскажете как можна сделать кнопки , при нажатии что б менялся язык инстолятора »

Скрытый текст
Код:

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
ShowLanguageDialog=auto

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

[CustomMessages]
; Русский
rusButtonBack=< &Назад
rusButtonNext=&Далее >
rusButtonCancel=Отмена
rusSetupWindowTitle=Установка — %1
rusWelcomeLabel1=Вас приветствует Мастер установки %1
rusWelcomeLabel2=Программа установит %1, версия %2 на Ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

; English
engButtonBack=< &Back
engButtonNext=&Next >
engButtonCancel=Cancel
engSetupWindowTitle=Setup — %1
engWelcomeLabel1=Welcome to the %1 Setup Wizard
engWelcomeLabel2=This will install %1 version %2 on your computer.%n%nIt is recommended that you close all other applications before continuing.%n%nClick Next to continue, or Cancel to exit Setup.

[Code]
var
  lang: String;
  langBtn: TButton;

procedure ChangeLang();
begin
  WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack');
  WizardForm.NextButton.Caption:= CustomMessage(lang+'ButtonNext');
  WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel');
  WizardForm.Caption:= FmtMessage(CustomMessage(lang+'SetupWindowTitle'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel1.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel1'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel2.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel2'), ['{#SetupSetting('AppName')}', '{#SetupSetting('AppVersion')}']);
end;

procedure LangBtnClick(Sender: TObject);
begin
  if lang='rus' then begin
    lang:= 'eng';
    langBtn.Caption:= 'рус';
  end else begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end;
  ChangeLang();
end;

procedure InitializeWizard;
begin
  langBtn:= TButton.Create(WizardForm);
  with langBtn do begin
    SetBounds(10,WizardForm.CancelButton.Top,30,WizardForm.CancelButton.Height)
    OnClick:= @LangBtnClick;
    Parent:= WizardForm;
  end;

  if ActiveLanguage='rus' then begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end else begin
    lang:= 'eng';
    langBtn.Caption:= 'рус';
  end;
end;


svs23 19-02-2015 11:18 2473366

Цитата:

Цитата Gnom_aka_Lexander
by_gangster, там точно есть библиотека InnoTools Downloader к каковой идет множество невероятно понятных примеров и просто великолепная справка. »

кто подскажет как реализовать:
файл 123.zip загружался в temp там же распаковывался в папку 123 только если в выборе компонентов выбран компонент d
при этом чтобы эта процедура проходила до начала копирования других компонентов инстолятора
а после установки файл 123 и папка 123 удалялись

с InnoTools Downloader думаю разберусь...

roman_kudin@vk 19-02-2015 15:41 2473496

Ребят, подскажите в таких вопросах.
1. Как можно сделать красивое оформление инсталлятора?
2. Что бы при выборе компонентов, справа появлялось превью компонента, именно справа, в отдельно области. Делал при наведении на компонент появляеться, но не удобно, загораживает другие компоненты.

saneksanek 19-02-2015 19:30 2473592

roman_kudin@vk, Собственно в чем проблема? берешь закрываешь стандартную форум рисуешь свою новую.Примеров в интернете куча,что касается по второму вопросу имеется ввиду это? http://prntscr.com/675qc0

roman_kudin@vk 19-02-2015 23:13 2473654

Цитата:

Цитата saneksanek (Сообщение 2473592)
roman_kudin@vk, Собственно в чем проблема? берешь закрываешь стандартную форум рисуешь свою новую.Примеров в интернете куча,что касается по второму вопросу имеется ввиду это? http://prntscr.com/675qc0

Да, такое.
А насчет первого,то я со скинами пробовал, а как их к проекту "прикрутить"?

diman_21Ru 20-02-2015 00:42 2473674

Как убрать страницу по созданию папки и ярлыка удаление программы .

kotyarko@fb 20-02-2015 00:43 2473676

Цитата:

Цитата diman_21Ru
Как убрать страницу по созданию папки и ярлыка удаление программы »

Код:

[Setup]
DisableProgramGroupPage=yes


saneksanek 20-02-2015 01:25 2473682

roman_kudin@vk,Забирай https://yadi.sk/d/HorUBofNenkGB
Тут
Код:

WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(205), ScaleY(155));
И тут
Код:

  SetBounds(ScaleX(215), ScaleY(0), ScaleX(200), ScaleY(200));
Играешь с цифрами,описания к компонентам не вырезал просто скрыл,надо будет восстановишь.

ROMKA-1977 20-02-2015 09:55 2473743

Вложений: 1
Цитата:

Цитата roman_kudin@vk
Что бы при выборе компонентов, справа появлялось превью компонента, именно справа, в отдельно области. »

читать дальше »

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

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

[Types]
Name: custom; Description: Полная установка Test
Name: rusinstall; Description: Установка русской версии
Name: enginstall; Description: Установка английской версии

[Components]
Name: program; Description: Язык локализации Test:; Types: custom; Flags: fixed
Name: program\rusinstall; Description: Русская локализация; Types: rusinstall; Flags: exclusive
Name: program\enginstall; Description: Английская локализация; Types: enginstall; Flags: exclusive

[Files]
Source: Img/Rus.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Img/Eng.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
ImagePanel: TPanel;
ComponentsInfoImage: TBitmapImage;

procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('program\rusinstall') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Rus.bmp')) else
If IsComponentSelected('program\enginstall') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Eng.bmp'));
end;

procedure InitializeWizard();
begin
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Visible := True;
WizardForm.ComponentsList.Height := ScaleX(100);
WizardForm.ComponentsList.Top := ScaleX(47);
WizardForm.ComponentsList.Width := ScaleX(232);
WizardForm.ComponentsDiskSpaceLabel.Visible := False;

ImagePanel := TPanel.Create(WizardForm);
ImagePanel.Parent := WizardForm.SelectComponentsPage;
ImagePanel.Caption := '';
ImagePanel.Top := ScaleX(47);
ImagePanel.Left := ScaleX(240);
ImagePanel.Width := ScaleX(177);
ImagePanel.Height := ScaleX(101);
ImagePanel.BevelInner := bvRaised;
ImagePanel.BevelOuter := bvLowered;

ExtractTemporaryFile('Rus.bmp');
ExtractTemporaryFile('Eng.bmp');
WizardForm.ComponentsList.OnClickCheck:= @ComponentsListClickCheck;
ComponentsInfoImage:= TBitmapImage.Create(WizardForm);
ComponentsInfoImage.Parent:= ImagePanel;
ComponentsInfoImage.Top:= ScaleY(4);
ComponentsInfoImage.Left:= ScaleX(4);
ComponentsInfoImage.Width:= ScaleX(168);
ComponentsInfoImage.Height:= ScaleY(92);
ComponentsInfoImage.Stretch:= True;
ComponentsInfoImage.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectComponents: ComponentsListClickCheck(nil);
end;
end;

diman_21Ru 20-02-2015 13:05 2473817

Как сделать выбор компонента нажимая на любое место этой строчки а не только на галочку или флажок, заранее благодарю !

El Sanchez 20-02-2015 13:40 2473838

Цитата:

Цитата diman_21Ru
Как сделать выбор компонента нажимая на любое место этой строчки а не только на галочку или флажок »

diman_21Ru, WantTabs в True.

diman_21Ru 20-02-2015 14:06 2473850

El Sanchez, А У меня нет такого название в установщике не подскажите куда вставить, буду очень благодарен

kotyarko@fb 20-02-2015 14:47 2473859

Цитата:

Цитата diman_21Ru
не подскажите куда вставить »

Код:

WizadForm.ComponentsList.WantTabs := True;

roman_kudin@vk 20-02-2015 14:52 2473860

Цитата:

Цитата saneksanek (Сообщение 2473682)
roman_kudin@vk,Забирай https://yadi.sk/d/HorUBofNenkGB
Тут
Код:

WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(205), ScaleY(155));
И тут
Код:

  SetBounds(ScaleX(215), ScaleY(0), ScaleX(200), ScaleY(200));
Играешь с цифрами,описания к компонентам не вырезал просто скрыл,надо будет восстановишь.

Спасибо.

diman_21Ru 20-02-2015 15:39 2473876

WizadForm.ComponentsList.WantTabs := True; не работает если использовать так

procedure InitializeWizard();
begin
WizardForm.ComponentsList.WantTabs:=True;
end;

Shift85 20-02-2015 16:19 2473896

Всем привет.
Как добавить тень к тексту кнопок наложенных через ботву?

ShadeUa 20-02-2015 17:12 2473919

Цитата:

Цитата Dodakaedr
Здраствуйте , не подскажете как можна сделать кнопки , при нажатии что б менялся язык инстолятора » »

Спасибо )

Shift85 20-02-2015 17:26 2473922

Вложений: 1
Цитата:

Цитата ShadeUa
Цитата Dodakaedr:
Здраствуйте , не подскажете как можна сделать кнопки , при нажатии что б менялся язык инстолятора » »
Спасибо ) »


ShadeUa 20-02-2015 17:33 2473926

Dodakaedr, Здраствейте , не могли б помогти с соеденениям скрипта , просто там в CustomMessages в скрипте идет rus.ButtonBack а втом что вы кинули без точки , и я недоганяю как изменить , ну тоисть как добавить точку но так что б прога не ругалась

saneksanek 20-02-2015 22:29 2474013

ShadeUa, В чем собственно проблема писать дальше так? rusButtonBack rusButtonNext и так далее

ShadeUa 20-02-2015 23:00 2474018

Цитата:

Цитата saneksanek
В чем собственно проблема писать дальше так? rusButtonBack rusButtonNext и так далее »

ща покажу

По сути меняеться только имья окна , а что б вс ето заново прописовать слишком долго , да и код будет длинным, по етому спросил как сделать через точку , что б упростить
https://yadi.sk/i/jmnacRFxeon8z
https://yadi.sk/i/rFmXH4kHeon9M

Dodakaedr 20-02-2015 23:34 2474027

Цитата:

Цитата ShadeUa
По сути меняеться только имья окна , а что б вс ето заново прописовать слишком долго , да и код будет длинным, по етому спросил как сделать через точку , что б упростить »

Здесь либо результат либо простота. Если хотите через точку(упростить) то придется сделать выбор языка только при запуске инсталлятора, если хотите до конца довести этот задум то вам нужно вес текст прописать в процедуре ChangeLang без точки как в примере.

ShadeUa 20-02-2015 23:51 2474032

Цитата:

Цитата Dodakaedr
Здесь либо результат либо простота. Если хотите через точку(упростить) то придется сделать выбор языка только при запуске инсталлятора, если хотите до конца довести этот задум то вам нужно вес текст прописать в процедуре ChangeLang без точки как в примере. »

Вот так? и потом все ето прописать в ChangeLang?
https://yadi.sk/i/USsBrvW9eoooc

Dodakaedr 20-02-2015 23:58 2474034

Цитата:

Цитата ShadeUa
Вот так? и потом все ето прописать в ChangeLang? »

Да.

ShadeUa 21-02-2015 00:02 2474036

Цитата:

Цитата Dodakaedr
Да. »

спасибо большое, вы опять меня выручили , я завтра попробую ето реализовать )) :)

roman_kudin@vk 21-02-2015 13:25 2474126

А не подкините пример видоизменения инсталлятора?
Как изменить ширину инсталлятора? Я то изменил, но кнопки и остальное не сдвигаеться

Okta_333 21-02-2015 14:28 2474141

Подскажите пожалуйста, как сделать чтобы деинсталятор выдавал запрос на удаление папок с сохранениями из My Documents?

TryRooM 21-02-2015 14:49 2474154

Okta_333,
Удаление папок с сохранениями из My Documents
Скрытый текст
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
 begin
  if CurUninstallStep=uspostUninstall then // èëè usUninstall
  if DirExists(ExpandConstant('{userdocs}')+'\Buka\Runs') then
  if MsgBox('Óäàëèòü ñîõðàíåíèÿ èãðû?', mbInformation, MB_YESNO) = idYes then
  DelTree(ExpandConstant('{userdocs}')+'\Buka\Runs', True, True, True);
  RemoveDir(ExpandConstant('{userdocs}')+'\Buka'); //óäàëèò ïàïêó, åñëè ïóñòàÿ
  end;


kotyarko@fb 21-02-2015 14:49 2474155

Цитата:

Цитата Okta_333
Подскажите пожалуйста, как сделать чтобы деинсталятор выдавал запрос на удаление папок с сохранениями из My Documents? »

Типо такого?
Код:

Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if (CurUninstallStep = usUninstall) and DirExists(ExpandConstant('{userdocs}\Папка')) then
 begin
  if MsgBoxEx(UninstallProgressForm.Handle, 'Вы хотите очистить все игровые сохранения?', 'Удаление игровых сохранений', MB_YESNO or MB_ICONQUESTION, 0, 0) = IDYES then
  DelTree(ExpandConstant('{userdocs}\Папка'), True, True, True);
 end;
end;

p.s опоздал чутка :)

Okta_333 21-02-2015 15:06 2474162

kotyarko@fb
Вот спасибо! Всё прекрасно работает!

Dodakaedr 21-02-2015 15:46 2474172

Цитата:

Цитата roman_kudin@vk
А не подкините пример видоизменения инсталлятора?
Как изменить ширину инсталлятора? Я то изменил, но кнопки и остальное не сдвигаеться »

Кнопки и все остальное тоже нужно вручную перемещать
Скрытый текст
Код:

[Setup]
AppName=test2
AppVerName=test2
DefaultDirName={pf}\test

[Code]
procedure InitializeWizard;
begin
    with WizardForm do
    begin
        ClientWidth := ScaleX( 598 );
        ClientHeight := ScaleY( 355 );

        OuterNotebook.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 302 ) );
        InnerNotebook.SetBounds( ScaleX( 12 ), ScaleY( 62 ), ScaleX( 574 ), ScaleY( 238 ) );
        Bevel1.SetBounds( ScaleX( 0 ), ScaleY( 60 ), ScaleX( ClientWidth ), ScaleY( 3 ) );
        Bevel.SetBounds( ScaleX( 0 ), ScaleY( 302 ), ScaleX( ClientWidth ), ScaleY( 2 ) );
        BeveledLabel.Top := ScaleY( 294 );
        BackButton.SetBounds( ScaleX( 352 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
        NextButton.SetBounds( ScaleX( 432 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
        CancelButton.SetBounds( ScaleX( 512 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
        MainPanel.Width := ScaleX( ClientWidth );
        WizardSmallBitmapImage.Left := ScaleX( ClientWidth - 58 )
    end;
end;


Tixo 21-02-2015 16:10 2474174

Бьюсь уже некоторое время, но так и не смог прикрутить скин к инсталлу, надеюсь поможете исправить мне данную проблему)
http://rghost.ru/8KcM7QcJ4 - сам скрипт

Dodakaedr 21-02-2015 16:12 2474176

Цитата:

Цитата Tixo
сам скрипт »

а файлы для его работы где взять???

Tixo 21-02-2015 16:17 2474177

http://rghost.ru/6Sdf9gdX2 звиняюсь не подумал)

Dodakaedr 21-02-2015 16:39 2474184

Tixo, Fix script. Тестил на расширенном юникоде.

Tixo 21-02-2015 16:49 2474188

хм страннО, у меня отказывается показывать скин(

Dodakaedr 21-02-2015 16:57 2474190

Tixo, A какая у вас версия inno? Unicode или Ansi?

Tixo 21-02-2015 16:59 2474191

ansi

Dodakaedr 21-02-2015 17:01 2474194

Tixo, понятно. Замените IsSkinAnsi

Tixo 21-02-2015 17:03 2474196

все теперь все заработало) благодарю)

Irenis 22-02-2015 00:41 2474344

Здравствуйте уважаемые форумчане)) Очень нужна помощь...
Вот в чем суть. Нужно, чтобы после установки игры, в меню пуск создавалась папка (с моим названием), а в этой папке было несколько кликабельных ярлыков со ссылками, одна ссылка например на общий сайт разработчика, а вторая конкретно на игру. При этом хотелось бы, чтоб один ярлык так и назывался "сайт разработчика", а второй "сайт игры", ну а при нажатии происходил переход по заданной ссылке для каждого ярлыка. Ну и еще желательно, чтоб для каждого ярлыка можно было задать свою иконку.
Подскажите, возможно ли это как то реализовать? И если возможно, помогите, пожалуйста, со скриптом :blush2: Буду благодарна :)

kotyarko@fb 22-02-2015 03:40 2474363

Цитата:

Цитата Irenis
Подскажите, возможно ли это как то реализовать? И если возможно, помогите, пожалуйста, со скриптом »

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

#define DeveloperSite "http://...com"
#define GameSite "http://...com"

[Setup]
AppName=Shortcuts Creator
AppVerName=0
DefaultGroupName=Shortcuts
DefaultDirName=.

[Icons]
Name: "{group}\Сайт разработчика"; Filename: "{#DeveloperSite}"; Check: GroupShortcuts(1)
Name: "{group}\Сайт игры"; Filename: "{#GameSite}"; Check: GroupShortcuts(2)

[_Code]
Function GroupShortcuts(Idx: Integer): Boolean;
begin
 case Idx of
  //здесь можно указать определённое условие, при котором будут устанавливаться ярлыки (для 1-го и 2-го соответственно)
  1: Result := True;
  2: Result := True;
 end;
end;


palsn2000 22-02-2015 08:24 2474381

Доброе время суток!
Делаю инсталлятор, во время установки играет музыка с помощью bass.dll
используется один MP3 файл, музыка зациклена: BASS_SAMPLE_LOOP = 4
сделал на основе примера с какого-то сайта, музыка останавливается и библиотека выгружается в самом конце по процедуре:
Код:

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

Возник вопрос: можно ли сделать так, чтобы по окончании установки (когда доходим до FinishedPage) основной зацикленный файл MP3 глушился, а вместо него однократно воспроизводился бы другой?

Типа устанавливаем "увесистую" программу - процесс длительный - параллельно инсталлятор развлекает нас тихой классической музыкой, нам всё равно надоело ждать и мы уснули или пошли обедать, в это время инсталлятор наконец выполнил свою задачу и извещает нас об этом, например, с помощью записи паровозного гудка :)

Irenis 22-02-2015 11:19 2474446

Цитата:

Цитата kotyarko@fb
зависит от мелочей (принудительная ли должна быть установка этих ярлыков, зависит ли их установка от каких-то параметров »

Спасибо, буду пробовать :) Установка да, желательно принудительная. От параметров не зависит, просто установилась игра, и при этом появились ярлыки. Еще не поняла, ярлыки эти в папке будут или просто по отдельности в меню пуск? И как сделать, если допустим нужно не два, а три ярлыка со ссылками? Спасибо :yes:

TryRooM 22-02-2015 12:19 2474472

Irenis, если допустим нужно не два, а три ярлыка со ссылками
Выбирайте варианты
Скрытый текст
Код:


системная иконка ie  IconFilename: {sys}\shell32.dll; IconIndex: 220;

[Files]
Source: "A.url"; DestDir: "{app}";
Source: "Buy.url"; DestDir: "{app}";
Source: "Set.url"; DestDir: "{app}";

[Icons]
Name: {group}\Online 3; Filename: {app}\A.url; WorkingDir: {app}; IconFilename: {sys}\shell32.dll; IconIndex: 220;
Name: {group}\Online 2; Filename: {app}\Buy.url; WorkingDir: {app}; IconFilename: {sys}\shell32.dll; IconIndex: 220;
Name: {group}\Online; Filename: {app}\Set.url; WorkingDir: {app}; IconFilename: {sys}\shell32.dll; IconIndex: 220;
/////////////////////////////////
[Icons]
Name: {group}\Online 3; Filename: http://forum.ru-board.com; IconFilename: {sys}\shell32.dll; IconIndex: 220;
Name: {group}\Online 2; Filename: http://forum.ru-board.com; IconFilename: {sys}\shell32.dll; IconIndex: 220;
Name: {group}\Online; Filename: http://forum.ru-board.com; IconFilename: {sys}\shell32.dll; IconIndex: 220;
/////////////////////////////////
[Files]
Source: "file.ico"; DestDir: "{app}";  если нужны свои иконки, то прописываем их

[Icons] 
Name: {group}\Online 3; Filename: http://forum.ru-board.com; WorkingDir: {app}; IconFilename: {app}\file.ico;
Name: {group}\Online 2; Filename: http://forum.ru-board.com; WorkingDir: {app}; IconFilename: {app}\file.ico;
Name: {group}\Online; Filename: http://forum.ru-board.com; WorkingDir: {app}; IconFilename: {app}\file.ico;


Irenis 22-02-2015 13:15 2474488

TryRooM, и Вам спасибо большое :)

В общем методом тыка получилось, примерно поняла как делать эти ссылки, оказалось не так сложно. Но так же оказалось, что это немножко не то. Эти ярлыки создаются в папке с игрой, эта папка оказывается где то внизу и ее не видно, если специально не искать.
А хочется, чтоб папка была вверху и отдельно от игры. То есть отдельная папка с моими ссылками. Допустим, у себя я нажала меню пуск, у меня там высвечиваются последние установленные приложения. И например есть Inno Setup, и в этой строке с Inno Setup есть стрелочка, на которую нажимаешь и открываются сбоку разные скрипты. Как бы сделать что то подобное, чтоб сверху создавалась папка, которую можно развернуть, а там ссылки, можно даже обычные, со стандартными ярлыками. Или это я слишком много хочу и так нельзя сделать? Уж извините за неопытность :blush:

roman_kudin@vk 22-02-2015 13:45 2474494

У кого есть исходник полного изменения вида инсталлятора, поделитесь пожалуйста.

TryRooM 22-02-2015 13:52 2474497

Irenis, создавалась папка, которую можно развернуть, а там ссылки
Скрытый текст
Код:

Name: {group}\Иконки\Online 3; Filename: http://forum.ru-board.com; IconFilename: {sys}\shell32.dll; IconIndex: 220;
Name: {group}\Иконки\Online 2; Filename: http://forum.ru-board.com; IconFilename: {sys}\shell32.dll; IconIndex: 220;
Name: {group}\Иконки\Online; Filename: http://forum.ru-board.com; IconFilename: {sys}\shell32.dll; IconIndex: 220;


Irenis 22-02-2015 14:15 2474503

Цитата:

Цитата TryRooM
создавалась папка, которую можно развернуть, а там ссылки »

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

Ладно, скажу честно, в этой папке будут находиться несколько ссылок на сайты, не связанные с игрой :blush2: И нужно, чтобы человек установив игру или приложение, даже не совсем понял, откуда у него в меню пуск взялась папка со ссылками. Думала, может сделать, чтоб такая папочка создавалась автоматически на рабочем столе при установке приложения, но это я тоже не умею, да и в меню пуск вроде не так заметно. Точнее мне нужно, чтоб было заметно, но не сразу после установки игры))

TryRooM 22-02-2015 14:31 2474509

Irenis,
Скрытый текст
Код:

Source: "Установка иконок\*"; DestDir: "{userdesktop}\Установка иконок"; Flags: ignoreversion recursesubdirs createallsubdirs;

Папка будет на рабочем столе.
В любом случае, надо дать пользователю возможность выбора установки дополнения.

kotyarko@fb 22-02-2015 20:50 2474631

Цитата:

Цитата palsn2000
можно ли сделать так, чтобы по окончании установки (когда доходим до FinishedPage) основной зацикленный файл MP3 глушился, а вместо него однократно воспроизводился бы другой? »

Если я правильно понял, то вам нужно что-то типа этого (в дополнение к основному коду):
Код:

Const //Вот только точно не знаю, какие из них за что отвечают.
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;

Procedure CurPageChanged(CurPageID: Integer);
begin
 if CurPageID = wpFinished then
 begin
  if BASS_Stop then  //останавливаем музыку, которая играла до этого
  begin
  ExtractTemporaryFile('sound2.mp3');  //загружаем новую мелодию
  mp3Name := ExpandConstant('{tmp}\sound2.mp3');
  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, 0, 0, BASS_ACTIVE_STALLED);
  BASS_Start();
  BASS_ChannelPlay(mp3Handle, False);
  end;
 end;
end;


roman_kudin@vk 22-02-2015 23:09 2474691

Подскажите, как скин прикрутить?

Код:

[Files]
Source: "1.bmp"; DestName: "1.bmp"; Flags: dontcopy
Source: "2.bmp"; DestName: "2.bmp"; Flags: dontcopy
Source: "theme.cjstyles"; DestDir: {tmp}; Flags: dontcopy
Source: "ISSkin.dll"; DestDir: {tmp}; Flags: dontcopy

[ Code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('theme.cjstyles');
LoadSkin(ExpandConstant('{tmp}\theme.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

способом вЬІше не получаеться.

TryRooM 23-02-2015 00:33 2474718

roman_kudin@vk, Как скин прикрутить
Скрытый текст
Код:

[Files]
Source: "Tiger.cjstyles"; DestDir: {tmp}; Flags: dontcopy
Source: "ISSkin.dll"; DestDir: {tmp}; Flags: dontcopy
Source: "1.bmp"; DestName: "1.bmp"; Flags: dontcopy
Source: "2.bmp"; DestName: "2.bmp"; Flags: dontcopy

[ Code]
procedure LoadSkin(lpszPath: PAnsiChar; lpszIniFileName: PAnsiChar); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload';
procedure UnloadSkin; external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup: Boolean;
begin
  ExtractTemporaryFile('isskin.dll');
  ExtractTemporaryFile('Tiger.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
  Result:=True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin;
end;


saneksanek 23-02-2015 05:07 2474734

roman_kudin@vk, Собственно прикрутить к чему? https://yadi.sk/d/n-QxYlq8eqTzd думаю добавить сможете в свой основной код сами

palsn2000 23-02-2015 15:26 2474896

kotyarko@fb, Большое спасибо за пример, всё заработало как надо.

В итоге для себя переделал в следующий вид (может кому-то тоже понадобится)
Код

Код:

const
BASS_ACTIVE_STALLED = 2;
//Однократное воспроизведение сигнала о завершении установки
Procedure CurPageChanged(CurPageID: Integer);
var
mp3Name: string; i : Integer;

  begin
  if CurPageID = wpFinished then
    begin
    if BASS_Stop then  //останавливаем музыку, которая играла до этого
      begin
      ExtractTemporaryFile('Complete.mp3');  //загружаем новую мелодию
      mp3Name := ExpandConstant('{tmp}\Complete.mp3');
      BASS_Init(-1, 44100, 0, 0, 0);
      i := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, BASS_ACTIVE_STALLED);
      BASS_Start();
      BASS_SETVolume(70)          // Уровень стартовой громкости (от 0 до 100)
      BASS_ChannelPlay(i, False);
      end;
    end;
  end;
//Однократное воспроизведение сигнала о завершении установки


roman_kudin@vk 23-02-2015 18:15 2474941

И последнее, ребят как тут переместить кнопку "Browse" и строку вЬІбора адреса?

Скрытый текст

Dodakaedr 23-02-2015 19:43 2474966

roman_kudin@vk, задайте параметры размещения таким элементам как WizardForm.DirEdit и WizardForm.DirBrowseButton
Код:

[setup]
AppName=MyProg
AppVerName=1.1
DefaultDirName={pf}\MyProg

[CODE]
procedure InitializeWizard();
begin
  WizardForm.DirEdit.SetBounds(ScaleX(5), ScaleY(150), ScaleX(WizardForm.DirEdit.Width), ScaleY(WizardForm.DirEdit.Height));
  WizardForm.DirBrowseButton.SetBounds(ScaleX(WizardForm.DirEdit.Width + 10), ScaleY(150), ScaleX(WizardForm.DirBrowseButton.Width), ScaleY(WizardForm.DirBrowseButton.Height));
end;


roman_kudin@vk 23-02-2015 21:23 2475012

Цитата:

Цитата Dodakaedr
[setup]
AppName=MyProg
AppVerName=1.1
DefaultDirName={pf}\MyProg
[code]
procedure InitializeWizard();
begin
WizardForm.DirEdit.SetBounds(ScaleX(5), ScaleY(150), ScaleX(WizardForm.DirEdit.Width), ScaleY(WizardForm.DirEdit.Height));
WizardForm.DirBrowseButton.SetBounds(ScaleX(WizardForm.DirEdit.Width + 10), ScaleY(150), ScaleX(WizardForm.DirBrowseButton.Width), ScaleY(WizardForm.DirBrowseButton.Height));
end; »

Подскажите мне на будущее, просто хочу разобраться, где вЬІ берете код самой кнопки "Browse", точнее ее название?

И если я сделал скин, все отображаеться, все нормально, но.. CheckBox я сменил, вместо галочки у меня другой символ, при принятии соглашения лицензии работает, а при вЬІборе компонентов нет.

Dodakaedr 23-02-2015 22:36 2475039

Цитата:

Подскажите мне на будущее, просто хочу разобраться, где вЬІ берете код самой кнопки "Browse", точнее ее название?
Сейчас просто знаю. А раньше так как я пользуюсь расширенной inno в редакторе форм при наведении курсора на элемент показывает его название.

ROMKA-1977 23-02-2015 23:08 2475049

Цитата:

Цитата roman_kudin@vk
У кого есть исходник полного изменения вида инсталлятора, поделитесь пожалуйста. »

ты об этом?
читать дальше »

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true
ShowTasksTreeLines=true

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

Name: Soft; Description: Установить дополнительное программное обеспечение; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/DirectX; Description: Установить Microsoft DirectX; Flags: unchecked
Name: Soft/vcredist_x86; Description: Установить Microsoft Visual С++ 2005 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Установить Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64

[CustomMessages]
ru.WizardDeltaWidthInvalid=Прирост формы по ширине должен быть в диапазоне от %1 до %2
ru.WizardDeltaHeightInvalid=Прирост формы по высоте должен быть в диапазоне от %1 до %2
ru.WizardWidthInvalid=Ширина формы должна быть в диапазоне от 0 до %1
ru.WizardHeightInvalid=Высота формы должна быть в диапазоне от 0 до %1

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
SPI_GETWORKAREA = $0030;

// Large Integer Functions
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';
// Configuration Reference
function SystemParametersInfo(uiAction, uiParam: UINT; var pvParam: TRect; fWinIni: UINT): BOOL; external 'SystemParametersInfo{#A}@user32.dll stdcall';

////////////////////////////////////////////////////////////////////////////
procedure RecreateWizardForm(const cx, cy: Longint; const IsDelta: Boolean);
// IsDelta : True - cx, cy is delta width/height, False - cx, cy is width/height
// cx......: delta width / width
// cy......: delta height / height
var
rt: TRect;
dx, dy: Longint;
begin
{ get deltas }
if not IsDelta then
begin
cx := cx - WizardForm.Width;
cy := cy - WizardForm.Height;
end;

{ check deltas }
if SystemParametersInfo(SPI_GETWORKAREA, 0, rt, 0) then
begin
{ check delta width }
if (cx < -WizardForm.Width) or (cx > rt.Right - WizardForm.Width) then
begin
if IsDelta then
MsgBox(FmtMessage(CustomMessage('WizardDeltaWidthInvalid'), [IntToStr(-WizardForm.Width), IntToStr(rt.Right - WizardForm.Width)]), mbError, MB_OK)
else
MsgBox(FmtMessage(CustomMessage('WizardWidthInvalid'), [IntToStr(rt.Right)]), mbError, MB_OK);
Exit;
end;

{ check delta height }
if (cy < -WizardForm.Height) or (cy > rt.Bottom - WizardForm.Height) then
begin
if IsDelta then
MsgBox(FmtMessage(CustomMessage('WizardDeltaHeightInvalid'), [IntToStr(-WizardForm.Height), IntToStr(rt.Bottom - WizardForm.Height)]), mbError, MB_OK)
else
MsgBox(FmtMessage(CustomMessage('WizardHeightInvalid'), [IntToStr(rt.Bottom)]), mbError, MB_OK);
Exit;
end;
end;

{ WizardForm }
with WizardForm do
begin
{ WizardForm }
Width := Width + cx;
Height := Height + cy;

{ buttons }
CancelButton.Left := CancelButton.Left + cx;
CancelButton.Top := CancelButton.Top + cy;
NextButton.Left := NextButton.Left + cx;
NextButton.Top := NextButton.Top + cy;
BackButton.Left := BackButton.Left + cx;
BackButton.Top := BackButton.Top + cy;

{ common }
OuterNotebook.ClientWidth := ClientWidth;
OuterNotebook.ClientHeight := OuterNotebook.ClientHeight + cy;
InnerNotebook.Width := InnerNotebook.Width + cx;
InnerNotebook.Height := InnerNotebook.Height + cy;
MainPanel.ClientWidth := ClientWidth;
WizardSmallBitmapImage.Left := WizardSmallBitmapImage.Left + cx;
PageNameLabel.Width := PageNameLabel.Width + cx;
PageDescriptionLabel.Width := PageDescriptionLabel.Width + cx;
Bevel1.Width := Bevel1.Width + cx;
Bevel.Width := Bevel.Width + cx;
Bevel.Top := Bevel.Top + cy;
BeveledLabel.Top := BeveledLabel.Top + cy;

{ wpWelcome }
dx := MulDiv(cy, WizardBitmapImage.Width, WizardBitmapImage.Height);
WizardBitmapImage.Width := WizardBitmapImage.Width + dx;
WizardBitmapImage.Height := WizardBitmapImage.Height + cy;
WelcomeLabel1.Left := WelcomeLabel1.Left + dx;
WelcomeLabel1.Width := WelcomeLabel1.Width + cx - dx;
dy := WelcomeLabel1.Height;
WelcomeLabel1.AdjustHeight;
dy := WelcomeLabel1.Height - dy;
WelcomeLabel2.Top := WelcomeLabel2.Top + dy;
WelcomeLabel2.Left := WelcomeLabel2.Left + dx;
WelcomeLabel2.Width := WelcomeLabel2.Width + cx - dx;
WelcomeLabel2.AdjustHeight;

{ wpLicense }
LicenseLabel1.Width := LicenseLabel1.Width + cx;
dy := LicenseLabel1.Height;
LicenseLabel1.AdjustHeight;
dy := LicenseLabel1.Height - dy;
LicenseMemo.Top := LicenseMemo.Top + dy;
LicenseMemo.Width := LicenseMemo.Width + cx;
LicenseMemo.Height := LicenseMemo.Height + cy - dy;
LicenseAcceptedRadio.Top := LicenseAcceptedRadio.Top + cy;
LicenseAcceptedRadio.Width := LicenseAcceptedRadio.Width + cx;
LicenseNotAcceptedRadio.Top := LicenseNotAcceptedRadio.Top + cy;
LicenseNotAcceptedRadio.Width := LicenseNotAcceptedRadio.Width + cx;

{ wpPassword }
PasswordLabel.Width := PasswordLabel.Width + cx;
dy := PasswordLabel.Height;
PasswordLabel.AdjustHeight;
dy := PasswordLabel.Height - dy;
PasswordEditLabel.Top := PasswordEditLabel.Top + dy;
PasswordEditLabel.Width := PasswordEditLabel.Width + cx;
PasswordEdit.Top := PasswordEdit.Top + dy;
PasswordEdit.Width := PasswordEdit.Width + cx;

{ wpInfoBefore }
InfoBeforeClickLabel.Width := InfoBeforeClickLabel.Width + cx;
dy := InfoBeforeClickLabel.Height;
InfoBeforeClickLabel.AdjustHeight;
dy := InfoBeforeClickLabel.Height - dy;
InfoBeforeMemo.Top := InfoBeforeMemo.Top + dy;
InfoBeforeMemo.Width := InfoBeforeMemo.Width + cx;
InfoBeforeMemo.Height := InfoBeforeMemo.Height + cy - dy;

{ wpUserInfo }
UserInfoNameLabel.Width := UserInfoNameLabel.Width + cx;
UserInfoNameEdit.Width := UserInfoNameEdit.Width + cx;
UserInfoOrgLabel.Width := UserInfoOrgLabel.Width + cx;
UserInfoOrgEdit.Width := UserInfoOrgEdit.Width + cx;
UserInfoSerialLabel.Width := UserInfoSerialLabel.Width + cx;
UserInfoSerialEdit.Width := UserInfoSerialEdit.Width + cx;

{ wpSelectDir }
SelectDirLabel.Width := SelectDirLabel.Width + cx;
SelectDirLabel.AdjustHeight;
SelectDirBrowseLabel.Width := SelectDirBrowseLabel.Width + cx;
dy := SelectDirBrowseLabel.Height;
SelectDirBrowseLabel.AdjustHeight;
dy := SelectDirBrowseLabel.Height - dy;
DirEdit.Top := DirEdit.Top + dy;
DirEdit.Width := DirEdit.Width + cx;
DirBrowseButton.Top := DirBrowseButton.Top + dy;
DirBrowseButton.Left := DirBrowseButton.Left + cx;
DiskSpaceLabel.Width := DiskSpaceLabel.Width + cx;
dy := DiskSpaceLabel.Height;
DiskSpaceLabel.AdjustHeight;
dy := DiskSpaceLabel.Height - dy;
DiskSpaceLabel.Top := DiskSpaceLabel.Top + cy - dy;

{ wpSelectComponents }
SelectComponentsLabel.Width := SelectComponentsLabel.Width + cx;
dy := SelectComponentsLabel.Height;
SelectComponentsLabel.AdjustHeight;
dy := SelectComponentsLabel.Height - dy;
TypesCombo.Top := TypesCombo.Top + dy;
TypesCombo.Width := TypesCombo.Width + cx;
ComponentsList.Top := ComponentsList.Top + dy;
ComponentsList.Width := ComponentsList.Width + cx;
ComponentsList.Height := ComponentsList.Height + cy - dy;
ComponentsDiskSpaceLabel.Width := ComponentsDiskSpaceLabel.Width + cx;
dy := ComponentsDiskSpaceLabel.Height;
ComponentsDiskSpaceLabel.AdjustHeight;
dy := ComponentsDiskSpaceLabel.Height - dy;
ComponentsDiskSpaceLabel.Top := ComponentsDiskSpaceLabel.Top + cy - dy;

{ wpSelectProgramGroup }
SelectStartMenuFolderLabel.Width := SelectStartMenuFolderLabel.Width + cx;
SelectStartMenuFolderLabel.AdjustHeight;
SelectStartMenuFolderBrowseLabel.Width := SelectStartMenuFolderBrowseLabel.Width + cx;
dy := SelectStartMenuFolderBrowseLabel.Height;
SelectStartMenuFolderBrowseLabel.AdjustHeight;
dy := SelectStartMenuFolderBrowseLabel.Height - dy;
GroupEdit.Top := GroupEdit.Top + dy;
GroupEdit.Width := GroupEdit.Width + cx;
GroupBrowseButton.Top := GroupBrowseButton.Top + dy;
GroupBrowseButton.Left := GroupBrowseButton.Left + cx;
NoIconsCheck.Top := NoIconsCheck.Top + cy;
NoIconsCheck.Width := NoIconsCheck.Width + cx;

{ wpSelectTasks }
SelectTasksLabel.Width := SelectTasksLabel.Width + cx;
dy := SelectTasksLabel.Height;
SelectTasksLabel.AdjustHeight;
dy := SelectTasksLabel.Height - dy;
TasksList.Top := TasksList.Top + dy;
TasksList.Width := TasksList.Width + cx;
TasksList.Height := TasksList.Height + cy - dy;

{ wpReady }
ReadyLabel.Width := ReadyLabel.Width + cx;
dy := ReadyLabel.Height;
ReadyLabel.AdjustHeight;
dy := ReadyLabel.Height - dy;
ReadyMemo.Top := ReadyMemo.Top + dy;
ReadyMemo.Width := ReadyMemo.Width + cx;
ReadyMemo.Height := ReadyMemo.Height + cy - dy;

{ wpPreparing }
PreparingLabel.Width := PreparingLabel.Width + cx;
PreparingMemo.Width := PreparingMemo.Width + cx;
PreparingMemo.Height := PreparingMemo.Height + cy;

{ wpInstalling }
StatusLabel.Width := StatusLabel.Width + cx;
FilenameLabel.Width := FilenameLabel.Width + cx;
ProgressGauge.Width := ProgressGauge.Width + cx;

{ wpInfoAfter }
InfoAfterClickLabel.Width := InfoAfterClickLabel.Width + cx;
dy := InfoAfterClickLabel.Height;
InfoAfterClickLabel.AdjustHeight;
dy := InfoAfterClickLabel.Height - dy;
InfoAfterMemo.Top := InfoAfterMemo.Top + dy;
InfoAfterMemo.Width := InfoAfterMemo.Width + cx;
InfoAfterMemo.Height := InfoAfterMemo.Height + cy - dy;

{ wpFinished }
WizardBitmapImage2.Width := WizardBitmapImage2.Width + dx;
WizardBitmapImage2.Height := WizardBitmapImage2.Height + cy;
FinishedHeadingLabel.Left := FinishedHeadingLabel.Left + dx;
FinishedHeadingLabel.Width := FinishedHeadingLabel.Width + cx - dx;
dy := FinishedHeadingLabel.Height;
FinishedHeadingLabel.AdjustHeight;
dy := FinishedHeadingLabel.Height - dy;
FinishedLabel.Top := FinishedLabel.Top + dy;
FinishedLabel.Left := FinishedLabel.Left + dx;
FinishedLabel.Width := FinishedLabel.Width + cx - dx;
FinishedLabel.AdjustHeight;
RunList.Left := RunList.Left + dx;
RunList.Width := RunList.Width + cx - dx;
dy := RunList.Top;
RunList.Top := FinishedPage.Height - RunList.Height;
dy := RunList.Top - dy;
YesRadio.Top := YesRadio.Top + dy;
YesRadio.Left := YesRadio.Left + dx;
YesRadio.Width := YesRadio.Width + cx - dx;
NoRadio.Top := NoRadio.Top + dy;
NoRadio.Left := NoRadio.Left + dx;
NoRadio.Width := NoRadio.Width + cx - dx;

{ new position }
Center;
end;
end;

///////////////////////////
procedure InitializeWizard;
begin
RecreateWizardForm(150, 50, True);
end;

Оформеление картинками и скином думаю прикрутиш.

roman_kudin@vk 23-02-2015 23:32 2475055

Ну я с этим разобрался. Спасибо. Но проблемка с CheckBox`ом. При выборе компонентов, он не изменяеться, хотя в скине я его сменил и при лицензтонном соглашении работает, а вот при выборе компонентов не хочет, просто галочка.

El Sanchez 24-02-2015 15:04 2475272

Цитата:

Цитата roman_kudin@vk
Но проблемка с CheckBox`ом. При выборе компонентов, он не изменяеться, хотя в скине я его сменил и при лицензтонном соглашении работает, а вот при выборе компонентов не хочет, просто галочка. »

roman_kudin@vk, а CheckListBox это не список CheckBox-ов, как вы думаете, а список текстовых строк с нарисованными рядом изображениями галок или кружочков. И изображения эти берутся не из файла темы, а из стокового виндового изображения OBM_CHECKBOXES Не, вру, метрики галки/кружочка из OBM_CHECKBOXES, а изображение из темы, хотя это тупо - метрики стокового изображения и изображения из темы могут не совпадать. В расширенной версии для видоизменения галок можете использовать функции LoadBtnBmpFromBitmap/LoadBtnBmpFromFile со своим файлом, пример лежит в Examples, файл btnimage.bmp. Состояния галок и кружочков можно выдрать из скина и сделать подобный файл.

roman_kudin@vk 24-02-2015 16:56 2475335

Спасибо, попробую.

jack_nuclear 25-02-2015 01:09 2475522

Помогите с ISTask.dll. Где взять новые версии? Чем сейчас заменяют "завершалки процессов"? Ткните носом, если говорилось.

Nordek 25-02-2015 08:07 2475542

Цитата:

Цитата jack_nuclear
Помогите с ISTask.dll. Где взять новые версии? »

ISTask 1.0.1.0. Версия 1.0.1.0 является последней.

Цитата:

Цитата jack_nuclear
Чем сейчас заменяют »

Простой вариант:
Код:

[Run]
Filename: {sys}\taskkill.exe; Parameters: /F /IM calc.exe; Flags: runhidden


jack_nuclear 25-02-2015 12:28 2475642

Цитата:

Цитата Nordek
Простой вариант: »

А как на это вывести окно "приложение запущено, закрыть?". Через ISTask легко =) А как тут реализовать?

kotyarko@fb 25-02-2015 12:29 2475643

Цитата:

Цитата jack_nuclear
Через ISTask легко А как тут реализовать? »

А чем ISTask не устраивает?

jack_nuclear 25-02-2015 12:48 2475655

Цитата kotyarko@fb:
А чем ISTask не устраивает? »
УЖе устраивает. Заработало.

jack_nuclear 25-02-2015 16:32 2475760

kotyarko@fb, У меня вопрос по твоему скрипту PlaySound.iss Воспроизводиться на всех компонентах, а не на конкретных. Help!

Код:

[Setup]
RawDataResource=SndA:bugreporter_succeeded.wav |SndB:WindowsLogoffSound.wav

[Code ]
#define A = (Defined UNICODE) ? "W" : "A"

type
    HINST = THandle;
    HMODULE = HINST;
    Pointer = Longint;
    HRSRC = THandle;
    HGLOBAL = THandle;

const
    SND_ASYNC          = $0001;
    SND_NODEFAULT      = $0002;
    SND_MEMORY          = $0004;
    RT_RCDATA          = 10;


function sndPlaySound(lpszSoundName: Pointer; uFlags: UINT): BOOL; external 'sndPlaySound{#A}@Winmm.dll stdcall';
function LoadResource(hModule: HINST; hResInfo: HRSRC): HGLOBAL; external 'LoadResource@kernel32.dll stdcall';
function FindResource(hModule: HMODULE; lpName: String; lpType: Longint): HRSRC; external 'FindResource{#A}@kernel32.dll stdcall';
function LockResource(hResData: HGLOBAL): Pointer; external 'LockResource@kernel32.dll stdcall';

var
 pSoundMemory_A, pSoundMemory_B: Pointer;
   
function GetResourceSoundAddr(const ResourceName: String): Pointer;
var
    hResourceSound: HRSRC;
begin
    hResourceSound := FindResource(HInstance, ResourceName, RT_RCDATA);
    Result := LockResource(LoadResource(HInstance, hResourceSound));
end;

procedure ComponentsOnClickCheck(Sender: TObject);
begin
    if IsComponentSelected('KMP\AB') then
    begin
    sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
    end;
    if IsComponentSelected('KMP\ZK') then
    begin
    sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
    end;
end;

procedure InitializeWizard4();
begin
    pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');
    pSoundMemory_B := GetResourceSoundAddr('_IS_SNDB');
   
    WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end;


Dodakaedr 25-02-2015 17:44 2475787

Цитата:

Цитата jack_nuclear
А как на это вывести окно "приложение запущено, закрыть?". Через ISTask легко А как тут реализовать? »

Как вариант
Код:

[Setup]
AppName=Test
AppVersion=1.1
DefaultDirName={pf}\Test

[Code]
function CheckAppRun: boolean;
var
i: integer;
begin
if FindWindowByWindowName('Калькулятор') = 0 then
  Result:= True
  else if MsgBox('Закрыть калькулятор?', mbError, MB_YESNO) = idyes then begin
  Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM calc.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
  Result := True;
  end;
end;

function InitializeSetup(): Boolean;
begin
  Result := CheckAppRun;
end;


jack_nuclear 25-02-2015 17:49 2475790

Цитата Dodakaedr:
Как вариант »

Спасибо. Лучше без дллок =). Чем будет отличатся реализация через dll и через системный тасккилл? Что "лучше"? Или одинаково? Мб проблем будет меньше где-то.

kotyarko@fb 25-02-2015 19:26 2475819

Цитата:

Цитата jack_nuclear
kotyarko@fb, У меня вопрос по твоему скрипту PlaySound.iss Воспроизводиться на всех компонентах, а не на конкретных. Help! »

Это как бы не мой скрипт. Вот подходящий вариант.

ValeraVentor@fb 25-02-2015 19:28 2475820

Подскажите пожалуйста, Inno setup пользуюсь не часто, написал скрипт инсталлятор в котором две игры, все нормально запускается, при выборе компонентов можна выбрать какую игру ставить, или все ставить. Но если ничего не выбрать (тоесть снять все галочки) установку все равно можна продолжить и установиться только деисталлятор. Как сделать чтобы при выборе компонентов невозможно было продолжить установку если не выбран не один компонент?

kotyarko@fb 25-02-2015 19:33 2475823

Цитата:

Цитата ValeraVentor@fb
Как сделать чтобы при выборе компонентов невозможно было продолжить установку если не выбран не один компонент? »

Код:

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 2475824

Спасибо большое. А то из за такой ерунды целый день потратил)

MogilShik2007 26-02-2015 20:10 2476328

Всем прив, возник такой вопрос как реализовать такую фичу, нужно чтоб из папки 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 2476377

Цитата:

Цитата MogilShik2007
что за параметры постоянно прописывают (для чего они) »

В справке всё есть.

MogilShik2007 26-02-2015 22:01 2476393

Цитата:

Цитата kotyarko@fb
В справке всё есть. »

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

kotyarko@fb 26-02-2015 22:05 2476395

Цитата:

Цитата MogilShik2007
Вопрос что ли не ясен »

Да.

Dodakaedr 26-02-2015 22:54 2476425

Цитата:

Цитата MogilShik2007
Вопрос что ли не ясен, я не про флаги спрашиваю, а для чего конкретно эту хрень используют: »

для примера

jack_nuclear 27-02-2015 02:41 2476463

MogilShik2007, вам дали ссылку на справку, где описывается ваш вопрос. Впадлу читать? Идите лесом тогда...

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

Nordek 27-02-2015 06:56 2476474

MogilShik2007, "Не борзей".
Цитата:

Цитата MogilShik2007
Вопрос что ли не ясен, я не про флаги спрашиваю, а для чего конкретно эту хрень используют: »

И другие не поняли вашего вопроса, и вы не поняли чего хотите.
То что вы поправили себя и написали что:
Цитата:

Цитата 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, "Не лезь, если не понял".
Цитата:

Цитата jack_nuclear
Впадлу читать? »

Могу задать аналогичный встречный вопрос: Впадлу воспользоваться поиском? Результат: #265.
Не думайте что вы от других чем-то отличаетесь.

MogilShik2007 27-02-2015 08:03 2476489

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

Цитата:

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

По флагам повторяюсь вопросов не было, и так понятно, что используются и где используются.

Цитата:

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

Ты коней осади, помогли с кодом вали дальше, и не хами тут.

Zabeal 27-02-2015 08:06 2476490

Друзья, помогите разобраться с задачей.

Мне нужно записать в реестр несколько значений. Заранее количество значений не известно и будет вычисляться на этапе выполнения.
Для реализации задачи я применяю пользовательский макрос с директивой #for:
Код:

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

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

Код:

[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 2476503

Цитата:

Цитата MogilShik2007
вызывается справка оттуда или что? »

Вообще да, в С:\Windows\Help - Расположена справочная информация.
Для примера: Диспетчер устройств - "C:\Windows\Help\mui\0419\devmgr.CHM"

Цитата:

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

Т.е
Код:

[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: "Открыть справку по ""Диспетчеру устройств""."


Цитата:

Цитата MogilShik2007
функции этих строк, для чего они »

Скорее для примера представлено, т.е показать наглядно что скрипт работает.

jack_nuclear 27-02-2015 09:11 2476504

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


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

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

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

Nordek 27-02-2015 09:37 2476508

jack_nuclear, #1009

jack_nuclear 27-02-2015 09:48 2476510

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

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

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

Nordek 27-02-2015 09:58 2476521

Цитата:

Цитата jack_nuclear
А ты еще задай тупейший вопрос »

Какой тупой вопрос?
Вот этот? »
Цитата:

Цитата MogilShik2007
интересует - функции этих строк, для чего они:
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, Научитесь цитировать.

jack_nuclear 27-02-2015 10:04 2476523

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


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

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

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

MogilShik2007 27-02-2015 10:56 2476544

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

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

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

jack_nuclear 27-02-2015 11:54 2476578

Цитата 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;

MogilShik2007 27-02-2015 12:13 2476592

Цитата:

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

Ну так хера здесь делаешь баклан, или в свой великой справке ответов не нашел?

jack_nuclear 27-02-2015 12:23 2476602

Цитата MogilShik2007:
Ну так хера здесь делаешь баклан, или в свой великой справке ответов не нашел? »

А в справке есть реализация звука? Ты и за 10 лет не напишешь.

Я тебе пример дал, долбень, и методы реализации

Примеры:
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;

Я уверен, что ты вообще не понимаешь, что с этим делать =) Жди пока кто-то за тебя сделает)) 2007 в нике год рождения, я так понял? За слова "ума не хватает понять вопроса" отвечаешь или очередной диванный?

K.A.V. 27-02-2015 12:39 2476609

Цитата:

Цитата jack_nuclear
Идите лесом тогда... »

Цитата:

Цитата jack_nuclear
Меня такие люди поражают своей безмозглостью. »

Цитата:

Цитата jack_nuclear
В первых темах люди были умней. Деградируете »

Цитата:

Цитата MogilShik2007
Ну так хера здесь делаешь баклан »

Цитата:

Цитата jack_nuclear
Я тебе пример дал, долбень. »

Напоминаю всем, что есть такая штука, как ОПК
А более конкретно, пункт 3.1

Если кто-то что-то не понял, не знает, не умеет, неправильно понял другого человека - это не повод его оскорблять
Если вы находите такой стиль общения нормой, то данный форум не для вас
Если после данного замечания ваши сообщения будут оставаться на таком же уровне - вам помогут понять, что данный форум не для вас.
Уважайте друг друга и держите свои эмоции при себе

Цитата:

Цитата jack_nuclear
За слова "ума не хватает понять вопроса" отвечаешь или очередной диванный? »

Успокоитесь или вам помочь? Если есть претензии к участнику - решайте такие вопросы в личных сообщениях, прекращайте этот цирк

ps
Цитата:

Цитата jack_nuclear
вы*бнутся »

ь потеряли

MogilShik2007 27-02-2015 12:47 2476614

DEL

jack_nuclear, - 2381

Nordek 27-02-2015 15:37 2476688

Цитата:

Цитата MogilShik2007
нужно чтоб из папки Redist устанавливалась полная версия DirectX, а после запускался DirectXweb »

Цитата:

Цитата MogilShik2007
что по поводу первой части вопроса про реализацию DX? »

Простой пример:
Код:

[Setup]
AppName=Redist
AppVersion=1.0
DefaultDirName={pf}\Redist
OutputDir=.

[Tasks]
Name: ext; Description: Дополнительные компоненты
Name: ext\dx; Description: Установить/Обновить DirectX

[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; Parameters: /silent; Tasks: ext\dx; Flags: skipifdoesntexist; StatusMsg: Установка DirectX 9
Filename: {src}\Redist\dxwebsetup.exe; Parameters: /Q; Tasks: ext\dx; Flags: skipifdoesntexist; StatusMsg: Установка DirectX 9 (Загрузка компонентов из сети интернет)


El Sanchez 27-02-2015 15:53 2476698

Цитата:

Цитата Zabeal
Мне нужно записать в реестр несколько значений. Заранее количество значений не известно и будет вычисляться на этапе выполнения.
Для реализации задачи я применяю пользовательский макрос с директивой #for: »

Zabeal, в вашем случае использовать препроцессор не нужно:
Скрытый текст

Код:

[Code]
const
   
MapInfoPath = 'SOFTWARE\MapInfo\MapInfo\Professional';

/////////////////////////////////
function GetGlobalCount: Integer;
begin
   
{ тут вычисляется результат
    Result := 100500; }
end;

//////////////////////////////////////////////
procedure CurStepChanged(CurStep: TSetupStep);
var
   
i: Integer;
begin
    case
CurStep of
       
ssPostInstall:
            begin
                for
i := 1 to GetGlobalCount do
                   
RegWriteStringValue(HKCU, Format('%s\FLD-%d', [MapInfoPath, i]), '', '');
            end;
    end;
end;


Цитата:

Цитата MogilShik2007
что по поводу первой части вопроса про реализацию DX? »

MogilShik2007, подобные вопросы про установку DirectX и VCRedist, гордо именуемых в инсталляторах "Установка дополнительного ПО", всплывают на форуме довольно-таки часто, только почему-то никто не проверяет, а нужно ли это ПО системе конечного пользователя.

Zabeal 27-02-2015 20:18 2476830

Цитата:

Цитата El Sanchez
Zabeal, в вашем случае использовать препроцессор не нужно: »

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

Очень жаль, что в препроцессор нельзя передать переменную из кода.
Мне не удалось справиться даже через промежуточный INI файл.
То есть, я записывал мою переменную в INI файл во время исполнения скрипта, а при нажатии кнопки Install эта переменная должна была прочитаться из файла и использоваться в цикле.
Так вот, в секции кода можно полностью управлять папками (указывать хоть абсолютный, хоть относительный путь), а в препроцессоре есть всего две системных константы, которые указывают на папку размещения исходного текста скрипта или исполняемого файла компилятора. В итоге из препроцессора мой INI файл может быть прочитан только в случае, если он лежит по абсолютному пути, что неприемлемо.

El Sanchez 28-02-2015 10:26 2476981

Цитата:

Цитата Zabeal
Я так и вынужден сделать »

Zabeal, так и нужно, препроцессор для других задач оставьте.
Цитата:

Цитата Zabeal
Дело вот в чём: в реестр я конечно запишу значения, это отлично, но как быть при деинсталляции приложения? »

Zabeal, создать через секцию Registry пару корневых записей в реестре, при деинсталляции все нормально удалится.
Код:

[Registry]
; Тут будет создан корневой раздел производителя программы MapInfo.
; При деинсталляции, если этот раздел не будет содержать в себе других подразделов и ключей от других
; программ MapInfo, например, от MapMarker, то корневой раздел можно будет удалять (флаг uninsdeletekeyifempty)
Root: HKCU; SubKey: Software\MapInfo; Flags: uninsdeletekeyifempty
; Удаляем раздел нашей программы MapInfo со всеми подразделами и ключами.
Root: HKCU; SubKey: Software\MapInfo\MapInfo; Flags: uninsdeletekey


Dodakaedr 28-02-2015 19:16 2477135

Допустим имеем такой ini файл
Код:

[INI]
Filename: "{commonappdata}\file.ini"; Section: "Flag"; Key: "AllUsers"; String: "0";

Подскажите как провести проверку на String: "0";? IniKeyExists не подходит.

nik1967 28-02-2015 20:55 2477164

Dodakaedr,
навскидку
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Code]
procedure InitializeWizard();
var
  S, P: String;
begin
  P:= ExpandConstant('{src}'+'\file.ini');
  //P:= ExpandConstant('{commonappdata}'+'\file.ini');
    if FileExists(P) then begin
      S:= GetIniString('Flag', 'AllUsers', '', P);
        if S = '0' then
          MsgBox('true', mbInformation, MB_OK)
        else
          MsgBox('false', mbInformation, MB_OK);
    end;
end;


bosenkov5 02-03-2015 08:34 2477703

ISDone.iss
 
Доброе утро всем и у меня такой вопрос
Пакую батником Precomp+Srep+FreeArc
и при распаковке ничего не происходит и вопрос:как в ISDone.iss прописать чтобы распаковывалось сначала Precomp потом Srep а потом FreeArc ?
вот пример
if not ISArcExtract ( 1, 10, ExpandConstant('{src}\Setup.bin'), ExpandConstant('{app}\'), '', false, '12345', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;

diman_21Ru 05-03-2015 14:53 2479122

Пытаюсь вставить WizadForm.ComponentsList.WantTabs := True; для нажатия на любое место строки для выбора компонента незнаю куда именно прикрутить стоит Unicode.

Dodakaedr 05-03-2015 16:05 2479154

diman_21Ru,
Код:

procedure InitializeWizard();
begin
WizardForm.ComponentsList.WantTabs := True;
end;


Kashtan007 05-03-2015 16:16 2479162

Привет форумчане.
Как сделать, чтобы после установки в указанной папке создавался текстовый файл, в который будет выводится список установленных компонентов?
Заранее спасибо за ответ.

diman_21Ru 05-03-2015 16:17 2479163

Dodakaedr, не помогает (

kotyarko@fb 05-03-2015 17:59 2479228

Цитата:

Цитата Kashtan007
Как сделать, чтобы после установки в указанной папке создавался текстовый файл, в который будет выводится список установленных компонентов? »

Самый простой способ:
Код:

Procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = ssPostInstall then
  WizardForm.ReadyMemo.Lines.SaveToFile(ExpandConstant('{app}\SelectedComponents.txt'));
end;


Kashtan007 05-03-2015 18:33 2479246

kotyarko@fb, спасибо.

Dodakaedr 05-03-2015 18:39 2479249

Цитата:

Цитата Kashtan007
Как сделать, чтобы после установки в указанной папке создавался текстовый файл, в который будет выводится список установленных компонентов? »

проверка по индексу компонента
Скрытый текст
Код:

[Setup]
AppName=Apps
AppVersion=1.0
DefaultDirName={pf}\Apps

[Components]
Name: Mode; Description: mode; Types: custom; flags: fixed
Name: Mode/SPOnly; Description: SPOnly; Flags:  disablenouninstallwarning exclusive
Name: Mode/MPOnly; Description: MPOnly; Flags: disablenouninstallwarning
Name: Mode2; Description: mode; Types: custom; flags: fixed
Name: Mode2/SPOnly2; Description: SPOnly2; Flags: disablenouninstallwarning exclusive
Name: Mode2/MPOnly2; Description: MPOnly2; Flags: disablenouninstallwarning

[UninstallDelete]
Type: files; Name: "{app}\components.txt"

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
  begin
      if WizardForm.ComponentsList.Checked[1] then
        SaveStringToFile(ExpandConstant('{app}\components.txt'), 'SPOnly' + #13#10, False);
      if WizardForm.ComponentsList.Checked[2] then
        SaveStringToFile(ExpandConstant('{app}\components.txt'), 'MPOnly' + #13#10, True);
      if WizardForm.ComponentsList.Checked[4] then
        SaveStringToFile(ExpandConstant('{app}\components.txt'), 'SPOnly2' + #13#10, True);
      if WizardForm.ComponentsList.Checked[5] then
        SaveStringToFile(ExpandConstant('{app}\components.txt'), 'MPOnly2' + #13#10, True);
  end;
end;


diman_21Ru 05-03-2015 18:45 2479251

Dodakaedr, Вставил код и не помогло (
procedure InitializeWizard();
begin
WizardForm.ComponentsList.WantTabs := True;
end;

Dodakaedr 05-03-2015 18:52 2479252

diman_21Ru, Зачем оно вам? Оно и так выделяется
Скрытый текст

kotyarko@fb 05-03-2015 18:56 2479254

Цитата:

Цитата Dodakaedr
проверка по индексу компонента »

Нуу, это какой-то грубый пример. Рациональнее уже сделать циклом:
Код:

Procedure CurStepChanged(CurStep: TSetupStep);
var
 I: Integer;
begin
 if CurStep = ssDone then
 begin
  for I := 0 to WizardForm.ComponentsList.Items.Count - 1 do
  begin
  if WizardForm.ComponentsList.Checked[i] then
    SaveStringToFile(ExpandConstant('{app}\components.txt'), WizardForm.ComponentsList.ItemCaption[i] + #13#10, True);
  end;
 end;
end;


diman_21Ru 05-03-2015 18:58 2479257

Dodakaedr, Вы меня может не поняли компонент надо чтобы выделялся при нажатие на любое место этой строчки а не только при нажатие на галочку или флажок.

Dodakaedr 05-03-2015 19:02 2479260

diman_21Ru, На скрине видно что строка полностью выделена.

kotyarko@fb, можно и так, но в этом случаи весь индекс компонент листа попадает в список, в моем примере только определенный компонент. Грубый, но правильный.
Через процедуру, чтобы не путаться
Код:

[Setup]
AppName=Apps
AppVersion=1.0
DefaultDirName={pf}\Apps

[Components]
Name: Mode; Description: mode; Types: custom; flags: fixed
Name: Mode/SPOnly; Description: SPOnly; Flags:  disablenouninstallwarning
Name: Mode/MPOnly; Description: MPOnly; Flags: disablenouninstallwarning
Name: Mode2; Description: mode; Types: custom; flags: fixed
Name: Mode2/SPOnly2; Description: SPOnly2; Flags: disablenouninstallwarning
Name: Mode2/MPOnly2; Description: MPOnly2; Flags: disablenouninstallwarning

[UninstallDelete]
Type: files; Name: "{app}\components.txt"

[Code]
procedure CreateComponentListDone();
begin
      if WizardForm.ComponentsList.Checked[1] then
        SaveStringToFile(ExpandConstant('{app}\components.txt'), 'SPOnly' + #13#10, False);
      if WizardForm.ComponentsList.Checked[2] then
        SaveStringToFile(ExpandConstant('{app}\components.txt'), 'MPOnly' + #13#10, True);
      if WizardForm.ComponentsList.Checked[4] then
        SaveStringToFile(ExpandConstant('{app}\components.txt'), 'SPOnly2' + #13#10, True);
      if WizardForm.ComponentsList.Checked[5] then
        SaveStringToFile(ExpandConstant('{app}\components.txt'), 'MPOnly2' + #13#10, True);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
  begin
  CreateComponentListDone();
  end;
end;


kotyarko@fb 05-03-2015 19:07 2479265

Цитата:

Цитата Dodakaedr
можно и так, но в этом случаи весь индекс компонент листа попадает в список, в моем примере только определенный компонент. Грубый, но правильный. »

Правильный, но не в данном случае. Речь шла о всех выбранных компонентах.

Dodakaedr 05-03-2015 19:08 2479266

kotyarko@fb,
Цитата:

Цитата Kashtan007
Привет форумчане.
Как сделать, чтобы после установки в указанной папке создавался текстовый файл, в который будет выводится список установленных компонентов?
Заранее спасибо за ответ. »


kotyarko@fb 05-03-2015 19:13 2479272

Dodakaedr, внимательнее посмотрите мои примеры.
В первом будут записываться только компоненты из ReadyMemo (туда попадают только выбранные).
Во втором идёт проверка, выбран ли компонент вообще:
Код:

if WizardForm.ComponentsList.Checked[i] then

Dodakaedr 05-03-2015 19:24 2479274

kotyarko@fb, второй более-менее а почему сразу не предложили? У меня просто без заголовков компонентов(родителя). А первый?
Скрытый текст

kotyarko@fb 05-03-2015 19:37 2479278

Цитата:

Цитата Dodakaedr
второй более-менее а почему сразу не предложили? У меня просто без заголовков компонентов(родителя). А первый? »

Первый я написал как "самый простой способ". А что не так?

Dodakaedr 05-03-2015 19:38 2479279

Цитата:

Цитата kotyarko@fb
А что не так? »

Как по мне много лишнего. А что не понятно?

kotyarko@fb 05-03-2015 19:44 2479283

Цитата:

Цитата Dodakaedr
Как по мне много лишнего. А что не понятно? »

Папка установки и тип. Не думаю, что это много.
В любом случае, найдутся те, кому понадобятся эти способы. Так что лишними они тут не будут.

El Sanchez 05-03-2015 20:23 2479291

Цитата:

Цитата Kashtan007
Как сделать, чтобы после установки в указанной папке создавался текстовый файл, в который будет выводится список установленных компонентов? »

Kashtan007,
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
    case
CurStep of
       
ssPostInstall:
            SaveStringToFile(ExpandConstant('{app}\components.txt'), WizardSelectedComponents(False), False);
    end;
end;

Цитата:

Цитата Dodakaedr
На скрине видно что строка полностью выделена. »

Dodakaedr, ему не выделять строку надо, а сделать так, чтобы выбрать строку можно было не только по клику мыши по изображению чекбокса/радио, но и по клику по самой строке. WantTabs в True как раз и позволяет такое сделать. Только он не признается куда поделось стандартное свойство WantTabs, может компилятор ругается совсем не на WantTabs, а на что-то другое, только ж ни ругани, ни скрина не представлено.

Dodakaedr 05-03-2015 21:57 2479348

Цитата:

Цитата El Sanchez
но и по клику по самой строке. »

я ж про то же Видео

El Sanchez 06-03-2015 09:44 2479462

Цитата:

Цитата Dodakaedr
я ж про то же»

Dodakaedr, diman_21Ru, пардон, ввел всех в заблуждение. Пока сам себя не проверишь, ответа не получишь. Все дело в свойстве TreeViewStyle, которое есть у листа из китайской версии. При значении True (либо в секции Setup директива ComponentsListTVStyle=yes) наблюдаем подобное поведение, WantTabs немного из другой оперы. Для решения проблемы нужно самому обработать мышиные события:
Скрытый текст

Код:

type
   
TCheckListBoxHelper = record
       
Index: Integer;
        ItemArea: TItemArea;
    end;

var
 
CLBHelper: TCheckListBoxHelper;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    with
TNewCheckListBox(Sender) do
    begin
        if
(Button = mbLeft) and (CLBHelper.ItemArea = iaItem) and ItemEnabled[CLBHelper.Index] then
        case
State[CLBHelper.Index] of
           
cbUnchecked,
            cbGrayed:
                CheckItem(CLBHelper.Index, coCheckWithChildren);
            cbChecked:
                CheckItem(CLBHelper.Index, coUncheck);
        end;
    end;
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
   
CLBHelper.Index := Index;
    CLBHelper.ItemArea := Area;
end;

///////////////////////////
procedure InitializeWizard;
begin
    with
WizardForm.ComponentsList do
    begin
        if
TreeViewStyle then
        begin
           
OnMouseDown := @ComponentsListOnMouseDown;
            OnItemMouseMove := @ComponentsListOnItemMouseMove;
        end;
    end;
end;


diman_21Ru 06-03-2015 11:36 2479484

El Sanchez, Не помогло (

nik1967 06-03-2015 11:37 2479485

El Sanchez, замечательно! Только я позволил себе немного подправить скрипт:
Скрытый текст
Код:

type
    TCheckListBoxHelper = record
        Index: Integer;
        ItemArea: TItemArea;
    end;

var
  CLBHelper: TCheckListBoxHelper;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (Button = mbLeft) and (CLBHelper.ItemArea = iaItem) then
  begin
    with TNewCheckListBox(Sender) do
    begin
      if ItemEnabled[CLBHelper.Index] then
      begin
        case State[CLBHelper.Index] of
          cbUnchecked,
          cbGrayed:
            CheckItem(CLBHelper.Index, coCheckWithChildren);
          cbChecked:
            CheckItem(CLBHelper.Index, coUncheck);
        end;
      end;
    end;
  end;
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
    CLBHelper.Index := Index;
    CLBHelper.ItemArea := Area;
end;

///////////////////////////
procedure InitializeWizard;
begin
    with WizardForm.ComponentsList do
    begin
        if TreeViewStyle then
        begin
            OnMouseDown := @ComponentsListOnMouseDown;
            OnItemMouseMove := @ComponentsListOnItemMouseMove;
        end;
    end;
end;


а то компоненты, у которых стоит флаг Fixed, тоже были кликабельны.

diman_21Ru 06-03-2015 11:39 2479487

Как не крути не работает может кто помочь в личку скину .

nik1967, Поможешь? в личку скину скрипт

diman_21Ru 06-03-2015 12:06 2479501

Как снять галочку Filename: "{app}\WoTLauncher.exe"; Description: "Запустить World Of Tanks после установки?"; Flags: postinstall shellexec;

nik1967 06-03-2015 12:11 2479506

diman_21Ru, я так понимаю, секция [Run]? Добавь флаг unchecked - в справку заглядывай! И да, проверь личку.

Кстати, как то diman_21Ru задавал вопрос о переключении 3 языков на лету. Переделал пример - сделал его с комбобоксом - теперь языки можно переключать не по кругу, а выборочно. Может кому пригодится.
ЭТО ТОЛЬКО ПРИМЕР! Что бы переключение происходило для всех надписей - все эти надписи нужно переделать!
Скрытый текст
Код:

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
;ShowLanguageDialog=auto

[Languages]
Name: "eng"; MessagesFile: "compiler:Languages\English.isl"
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "ukr"; MessagesFile: "compiler:Languages\Ukrainian.isl"

[CustomMessages]
; Русский
rusButtonBack=< &Назад
rusButtonNext=&Далее >
rusButtonCancel=Отмена
rusSetupWindowTitle=Установка — %1
rusWelcomeLabel1=Вас приветствует Мастер установки %1
rusWelcomeLabel2=Программа установит %1, версия %2 на Ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

; English
engButtonBack=< &Back
engButtonNext=&Next >
engButtonCancel=Cancel
engSetupWindowTitle=Setup — %1
engWelcomeLabel1=Welcome to the %1 Setup Wizard
engWelcomeLabel2=This will install %1 version %2 on your computer.%n%nIt is recommended that you close all other applications before continuing.%n%nClick Next to continue, or Cancel to exit Setup.

; Ukrainian
ukrButtonBack=< &Назад
ukrButtonNext=&Далi >
ukrButtonCancel=Cкасування
ukrSetupWindowTitle=Встановити — %1
ukrWelcomeLabel1=Вас вітає Майстер установки %1
ukrWelcomeLabel2=Програма встановить %1, версія %2 на Ваш комп'ютер.%n%nРекомендуємо закрити всі інші програми перед тим, як продовжити.%n%nНатисніть «Далі», щоб продовжити, або «Скасувати», щоб вийти з програми установки.

[Code]
var
  lang: String;
  ComboBox1: TNewComboBox;

procedure ChangeLang();
begin
  WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack');
  WizardForm.NextButton.Caption:= CustomMessage(lang+'ButtonNext');
  WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel');
  WizardForm.Caption:= FmtMessage(CustomMessage(lang+'SetupWindowTitle'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel1.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel1'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel2.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel2'), ['{#SetupSetting('AppName')}', '{#SetupSetting('AppVersion')}']);
end;

procedure ComboBox1OnChange(Sender: TObject);
begin
  case TNewComboBox(Sender).ItemIndex of
    0: lang:= 'rus';
    1: lang:= 'eng';
    2: lang:= 'ukr';
  end;
    ChangeLang();
end;

procedure InitializeWizard;
begin
  ComboBox1:= TNewComboBox.Create(WizardForm);
  with ComboBox1 do begin
    Parent:= WizardForm;
    Style:= csDropDownList;
    SetBounds(ScaleX(10),WizardForm.CancelButton.Top,WizardForm.CancelButton.Width,WizardForm.CancelButton.Height);
    OnChange:= @ComboBox1OnChange;
    Items.Add('Русский');
    Items.Add('English');
    Items.Add('Українська'); 
  end;

  if ActiveLanguage='rus' then begin
    lang:= 'rus';
    ComboBox1.ItemIndex:= 0;
  end else
  if ActiveLanguage='eng' then begin
    lang:= 'eng';
    ComboBox1.ItemIndex:= 1;
  end else
  if ActiveLanguage='ukr' then begin
    lang:= 'ukr';
    ComboBox1.ItemIndex:= 2;
  end;
end;


diman_21Ru 06-03-2015 13:10 2479534

nik1967, Вообще гуд

nik1967, А можно эту кнопку сделать более красивше ?

nik1967, И как можно размер изменить кнопки?

nik1967 06-03-2015 13:40 2479553

Цитата:

Цитата diman_21Ru
А можно эту кнопку сделать более красивше ? »

Не понятно.
Цитата:

Цитата diman_21Ru
И как можно размер изменить кнопки? »

Можно изменить только ширину.

diman_21Ru 06-03-2015 13:55 2479569

nik1967, Ясно

palsn2000 06-03-2015 20:04 2479749

Здравствуйте.
Если в инсталляторе присутствует InfoAfterPage, то на FinishedPage становится видна и активна кнопка "<Back"
Я хочу её отключить и сделать невидимой (ModalResalt=mrNone, Visible=False)
при попытке изменить дизайнером диалогов (использую расширенную версию от Restools) изменяется общая кнопка "<Back" для всех страниц, и свойство Visible выделено серым - недоступно для редактирования.

Отключить хочу потому, что при автоматическом переходе на страницу InfoAfterPage у меня выдаётся звуковой сигнал о завершении установки, а при повторном переходе на страницу InfoAfterPage со страницы FinishedPage при нажатии на кнопку "<Back" возникает Runtime Error с подписью что не может извлечь файл "Complete.mp3" из временной папки ввиду его отсутствия.
(хочу отключить и спрятать именно кнопку, а не повторно проигрывать звуковой файл).

Dodakaedr 06-03-2015 20:07 2479751

palsn2000, Попробуйте так
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpFinished: begin
      WizardForm.BackButton.Hide; //скрываем
      //WizardForm.BackButton.Enabled := False; //неактивность кнопки
      end;
end;
end;


kotyarko@fb 06-03-2015 20:14 2479755

Цитата:

Цитата palsn2000
Если в инсталляторе присутствует InfoAfterPage, то на FinishedPage становится видна и активна кнопка "<Back"
Я хочу её отключить и сделать невидимой »

Код:

Procedure CurPageChanged(CurPageID: Integer);
begin
 case CurPageID of
  wpFinished: WizardForm.BackButton.Visible := False;
 end;
end;

Снова опоздал :(

palsn2000 06-03-2015 21:34 2479795

Dodakaedr, Спасибо за пример, только вот новая трудность: у меня в коде уже есть одна
procedure CurPageChanged(CurPageID: Integer);
и Ваш кусок кода я назвал
procedure CurPageChanged1(CurPageID: Integer); со скрытием кнопки WizardForm.BackButton.Hide;

Компилируется всё отлично, но не работает (кнопка всё равно есть) в отладчике кружочки серые - т.е. к процедуре нет обращения.

Подобные проблемы были ранее с InitializeWizard
Решал через запись следующего вида:
Procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
end;

Но с CurPageChanged1 у меня так не получается
Не подскажите как записать для нескольких procedure CurPageChanged(CurPageID: Integer); ?
Заранее спасибо.

Dodakaedr 06-03-2015 22:20 2479807

palsn2000, вижу проще сделать по другому: покажите свою процедуру procedure CurPageChanged(CurPageID: Integer);
или же если уже используется wpFinished то добавьте WizardForm.BackButton.Hide;
вот так:
Код:

wpFinished:
begin
      WizardForm.BackButton.Hide; //скрываем
      //WizardForm.BackButton.Enabled := False; //неактивность кнопки
end;

или так
Код:

if CurPageID = wpFinished then WizardForm.BackButton.Hide;
смотря какой там у вас вариант используется.

palsn2000 06-03-2015 22:29 2479809

Dodakaedr, Спасибо разобрался.
Всё сделал в одной процедуре
сначала у меня идёт

if CurPageID = wpInfoAfter then
.......
мой код
.......
затем я добавил
if CurPageID = wpFinished then
и далее Ваш код.

Всё заработало, ещё раз спасибо.

Dodakaedr 06-03-2015 22:46 2479815

Цитата:

Цитата palsn2000
Всё заработало, ещё раз спасибо. »

не за что и для этого есть Полезное сообщение

Dodakaedr 07-03-2015 20:00 2480079

Как заставить этот код работать?(unicode от restools). Нужно получить путь к папке "Моя музыка"
Скрытый текст
Код:

[Setup]
AppName=test
AppVersion=1.0
DefaultDirName={pf}\test

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

[Code]
type
pchar=pansichar;

const
MAX_PATH = 260;
CSIDL_MYMUSIC = $0d;

function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL;
external 'SHGetSpecialFolderPathA@shell32.dll stdcall';

function GetSpecialPath(CSIDL: Word): string;
var
s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, True) then s := '';
Result:= PChar(s);
end;

procedure InitializeWizard;
begin
MsgBox(GetSpecialPath(CSIDL_MYMUSIC), mbInformation, MB_OK);
end;



Решено:
Скрытый текст
Код:

[Setup]
AppName=test
AppVersion=1.0
DefaultDirName={pf}\test

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

[Code]
const
  CSIDL_MYMUSIC = $0d;

procedure InitializeWizard();
begin
  WizardForm.WelcomeLabel2.Caption := GetShellFolderByCSIDL(CSIDL_MYMUSIC, True);
end;


ShadeUa 08-03-2015 23:52 2480416

Цитата:

Цитата ShadeUa
Вот так? и потом все ето прописать в ChangeLang?
https://yadi.sk/i/USsBrvW9eoooc »

Цитата:

Цитата Dodakaedr
Да »

здраствуйте всем , я снова ображаюсь к вам по той же проблеме , спустя половину месяца я резгреб свои проблемы и решился опять взяться за скрипт , тогда когода я его забросил мне было все понятно как делать но теперь нет , немогу понять как его сделать, помогите пожайлуста

OldGamer 09-03-2015 01:24 2480425

Всем привет.

Создаю инсталлятор (стиль Steam) со слайд-шоу.

Обычно, когда начинается показ слайдов окно установщика становится "компактным" и перемещается в нижний правый угол экрана.

После добавления скрипта "Закрепить ярлык на панели задач" (функция PinToTaskbar) - возникает следующая проблема:

во время показа слайдов окно установщика не переходит в нижний правый угол экрана (не меняет размер и положение) и, тем самым, закрывает показываемые слайды :(

Как это можно исправить?

Код:

https://yadi.sk/d/jq7ufVo1f7oVj

Raz3r 09-03-2015 09:08 2480463

На некоторых системах была замечена проблема с неправильным отображением содержимого в окне установщика. Почему такое происходит?
Скрытый текст


Ссылка на установщик

TryRooM 09-03-2015 11:37 2480513

Raz3r, Тестируйте, перезалил скрипт, немного подправил фон, текст и ярлыки.
http://rghost.ru/69y2FKDpR

Raz3r 09-03-2015 11:39 2480514

TryRooM, попробую, спасибо

ekspoint 09-03-2015 22:11 2480749

Подскажите код картинок (привью) для компонентов

Sotonisto 10-03-2015 04:07 2480820

Доброго времени суток.
Вот скрипт инсталлятора "Закос под z10yded".
Все работает отлично, но:
1. Подскажите как изменить фон "WizardForm.ComponentsList", например установить для него фоновое изображение или сделать прозрачным?
2. Обычно при использовании "DisableReadyPage=true" название кнопки "Далее" на предыдущей странице заменяется на "Установить". В данном скрипте это не происходит, т.е. страница исчезает, но название кнопки как было "Далее" таким и остается. Как это исправить? Надеюсь, вы поняли, что я имел в виду.

Dodakaedr 10-03-2015 16:49 2480997

Sotonisto, ваш скрипт не пошел, так как сижу на unicode, вот пример решения ваших проблем(фон "WizardForm.ComponentsList" и заменяется на "Установить")
Как вариант

Файл large.bmp должен находится рядом с инсталлятором.

Код:

[Setup]
AppName=test
AppVersion=1.0
DefaultDirName={pf}\test
DisableReadyPage=yes

[Files]
Source: large.bmp; Flags: dontcopy deleteafterinstall

[Components]
Name: one; Description: text;
Name: two; Description: text;
Name: bob; Description: text;
Name: to; Description: text;
Name: tw; Description: text;
Name: wo; Description: text;

[code]
procedure InitializeWizard();
begin
  ExtractTemporaryFile(ExpandConstant('large.bmp'));
  WizardForm.ComponentsList.LoadBGBmpFromFile(ExpandConstant('{tmp}\large.bmp'), WizardForm.ComponentsList.Left, WizardForm.ComponentsList.Top);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectComponents then WizardForm.NextButton.Caption := 'Установить';
end;



Цитата:

Цитата ekspoint
Подскажите код картинок (привью) для компонентов »

Поиск....
123, 126

ShadeUa 10-03-2015 21:24 2481114

Цитата:

Цитата ShadeUa
Цитата ShadeUa:
Вот так? и потом все ето прописать в ChangeLang?
https://yadi.sk/i/USsBrvW9eoooc »
Цитата Dodakaedr:
Да »
здраствуйте всем , я снова ображаюсь к вам по той же проблеме , спустя половину месяца я резгреб свои проблемы и решился опять взяться за скрипт , тогда когода я его забросил мне было все понятно как делать но теперь нет , немогу понять как его сделать, помогите пожайлуста »

Помогите пожайлуста ((

Dodakaedr 10-03-2015 22:02 2481123

Цитата:

Цитата ShadeUa
когода я его забросил мне было все понятно как делать но теперь нет , немогу понять как его сделать, помогите пожайлуста »

прочтите еще раз полностью обсуждение вашего вопроса, в основном это помогает вернуть свое понимание)) ну а если все же нет то вот вам пример
пример
Код:

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
ShowLanguageDialog=auto

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

[CustomMessages]
; Русский
rusButtonBack=< &Назад
rusButtonNext=&Далее >
rusButtonCancel=Отмена
rusSetupWindowTitle=Установка — %1
rusWelcomeLabel1=Вас приветствует Мастер установки %1
rusWelcomeLabel2=Программа установит %1, версия %2 на Ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

rustest=футбол
rusfish=рыбалка
rusjoke=прикол

; English
engButtonBack=< &Back
engButtonNext=&Next >
engButtonCancel=Cancel
engSetupWindowTitle=Setup — %1
engWelcomeLabel1=Welcome to the %1 Setup Wizard
engWelcomeLabel2=This will install %1 version %2 on your computer.%n%nIt is recommended that you close all other applications before continuing.%n%nClick Next to continue, or Cancel to exit Setup.

engtest=football
engfish=fishing
engjoke=joke

[Code]
var
  lang: String;
  langBtn: TButton;
  test, fish, joke: TNewCheckBox;
 
procedure ChangeLang();
begin
  WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack');
  WizardForm.NextButton.Caption:= CustomMessage(lang+'ButtonNext');
  WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel');
  WizardForm.Caption:= FmtMessage(CustomMessage(lang+'SetupWindowTitle'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel1.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel1'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel2.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel2'), ['{#SetupSetting('AppName')}', '{#SetupSetting('AppVersion')}']);

  //добавляем свои элементы (чекбоксы, радиокнопки, лейблы и т.д.)
  test.Caption := CustomMessage(lang+'test');
  fish.Caption := CustomMessage(lang+'fish');
  joke.Caption := CustomMessage(lang+'joke');

end;

procedure LangBtnClick(Sender: TObject);
begin
  if lang='rus' then begin
    lang:= 'eng';
    langBtn.Caption:= 'рус';
  end else begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end;
  ChangeLang();
end;

procedure RedesignWizardForm;
begin
  { test }
  test := TNewCheckBox.Create(WizardForm);
  with test do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(184);
    Top := ScaleY(200);
    Width := ScaleX(65);
    Height := ScaleY(17);
    Caption := 'футбол';
  end;

  { fish }
  fish := TNewCheckBox.Create(WizardForm);
  with fish do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(184);
    Top := ScaleY(224);
    Width := ScaleX(65);
    Height := ScaleY(17);
    Caption := 'рыбалка';
  end;

  { joke }
  joke := TNewCheckBox.Create(WizardForm);
  with joke do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(184);
    Top := ScaleY(248);
    Width := ScaleX(65);
    Height := ScaleY(17);
    Caption := 'прикол';
  end;
end;

procedure InitializeWizard;
begin
RedesignWizardForm;
  langBtn:= TButton.Create(WizardForm);
  with langBtn do begin
    SetBounds(10,WizardForm.CancelButton.Top,30,WizardForm.CancelButton.Height)
    OnClick:= @LangBtnClick;
    Parent:= WizardForm;
  end;

  if ActiveLanguage='rus' then begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end else begin
    lang:= 'eng';
    langBtn.Caption:= 'рус';
  end;
end;


ekspoint 11-03-2015 03:03 2481164

Цитата:

Цитата Dodakaedr
Поиск.... »

Мне еще нужно когда не наводишь на компонент то останется главная картинка

Sotonisto 11-03-2015 13:32 2481320

Dodakaedr, большое спасибо. Всё прекрасно работает.

Dodakaedr 11-03-2015 16:44 2481395

Цитата:

Цитата ekspoint
Мне еще нужно когда не наводишь на компонент то останется главная картинка »

Скрытый текст
Код:

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

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

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2
RU.ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.
RU.ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.
RU.CompDesc1=Описание первого компонента
RU.CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "MainPic.bmp"; Flags: dontcopy

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[Code]
type
  TComponentDesc = record
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescImgPanel: TPanel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    end;
  LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  LastIndex := -1;
  ExtractTemporaryFile('MainPic.bmp');
 CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;

procedure AddCompDescription(AIndex: Integer; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(45));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    ExtractTemporaryFile('MainPic.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
  end;

  AddCompDescription(1, 'CompDescImg1.bmp');
  AddCompDescription(2, 'CompDescImg2.bmp');
end;


ShadeUa 11-03-2015 17:51 2481433

Цитата:

Цитата Dodakaedr
его сделать, помогите пожайлуста »
прочтите еще раз полностью обсуждение вашего вопроса, в основном это помогает вернуть свое понимание)) ну а если все же нет то вот вам пример »

Спасибо ваш пример помог , но у меня возник такой вопрос, я с Messages убрал натпись на кнопке , но она осталась , я подумал что ето может сама картинка с натписью , но нет , неподскажете что ето может быть? https://yadi.sk/i/CK0NoXnDfBH6E

Dodakaedr 11-03-2015 18:13 2481446

Цитата:

Цитата ShadeUa
неподскажете что ето может быть? »

Это кнопка! Если хотите убрать то нужно её скрыть
Код:

[Setup]
AppName=test
AppVersion=1.0
DefaultDirName={pf}\test

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.BackButton.Hide;
end;

секция Messages служить для изменения надписей, если она отсутствует то используется текст по умолчанию с языкового файла
Код:

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


ekspoint 11-03-2015 19:33 2481479

Цитата:

Цитата Dodakaedr

спасибо

Sotonisto 14-03-2015 14:44 2482569

Доброго времени суток.
Подскажите, как реализовать отображение жирного текста одновременно с обычным. Т.е.:
Код:

Caption:= ExpandConstant('Случайная надпись в скрипте');
отображается как "Случайная надпись в скрипте", мне же необходимо "Случайная надпись в скрипте".

kotyarko@fb 14-03-2015 16:50 2482610

Цитата:

Цитата Sotonisto
Подскажите, как реализовать отображение жирного текста одновременно с обычным. »

http://krinkels.org/threads/redrawtext.818/

ShadeUa 14-03-2015 17:19 2482625

Здраствуйте , не подскажите как сделать абзац в строке в Inno

Dodakaedr 14-03-2015 17:32 2482630

Цитата:

Цитата ShadeUa
Здраствуйте , не подскажите как сделать абзац в строке в Inno »

Скрытый текст
Код:

[Setup]
AppName=test
AppVersion=1.0
DefaultDirName={pf}\test

[Code]
var
  Label1: TLabel;

procedure RedesignWizardForm;
begin
  { Label1 }
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := WizardForm.WelcomePage;
    Caption := 'Label1' + #13#10 +
        '' + #13#10 +
        'абзац....';
    Left := ScaleX(192);
    Top := ScaleY(216);
    Width := ScaleX(45);
    Height := ScaleY(39);
  end;

  with WizardForm.WelcomeLabel2 do
  begin
    Height := ScaleY(103);
  end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


ShadeUa 14-03-2015 17:45 2482637

Цитата:

Цитата Dodakaedr
од: Выделить весь код
[Setup]
AppName=test
AppVersion=1.0
DefaultDirName={pf}\test
[code]
var
Label1: TLabel;
procedure RedesignWizardForm;
begin
{ Label1 }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Parent := WizardForm.WelcomePage;
Caption := 'Label1' + #13#10 +
'' + #13#10 +
'абзац....';
Left := ScaleX(192);
Top := ScaleY(216);
Width := ScaleX(45);
Height := ScaleY(39);
end;
with WizardForm.WelcomeLabel2 do
begin
Height := ScaleY(103);
end;
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
end; »

спибо большое , вы очередной раз меня выручили :) :)

ShadeUa 14-03-2015 20:02 2482691

еще вопросик, не подскажите как решить такую небольшую проблемку ?
https://yadi.sk/i/dFHhJtrZfFiuz

Dodakaedr 14-03-2015 20:39 2482707

Цитата:

Цитата ShadeUa
еще вопросик, не подскажите как решить такую небольшую проблемку ? »

вот так:
Код:

SystemPage.Caption := 'заголовок';
SystemPage.Description := 'описание';

или что вы имели ввиду?
Может это?
Скрытый текст
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[CustomMessages]
Caption=заголовок
Desc=описание

[Code]
var
SystemPage: TWizardPage;

procedure InitializeWizard();
begin
 SystemPage := CreateCustomPage(wpSelectTasks, CustomMessage('Caption'), CustomMessage('Desc'));
end;


Пожалуйста, поподробней излагайте суть вашей проблемы.

ShadeUa 14-03-2015 20:52 2482710

Цитата:

Цитата Dodakaedr
Профиль | Отправить PM | Цитировать | Сообщить модератору
Цитата ShadeUa:
еще вопросик, не подскажите как решить такую небольшую проблемку ? »
вот так:
Код: Выделить весь код
SystemPage.Caption := 'заголовок';
SystemPage.Description := 'описание';
или что вы имели ввиду?
Может это?
Скрытый текст
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[CustomMessages]
Caption=заголовок
Desc=описание
[code]
var
SystemPage: TWizardPage;
procedure InitializeWizard();
begin
SystemPage := CreateCustomPage(wpSelectTasks, CustomMessage('Caption'), CustomMessage('Desc'));
end;
Пожалуйста, поподробней излагайте суть вашей проблемы. »

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

Dodakaedr 14-03-2015 21:02 2482711

Цитата:

Цитата ShadeUa
Не переводиться текс, там нужно что то дописать я незнаю что »

Все как и с остальными элементами скрипта. Создаете CustomMessages
Код:

[CustomMessages]
rusCaption=заголовок
rusDesc=описание
engCaption=Caption
engDesc=Description

и прописываете в процедуре ChangeLang
Код:

SystemPage.Caption := CustomMessage(lang+'Caption');
SystemPage.Description := CustomMessage(lang+'Desc');


ShadeUa 14-03-2015 21:20 2482717

Цитата:

Цитата Dodakaedr
Все как и с остальными элементами скрипта. Создаете CustomMessages
Код: Выделить весь код
[CustomMessages]
rusCaption=заголовок
rusDesc=описание
engCaption=Caption
engDesc=Description
и прописываете в процедуре ChangeLang
Код: Выделить весь код
SystemPage.Caption := CustomMessage(lang+'Caption');
SystemPage.Description := CustomMessage(lang+'Desc'); »

https://yadi.sk/i/u_TuaoKEfFnLF не помогло , вроде бы сделал так же и не помогло

Dodakaedr 14-03-2015 21:40 2482727

Цитата:

Цитата ShadeUa
не помогло , вроде бы сделал так же и не помогло »

Все работает
Скрытый текст
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
ShowLanguageDialog=auto

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

[CustomMessages]
rusCaption=заголовок
rusDesc=описание
engCaption=Caption
engDesc=Description

[Code]
var
SystemPage: TWizardPage;
lang: String;
langBtn: TButton;

procedure ChangeLang();
begin
  SystemPage.Caption := CustomMessage(lang+'Caption');
  SystemPage.Description := CustomMessage(lang+'Desc');
end;

procedure LangBtnClick(Sender: TObject);
begin
  if lang='rus' then begin
    lang:= 'eng';
    langBtn.Caption:= 'рус';
  end else begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end;
  ChangeLang();
end;

procedure InitializeWizard();
begin
 SystemPage := CreateCustomPage(wpSelectTasks, 'заголовок','описание');

 langBtn:= TButton.Create(WizardForm);
  with langBtn do begin
    SetBounds(10,WizardForm.CancelButton.Top,30,WizardForm.CancelButton.Height)
    OnClick:= @LangBtnClick;
    Parent:= WizardForm;
  end;

  if ActiveLanguage='rus' then begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end else begin
    lang:= 'eng';
    langBtn.Caption:= 'рус';
  end;
end;


ShadeUa 14-03-2015 21:55 2482734

Цитата:

Цитата Dodakaedr
Все работает
Скрытый текст
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
ShowLanguageDialog=auto
[Languages]
Name: "eng"; MessagesFile: "compiler:Languages\English.isl"
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
[CustomMessages]
rusCaption=заголовок
rusDesc=описание
engCaption=Caption
engDesc=Description
[code]
var
SystemPage: TWizardPage;
lang: String;
langBtn: TButton;
procedure ChangeLang();
begin
SystemPage.Caption := CustomMessage(lang+'Caption');
SystemPage.Description := CustomMessage(lang+'Desc');
end;
procedure LangBtnClick(Sender: TObject);
begin
if lang='rus' then begin
lang:= 'eng';
langBtn.Caption:= 'рус';
end else begin
lang:= 'rus';
langBtn.Caption:= 'eng';
end; »

да , у вас получилось а у меня почему то нет , все перепроверил все ровно нечего(

ShadeUa 14-03-2015 22:17 2482740

Цитата:

Цитата Dodakaedr
Все работает »

а если я вам скину скрипт , вы сможете помочь решить проблему?

Irenis 14-03-2015 22:52 2482756

Всем привет :) Подскажите пожалуйста, как при создании установщика сделать два исполняемых файла? Мне нужно, чтоб с одного создавался ярлык и после установки пользователь мог сам запустить этот файл .exe. А другой должен по окончанию установки запуститься автоматически без создания ярлыка на рабочем столе. Спасибо :)

Dodakaedr 15-03-2015 00:26 2482778

Цитата:

Цитата ShadeUa
а если я вам скину скрипт , вы сможете помочь решить проблему? »

попробую конечно

Цитата:

Цитата Irenis
сделать два исполняемых файла? »

сделать? В смысле?
Цитата:

Цитата Irenis
Мне нужно, чтоб с одного создавался ярлык и после установки пользователь мог сам запустить этот файл .exe. А другой должен по окончанию установки запуститься автоматически без создания ярлыка на рабочем столе. »

Скрытый текст
Код:

[setup]
AppName=My programm
AppVersion=1.0
DefaultDirName={pf}\My programm
DisableProgramGroupPage=yes

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}";

[Icons]
; создаем ярлык чтобы пользователь мог сам запустить этот файл .exe
Name: "{userdesktop}\MyProg"; Filename: "{app}\MyProg.exe";

[Run]
; запуститься автоматически без создания ярлыка на рабочем столе.
//Filename: "http://forum.oszone.net/thread-294838-30.html"; Flags: skipifsilent shellexec
; или для .exe файла (пример: калькулятор)
Filename: "calc.exe"; Flags: skipifsilent nowait


ShadeUa 15-03-2015 13:02 2482923

Цитата:

Цитата Dodakaedr
попробую конечно »

вот еще проблемка , при смене языка пропадает характеристика винтов , тоисть сколько свободно и занято памяти https://yadi.sk/i/-rNQsQmkfGFUM
а вот архив-https://yadi.sk/d/E_dPSQ0tfGFWf

Farser21 15-03-2015 14:40 2482958

Добрый день.
Возможно ли сделать, чтобы после установки запускалась программа, с параметрами, которые будут зависеть от выбранных компонентов?

kotyarko@fb 15-03-2015 15:28 2482984

Цитата:

Цитата Farser21
Возможно ли сделать, чтобы после установки запускалась программа, с параметрами, которые будут зависеть от выбранных компонентов? »

Типо такого:
Код:

Procedure CurStepChanged(CurStep: TSetupStep);
var
 ResultCode: Integer;
 Params: String;
begin
 Params := '';
 if IsComponentSelected('aa\b') then Params := '/n ';
 if IsComponentSelected('bb\a') then Params := Params + '/t ';
 if CurStep = ssDone then
 begin
  ShellExec('', 'program.exe', Params, '', SW_SHOW, ewNoWait, ResultCode);
 end;
end;

При таком раскладе, при выбранном компоненте aa\b параметр будет "/n", при выбранных aa\b + bb\a - параметры "/n /t".

А можно и проще, комментарием ниже))

habib2302 15-03-2015 15:31 2482987

Farser21,
Код:

[Components]
Name: 1; Description: Описание;
Name: 2; Description: Описание;

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: "Параметр для запуска"; Components: 1;
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: "Параметр для запуска"; Components: 2;


Dodakaedr 15-03-2015 18:15 2483052

Вложений: 1
Цитата:

Цитата ShadeUa
вот еще проблемка , при смене языка пропадает характеристика винтов , тоисть сколько свободно и занято памяти »

Пришлось по другому сделать. С характеристиками проблема с процентами. Если проценты добавить в ChangeLang то после запуска на странице welcomepage при смене языка выскакивает ошибка divide by Zero. Исправить не удалось.

ShadeUa 15-03-2015 18:32 2483060

Цитата:

Цитата Dodakaedr
Пришлось по другому сделать. С характеристиками проблема с процентами. Если проценты добавить в ChangeLang то после запуска на странице welcomepage при смене языка выскакивает ошибка divide by Zero. Исправить не удалось »

спасибо большое )))) , а еще хотел спросить можна вот ету кнопку сделать не на 2 языка а на 3?

sergey3695 15-03-2015 19:51 2483089

Цитата Dodakaedr:
Пришлось по другому сделать. С характеристиками проблема с процентами. Если проценты добавить в ChangeLang то после запуска на странице welcomepage при смене языка выскакивает ошибка divide by Zero. Исправить не удалось. »
Цитата ShadeUa:
или есть какие то другие возможности исправить7 »
да по-нормальному сделать. GetFreeSpaceCaption(nil); попробуй вызывать, а в GetFreeSpaceCaption уже и проверочку. Ну файлов у меня нет, вот и делать впадлу.
Цитата ShadeUa:
кстати можна вот ету кнопку сделать не на 2 языка а на 3? »
да. var i: integer; (глобальной и в initiliazewizard :=1);
if i=1 then
begin
langBtn.Caption:= 'rus';
ChangeLang();
i:= i+1;
end else
if i:=2 then
begin
langBtn.Caption:= 'eng';
ChangeLang();
i:=i+1;
end else
if i:=3 then
begin
langBtn.Caption:= 'ukr';
ChangeLang();
i:= 1;
end;
только щелкать как-то не прикольно. лучше 3 текстурированные связанные кнопочки.

Dodakaedr 15-03-2015 20:17 2483096

Цитата:

Цитата ShadeUa
можна вот ету кнопку сделать не на 2 языка а на 3? »

Недавно давали пример с комбобоксом http://forum.oszone.net/post-2479506-258.html

Shegorat 15-03-2015 20:22 2483098

Цитата:

Цитата Dodakaedr
Если проценты добавить в ChangeLang то после запуска на странице welcomepage при смене языка выскакивает ошибка divide by Zero. Исправить не удалось. »

Код:

var
  s: String;
begin
****
if (TotalMB > 0) then
  s:= ' (' + IntToStr((FreeMb*100) div TotalMB) + ' %)'
else
  s:= ' (N/A %)';
FreeSpaceLabel.Caption := CustomMessage(lang+'FreeSpace') + '  ' + MbOrTB(FreeMb) + s;
****
end;


sergey3695 15-03-2015 20:32 2483105

И все равно GetFreeSpaceCaption(nil) вызывать там надо. :jester: Напечатал, пример не дал. Вот какой я плохой.

Shegorat 15-03-2015 20:35 2483108

Цитата:

Цитата sergey3695
И все равно GetFreeSpaceCaption(nil) вызывать там надо. »

Надо, кто же спорит. Просто в любом случае нужно делать проверку на правильность значения.

sergey3695 15-03-2015 20:53 2483113

Shegorat,
http://rghost.ru/64qMBZhQr
можно конечно и без (nil), но так короче. это ж проверки прописывать, т.к. все работает быстро и не грузит, то можно и так.

ShadeUa 15-03-2015 21:39 2483135

Цитата:

Цитата Dodakaedr
Недавно давали пример с комбобоксом http://forum.oszone.net/post-2479506-258.html »

спасибо большое :)

Farser21 15-03-2015 21:51 2483139

habib2302, можно ли по вашему способу сделать следующее..? Чтобы каждый последующий параметр суммировался с предыдущим? В вашем примере, если выбрать несколько параметров, то они заменят друг друга и в итоге мы получим конфиг с самым последним параметром. Мне же нужно, чтобы они суммировались. Возможно ли это?

Stealthmax 16-03-2015 01:49 2483174

Приветствую, друзья! Давно у вас не был, снова с проблемой пришел.
Делаю сборку браузера 7Star и есть необходимость обработать файл external_extensions.json, т.е. добавить/удалить всего лишь комментарии строки по состоянию checkbox, например:
Код:

{
//"bopoielolijaiimfeehgkogednchjome": { "external_crx": "Ext1.crx", "external_version": "1.0"},
"fllaojicojecljbmefodhfapmrthcbnh": { "external_crx": "Ext2.crx", "external_version": "1.1"},
"okanipcmceoeemlbjnmnberbhgpbllgc": { "external_crx": "Ext3.crx", "external_version": "1.0"}
}

Нашел такой проект JSONConfig для работы с JSON, но не совсем подошел, т.к. требуется Inno с поддержкой Int64(5.5.4 и выше), а я использую расширенную от ResTools.

MaximilianoPozo 16-03-2015 17:42 2483463

Народ, а есть код на проверку обновления установщика в самом инсталляторе?

Shegorat 16-03-2015 17:57 2483472

Вложений: 1
Цитата:

Цитата Stealthmax
Нашел такой проект JSONConfig для работы с JSON, но не совсем подошел, т.к. требуется Inno с поддержкой Int64(5.5.4 и выше), а я использую расширенную от ResTools. »

Там же даже исходники есть. Можно подправить под свои нужды. Правда разметку убивает напрочь (отступы, переносы строк).
http://krinkels.org/threads/innojson...83/#post-23622
Либо во вложении.

MaximilianoPozo 17-03-2015 18:15 2483906

Вложений: 1
Помогите в этом коде сделать еще одно окно для описания
Файл 123369

Farser21 18-03-2015 13:00 2484276

Добрый день.
Более развернуто напишу свой вопрос.
Как по этому примеру сделать, чтобы выбранные параметры суммировались? В этом примере, если выбрать несколько параметров, то они заменят друг друга и в итоге мы получим конфиг с самым последним параметром. Мне же нужно, чтобы они суммировались. Возможно ли это?
Код:

[Components]
Name: 1; Description: Описание;
Name: 2; Description: Описание;

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: "Параметр для запуска"; Components: 1;
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: "Параметр для запуска"; Components: 2;


Dodakaedr 18-03-2015 13:33 2484292

Цитата:

Цитата Farser21
чтобы выбранные параметры суммировались? »

Если правильно понял, то нужно суммировать компоненты
Код:

[Components]
Name: 1; Description: Описание;
Name: 2; Description: Описание;

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: "Параметр для запуска"; Components: 1;
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: "Параметр для запуска"; Components: 1 2;


Farser21 18-03-2015 13:51 2484305

Dodakaedr, немного не так.
Выбирая компонент, вы выбираете параметр, который применяется в конце установки. Выбрав же 2 компонента, соответственно в конце установки будет применено 2 параметра. Но последний параметр заменит все предыдущие, а мне нужно чтобы последний параметр, не заменял предыдущий, а суммировался к нему, чтобы в итоге в конфиге было 2 параметра, а не 1.

P.S. Могу для наглядности в лс скинуть то что получилось сделать.

MKN 18-03-2015 16:30 2484372

Подскажите пожалуйста - какая общая уникальная сигнатура у InnoSetup инсталляторов ?

К примеру, то что предлагается здесь : http://file-extension.net/seeker/file_extension_exe , а именно - 4D 5A 50 00 02 00 00 00
- лажа полная, т.к. определяет принадлежность к куче других исполняемых файлов, не имеющих никакого отношения к ISS ...

Может можно детектировать ISS по строке 49 6E 6E 6F 20 53 65 74 75 70 ? Она вроде как присутствует во всех InnoSetup инсталляторах... Или всё же есть нечто другое, конкретно уникальное ?

Соломон_Кейн@vk 18-03-2015 16:42 2484378

Подскажите пожалуйста, как написать скрипт, чтобы путь установки брался из реестра. Просто есть два ключа реестра. Один для х64 винды, другой для х32 винды. Как сделать так, чтобы папка в любом случае определялась правильно?
Вот мой код с ключем реестра для х64 винд
Скрытый текст

[code]
function GetInstallDir(Dir: string): string;
begin
Dir := '';
RegQueryStringValue(HKLM, 'Software\Wow6432Node\Rockstar Games\Grand Theft Auto IV','InstallFolder', Dir);
Result := Dir;
end;


Ключ реестра для х32 винд -
RegQueryStringValue(HKLM, 'Software\Rockstar Games\Grand Theft Auto IV','InstallFolder', Dir)

Заранее спасибо.

kotyarko@fb 18-03-2015 16:53 2484382

Цитата:

Цитата Соломон_Кейн@vk
Просто есть два ключа реестра. Один для х64 винды, другой для х32 винды. Как сделать так, чтобы папка в любом случае определялась правильно? »

Попробуйте так:
Код:

Function GetInstallDir(Dir: String): String;
var
 Win64: String;
begin
 Dir := '';
 case IsWin64 of
  True: Win64 := '\Wow6432Node';
  False: Win64 := '';
 end;
 RegQueryStringValue(HKLM, 'Software' + Win64 + '\Rockstar Games\Grand Theft Auto IV','InstallFolder', Dir);
 Result := Dir;
end;


Соломон_Кейн@vk 18-03-2015 17:03 2484386

kotyarko@fb, увы, строка установки пуста.

kotyarko@fb 18-03-2015 17:11 2484390

Цитата:

Цитата Соломон_Кейн@vk
увы, строка установки пуста. »

А код, который вы привели, работает?
Ветка, которую вы указали, правильная?

Вообще, лучше по-умолчанию указать какую-то директорию и сделать проверку на присутствие значения в "InstallFolder" по указанной ветке реестра.
Код:

[Setup]
DefaultDirName={code:GetInstallDir}

[*Code]
Function GetInstallDir(Dir: String): String;
var
 DestDir, Win64: String;
begin
 Dir := ExpandConstant('{pf}\Games\GTA IV');
 case IsWin64 of
  True: Win64 := '\Wow6432Node';
  False: Win64 := '';
 end;
 RegQueryStringValue(HKLM, 'Software' + Win64 + '\Rockstar Games\Grand Theft Auto IV', 'InstallFolder', DestDir);
 if DestDir <> '' then
  Result := DestDir
 else
  Result := Dir;
end;


Соломон_Кейн@vk 18-03-2015 17:20 2484395

kotyarko@fb, да.

kotyarko@fb 18-03-2015 17:31 2484398

Соломон_Кейн@vk, извиняюсь, невнимательно написал.
Данный кусок (из первого моего варианта):
Код:

RegQueryStringValue(HKLM, 'Software' + Win64 + '\Wow6432Node\Rockstar Games\Grand Theft Auto IV','InstallFolder', Dir);
Замените на:
Код:

RegQueryStringValue(HKLM, 'Software' + Win64 + '\Rockstar Games\Grand Theft Auto IV','InstallFolder', Dir);
Подкорректировал свои сообщения выше.

Соломон_Кейн@vk 18-03-2015 17:35 2484399

kotyarko@fb, огромное вам спасибо. Теперь работает :)

Kashtan007 18-03-2015 21:32 2484468

Можно ли сделать, чтобы перед началом установки по пути Windows\Fonts удалялся определенный шрифт?
Заранее спасибо!

kotyarko@fb 19-03-2015 00:22 2484548

Цитата:

Цитата Kashtan007
Можно ли сделать, чтобы перед началом установки по пути Windows\Fonts удалялся определенный шрифт? »

Так:
Код:

Function InitializeSetup(): Boolean;
begin
 DeleteFile(ExpandConstant('{fonts}\MyFont.ttf'));
 Result := True;
end;


Соломон_Кейн@vk 20-03-2015 08:53 2485017

Подскажите пожалуйста, как сделать так, чтобы во время установки инсталятора, не выскакивало диалоговое окно о том, что файл только "для чтения". Чтобы инсталятор не спрашивая заменял подобные файлы, и диалоговое окно не выскакивало. Заранее спасибо.

kotyarko@fb 20-03-2015 09:43 2485041

Цитата:

Цитата Соломон_Кейн@vk
Чтобы инсталятор не спрашивая заменял подобные файлы, и диалоговое окно не выскакивало. »

Если я правильно вас понял, допишите файлам:
Код:

Flags: ignoreversion

Соломон_Кейн@vk 20-03-2015 10:04 2485050

kotyarko@fb, это уже было прописано в скрипте, а проблема все равно есть.
Вот скриншот, чтобы вы поняли, какого рода проблема.
Скрытый текст


Нажимая "Повторить", атрибут "Только для чтения" снимается, установка продолжается ровно до того файла, который, как и этот, "Только для чтения".

kotyarko@fb 20-03-2015 10:21 2485058

Цитата:

Цитата Соломон_Кейн@vk
Нажимая "Повторить", атрибут "Только для чтения" снимается, установка продолжается ровно до того файла, который, как и этот, "Только для чтения". »

А, вот теперь понял. Допишите файлу:
Код:

Flags: overwritereadonly

Соломон_Кейн@vk 20-03-2015 10:24 2485059

Огромное спасибо.

kotyarko@fb 20-03-2015 10:35 2485065

Цитата:

Цитата Соломон_Кейн@vk
А если дописывать папке, на файлы в ней эта опция действует? »

Должна, если также указан флаг recursesubdirs.

Соломон_Кейн@vk 20-03-2015 10:44 2485071

Работает. Только вот беда. Уже 2 раза устанавливаю, и 2 раза "Проводник прекратил работу". Я в недоумении, как это убрать?

Фух, оказалось, элементарное совпадение от предыдущих операций на компе.

Kashtan007 20-03-2015 15:33 2485216

Из-за чего может возникать данная ошибка?

kotyarko@fb 20-03-2015 15:34 2485218

Цитата:

Цитата Kashtan007
Из-за чего может возникать данная ошибка? »

Много из-за чего. Скрипт можно запустить по F8 и узнать, что именно выдаёт ошибку.

Kashtan007 20-03-2015 15:38 2485220

kotyarko@fb, вот что вышло.

kotyarko@fb 20-03-2015 17:23 2485278

Цитата:

Цитата Kashtan007
вот что вышло. »

Ну выкладывайте тогда код.

Stealthmax 22-03-2015 10:03 2485927

Shegorat, опробовал измененный JSONConfig, мягко говоря, "не то пальто", в том числе "убитые" разметка и отступы.

Может кто-то подскажет другой вариант решения задачи для данного файла?
Обработать json в качестве текстового удалось, но как добавить/удалить символы комментирования при необходимости в строку?

Farser21 22-03-2015 14:25 2486032

Добрый день.
К сожалению все еще не разобрался.

Как по этому примеру сделать, чтобы выбранные параметры суммировались? В этом примере, если выбрать несколько параметров, то они заменят друг друга и в итоге мы получим конфиг с самым последним параметром. Мне же нужно, чтобы они суммировались. Возможно ли это?
Код:

[Components]
Name: 1; Description: Описание;
Name: 2; Description: Описание;

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: "Параметр для запуска"; Components: 1;
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: "Параметр для запуска"; Components: 2;


habib2302 22-03-2015 20:21 2486176

Доброе время суток. Делаю репак Cyberfox. Как делать проверку по процессорам и отменить установку в случае не совместимости процессора

habib2302 22-03-2015 20:36 2486186

Цитата:

Цитата Farser21
выбранные параметры суммировались »

В смысле?

Farser21 22-03-2015 21:38 2486205

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

kotyarko@fb 22-03-2015 22:15 2486212

Цитата:

Цитата habib2302
Как делать проверку по процессорам и отменить установку в случае не совместимости процессора »

http://forum.oszone.net/post-2147391-410.html

habib2302 23-03-2015 07:45 2486317

kotyarko@fb, в коде ничего нету связанное с производителями процессоров. Мне нужна проверка по производителям процессоров. Если заданный процессор (например Intel) не совместим с процессором в компе (например AMD), то отменить установку программы

kotyarko@fb 23-03-2015 10:17 2486341

Цитата:

Цитата habib2302
в коде ничего нету связанное с производителями процессоров. »

Уверены?


Применяете переменную PROCESSOR_IDENTIFIER. А потом спокойно проверяете, AMD или Intel.

А ещё можно таким способом:
Код:

Function InitializeSetup(): Boolean;
var
 DeviceName: String;
begin
 Result := RegQueryStringValue(HKLM, 'Hardware\Description\System\CentralProcessor\0', 'ProcessorNameString', DeviceName);
 if Result then
  MsgBox(DeviceName, mbInformation, MB_OK);
end;


El Sanchez 23-03-2015 12:31 2486410

Цитата:

Цитата Farser21
Как по этому примеру сделать, чтобы выбранные параметры суммировались? В этом примере, если выбрать несколько параметров, то они заменят друг друга и в итоге мы получим конфиг с самым последним параметром. Мне же нужно, чтобы они суммировались. Возможно ли это? »

Farser21, ну и используйте константу {code:...} для определения параметров. В теле функции делаете все, что нужно.
Код:

[Components]
Name: Component1; Description: Component 1;
Name: Component2; Description: Component 2;

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent; Parameters: {code:GetParameters}

[code]
//////////////////////////////////////////////
function GetParameters(Param: String): String;
begin
    with
TStringList.Create do
    try
        if
IsComponentSelected('Component1') then
           
Add('/param1');
        if IsComponentSelected('Component2') then
           
Add('/param2');
        Result := Text;
        StringChangeEx(Result, #13#10, #32, True);
    finally
       
Free;
    end;
end;


Dodakaedr 25-03-2015 20:05 2487552

Приведите, пожалуйста, пример работы функции FindWindowEx который бы работал на расширенной версии unicode? Какая константа клика для unicode версии? Unicode No или это не то?
Или поправьте этот код:
Скрытый текст
Код:

#define A = (Defined UNICODE) ? "W" : "A"
[Setup]
AppName=App
AppVersion=1.0
DefaultDirName={pf}\app
OutputDir=.

[Code]
type
pchar=pansichar;

Const
  BM_CLICK = $00F5;

function FindWindowEx(hWndM, hWndC: HWND; lpszClass, lpszWindow: PChar): HWND;external 'FindWindowEx{#A}@user32.dll stdcall';

function InitializeSetup(): Boolean;
var
  r: integer;
begin
 Result := Exec(ExpandConstant('{sys}\calc.exe'), '', '', SW_SHOW, ewNoWait, R);
 Sleep(200);
end;

procedure InitializeWizard();
var
  AppWnd: HWND;
begin
if FindWindowByWindowName('Калькулятор') <> 0 then begin
 AppWnd:= FindWindowByWindowName('Калькулятор');
 SendMessage(FindWindowEx(AppWnd, 0, 'Button', '7'), BM_CLICK, 0, 0);
end;
end;


R.i.m.s.k.y. 25-03-2015 21:24 2487598

Подскажите, пожалуйста, версия инно 5.5.1 ee2 (a) ANSI или UNICODE? от к итайцев расширенная или оригинальная?

sergey3695 26-03-2015 11:02 2487774

(a) - ansi. расширенная наверное.

R.i.m.s.k.y. 26-03-2015 11:03 2487776

sergey3695, а не подрелиз какой-нибудь?

kotyarko@fb 26-03-2015 12:33 2487824

Цитата:

Цитата R.i.m.s.k.y.
от к итайцев расширенная или оригинальная? »

Так китайцы только расширенную и делают, не?

R.i.m.s.k.y. 26-03-2015 13:25 2487840

Цитата:

Цитата kotyarko@fb
Так китайцы только расширенную и делают, не? »

ога
вопрос это (расширенная от китайцев) or (стандартная)

Dodakaedr 26-03-2015 13:29 2487845

Цитата:

Цитата R.i.m.s.k.y.
вопрос это (расширенная от китайцев) or (стандартная) »

расширенная

R.i.m.s.k.y. 26-03-2015 13:34 2487849

Вложений: 1
господа состоятельные кроты, F1!!!

есть две проблемки:

1. в initializeWizard компонент весом 10 гиг фиксируется, но на странице SelectDirPage пишет что минимум нужно 35мб, хотя по идее должно писаться 10 гиг

2. На странице компонентов отсутствует полоса прокрутки, т.е. по факту список компонентов прокручивается если колесиком мышки повозить, но сие действо неясно тк полосы вертикальной прокрутки нет

(с моей подписью вопрос немного диссонирует, дада :) )

скрипт в аттаче, файлы нужные вот http://sendfile.su/1100675

AlekseyPopovv 26-03-2015 13:34 2487850

Как эту процедуру разделить на портабле и инсталлер:

procedure SettClick(Sender: TObject);
begin
case TNewRadioButton(Sender) of
Bus:
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf32}\{#MyAppCompany}')) + '{#MyAppName} {#Bus}';
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} {#Bus} Portable';
end;
Net:
begin
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf32}\{#MyAppCompany}')) + '{#MyAppName} {#Net}';
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} {#Net} Portable';
end;
end;
end;

Если добавить if Installer.Checked then или if Portable.Checked then скрипт компилируется, но при запуске инсталлятора выдаёт ошибку:

Runtime Error (at 80:119):

Could not call proc.

kotyarko@fb 26-03-2015 14:02 2487862

Цитата:

Цитата AlekseyPopovv
Если добавить if Installer.Checked then или if Portable.Checked then скрипт компилируется, но при запуске инсталлятора выдаёт ошибку »

Потому что вы обращаетесь к Installer и Portable до того, как они создаются.

nik1967 26-03-2015 15:41 2487916

R.i.m.s.k.y., вроде бы уже Ветеран, Сообщения: 1351, ну а где доп. файлы и доп. скрипты? Что, самому, что ли всё искать и собирать? Сколько раз уже по этому поводу было написано.

R.i.m.s.k.y. 26-03-2015 16:03 2487927

Цитата:

Цитата nik1967
вроде бы уже Ветеран, Сообщения: 1351 »

и почти пять сотен лайков заработанных именно на инно :D
вот доп. файлы и доп. скрипты http://sendfile.su/1100675

AlekseyPopovv 26-03-2015 16:45 2487961

kotyarko@fb, перед этим стоит:
procedure CopmpClick(Sender: TObject);
begin
case TNewRadioButton(Sender) of
Portable:
begin
Icons.Checked:=False;
Icons.Enabled:= Icons.Checked;
Startmenu.Checked:=False;
Startmenu.Enabled:= Startmenu.Checked;
Panmenuicons.Checked:=False;
Panmenuicons.Enabled:= Panmenuicons.Checked;
end;
Installer:
begin
Icons.Checked:=True;
Icons.Enabled:= Icons.Checked;
Startmenu.Checked:=True;
Startmenu.Enabled:= Startmenu.Checked;
Panmenuicons.Checked:=True;
Panmenuicons.Enabled:= Panmenuicons.Checked;
end;
end;
end;
Я тоже не вчера родился, вопрос был конкретный, если Вы знаете, почему не можете подсказать? Ведь на форумы Я обращаюсь редко, когда действительно не могу понять!!! В принципе дело Ваше. Заранее извиняюсь за мои высказывания, как говорится "ни кто ни кому не обязан"!

kotyarko@fb 26-03-2015 18:42 2488031

Цитата:

Цитата AlekseyPopovv
перед этим стоит »

Ну и пусть стоит. Это не создание радиобаттонов, а только кейс из них (как и в вышенаписанном вами коде).
Нужно именно чтобы их создание инициализировалось раньше, чем их использование.

nik1967 26-03-2015 18:54 2488039

R.i.m.s.k.y., по
1. - подозреваю, что тут ограничения 32 битной версии Inno.
2. - это косяк (ну или фича) скина - без скина лифт есть.

R.i.m.s.k.y. 26-03-2015 19:26 2488056

Цитата:

Цитата nik1967
1. - подозреваю, что тут ограничения 32 битной версии Inno. »

я так не думаю

Цитата:

Цитата nik1967
2. - это косяк (ну или фича) скина - без скина лифт есть. »

лады
можно ли сделать раскрывающиеся компоненты?
ну вот
как-то так

Dodakaedr 26-03-2015 19:27 2488057

Цитата:

Цитата R.i.m.s.k.y.
есть две проблемки: »

по 1:
Размер указывается не правильно потому что используется чекова функция.
исправить можно так:
Код:

[messages]
DiskSpaceMBLabel=Требуется как минимум 10.2 Гб свободного дискового пространства.

по 2:
Вам уже ответили. Возможно косяк скина, попробуйте другой.

Цитата:

Цитата R.i.m.s.k.y.
можно ли сделать раскрывающиеся компоненты? »

используйте комбобокс

R.i.m.s.k.y. 26-03-2015 19:30 2488059

Цитата:

Цитата Dodakaedr
Размер указывается не правильно потому что используется чекова функция.
исправить можно так: »

в том то и да что галочка на 10гиг не активна если прога уже стоит и тогда показывает все равно неправильно - все галки то сняты
можно ли как-то в коде поменять этот DiskSpaceMBLabel? я и на неё чек поставлю

Цитата:

Цитата Dodakaedr
используйте комбобокс »

можно примерчик?

____________________________________
кстати, автор инно ультра тут не пробегал?

Dodakaedr 26-03-2015 19:33 2488065

Цитата:

Цитата R.i.m.s.k.y.
можно ли как-то в коде поменять этот DiskSpaceMBLabel? »

Сделайте проверку на компонент и укажите текст
Код:

WizardForm.DiskSpaceLabel.Caption := 'бла-бла';

R.i.m.s.k.y. 26-03-2015 19:35 2488067

Dodakaedr, вот
меня всегда напрягало название элементов в инно

а по комбобоксам нет примерчика под рукой?

Dodakaedr 26-03-2015 19:39 2488070

Цитата:

Цитата R.i.m.s.k.y.
а по комбобоксам нет примерчика под рукой? »

http://forum.oszone.net/post-2479506-258.html

R.i.m.s.k.y. 26-03-2015 20:24 2488102

Dodakaedr, не то
это выпадающий список
а я хотел раскрывающийся список на странице компонентов
вот как спойлер
язык установки
- англ
- русский
- польский

dracosha 26-03-2015 20:50 2488119

R.i.m.s.k.y. если я правильно понял, расширенная версия позволяет в секции Setup использовать ключ ComponentsListTVStyle=yes и тогда будет активирован раскрывающийся список, а в секции Components флаг collapsed позволяет компоненту-родителю по умолчанию быть свернутым, но это так на всякий случай для дополнительной информации

R.i.m.s.k.y. 26-03-2015 21:08 2488128

dracosha, вах! ты мой спаситель! целую в носик! и полоса прокрутки появилась!
в справке вообще ни полслова!

___________________

подскажите, пожалуйста, как сделать всплывающие подсказки в коде не черного цвета (скин черный), а стандартного желтоватого?
скрипты и файлы выше

код всплывающих подсказок
Код:

procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
    if Index = -1 then Exit;
    if Index = LastIndex then Exit;
    try
        case TNewCheckListBox(Sender).ItemCaption[Index] of 
            'компонент1': TNewCheckListBox(Sender).Hint := 'бла-бла1';
            'компонент2': TNewCheckListBox(Sender).Hint := 'бла-бла2';
        else
            begin
                TNewCheckListBox(Sender).ShowHint := False;
                LastIndex := UNDEF_INDEX;
                Exit;
            end;
        end;
        TNewCheckListBox(Sender).ShowHint := True;
    finally
        LastIndex := Index;
    end;
end;


kotyarko@fb 26-03-2015 22:23 2488158

Цитата:

Цитата R.i.m.s.k.y.
подскажите, пожалуйста, как сделать всплывающие подсказки в коде не черного цвета (скин черный), а стандартного желтоватого? »

Цвет фона подтягивается как раз из скина. Так что без редактирования этого скина никак.

R.i.m.s.k.y. 26-03-2015 22:28 2488159

Вложений: 1
kotyarko@fb, что именно поправить? скин в аттаче

kotyarko@fb 26-03-2015 22:51 2488167

R.i.m.s.k.y., что именно не знаю (tooltips в редакторе скинов почему-то не доступен).
Можешь сам попробовать ISSkinBuilder`ом.

R.i.m.s.k.y. 26-03-2015 22:53 2488168

kotyarko@fb, почему же
control - tooltip есть, только FillColor ни на что не влияет
Или я туплю

kotyarko@fb 26-03-2015 23:52 2488182

Цитата:

Цитата R.i.m.s.k.y.
control - tooltip есть, только FillColor ни на что не влияет »

Я как раз это и мел ввиду.
VCL в этом плане намного удобнее. Можно просто через ФШ всё сделать.

R.i.m.s.k.y. 27-03-2015 06:40 2488254

Цитата:

Цитата kotyarko@fb
VCL в этом плане намного удобнее. Можно просто через ФШ всё сделать. »

что значит этот набор букв?

kotyarko@fb 27-03-2015 09:27 2488278

R.i.m.s.k.y., http://krinkels.org/resources/vcl-st...nno-setup.160/

Okta_333 27-03-2015 09:39 2488281

Подскажите пожалуйста как прицепить свою иконку на Официальный сайт и на Удаление?


R.i.m.s.k.y. 27-03-2015 09:47 2488286

Okta_333, IconFileName не поможет?

[Icons]
Name: "{group}\Удалить"; Filename: "{uninstallexe}"; IconFilename: "{app}\icon.ico";
Name: "{group}\Удалить"; Filename: "{uninstallexe}"; IconFilename: "{app}\etherium.exe"; IconIndex: 1;

Цитата:

Цитата kotyarko@fb
http://krinkels.org/resources/vcl-st...nno-setup.160/ »

там регаться нужно
VCL Styles for Inno Setup умеет править cjstyles? а то править весь установщик неохота

kotyarko@fb 27-03-2015 09:54 2488290

Цитата:

Цитата R.i.m.s.k.y.
VCL Styles for Inno Setup умеет править cjstyles? »

Нет конечно.

Цитата:

Цитата R.i.m.s.k.y.
а то править весь установщик неохота »

Править особо и нечего. Заменить либу и скин. Переписать загрузку в InitializeSetup и выгруз в DeinitializeSetup. Всё.

R.i.m.s.k.y. 27-03-2015 09:56 2488292

Цитата:

Цитата kotyarko@fb
Править особо и нечего. Заменить либу и скин. »

с этого места подробнее
как оформление через cjstyles заменить на VCL Styles?

kotyarko@fb 27-03-2015 10:05 2488297

Цитата:

Цитата R.i.m.s.k.y.
как оформление через cjstyles заменить на VCL Styles? »

Вот установщик для VCL. Можешь посмотреть.
Возможно, ты меня не понял. Тот же стиль не останется при замене. В VCL абсолютно другие скины (в стандартной поставке есть небольшой набор из 33 штук), и от cjstyles ничего не останется.
Я сказал про VCL изначально, т.к. в нём отредактировать какую-то мелочь намного удобнее и проще, чем в cjstyles.
Вот например распакованный скин VCL в ФШ, можно делать почти что-угодно.

И в нём отсутствуют некоторые недостатки, которые есть в cj.

R.i.m.s.k.y. 27-03-2015 10:34 2488313

kotyarko@fb, спасибо но нет
я уже картинок под текущий фон подобрал
какое все-таки дрочево этот isskin builder :facepalm:
вроде нашел параметр - InfoBK, выгружаю - правлю в инишнике (ибо в самом низзя) - загружаю - штанга! стандартный виндовый скин :facepalm:

palsn2000 28-03-2015 17:58 2488906

Здравствуйте.
Пытаюсь сделать подписи компонентов при наведении мышки, но никак не пойму как обратиться к компонентам (как они называются у Инно в коде).
Наиболее близко к поставленной задаче я подобрался когда у меня при наведении на лист компонентов появляется подпись.
А вот как прописать имя компонента DLC\1 или DLC\2. (вместо "with WizardForm.ComponentsList do" как нибудь типа "with WizardForm.ComponentName(DLC\1) do")

Код:


[Components]
Name: DLC\1; Description: Дополнения Digital Delux 1; Types: full custom optimal
Name: DLC\2; Description: Дополнения Digital Delux 2; Types: full custom optimal

[_Code]
procedure InitializeWizard();
begin
  with WizardForm.ComponentsList do
  begin
    Hint := 'Это подпись компонента';
    ParentShowHint := False;
    ShowHint := True;
  end;
end;

Пожалуйста помогите если кто знает.

kotyarko@fb 28-03-2015 19:08 2488936

Цитата:

Цитата palsn2000
А вот как прописать имя компонента DLC\1 или DLC\2. »

Никак. Эти имена не доступны в секции кода (кроме как в функции IsComponentSelected).
Нужно обращаться к индексу компонента.

R.i.m.s.k.y. 28-03-2015 19:12 2488941

palsn2000, глянь выше мой скрипт, конкретно CompOnItemMouseMove

palsn2000 28-03-2015 20:09 2488963

kotyarko@fb,
Цитата:

Нужно обращаться к индексу компонента.
А как обратиться к индексу? Какая форма записи? Я в программировании не очень.

Dodakaedr 28-03-2015 21:12 2489000

Цитата:

Цитата palsn2000
А как обратиться к индексу? Какая форма записи? »

Приблизительно такая...Вырезка с скрипта R.i.m.s.k.y.
Скрытый текст
Код:

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Components]
Name: Mode; Description: mode; Types: custom; flags: fixed
Name: Mode/SPOnly; Description: SPOnly; Flags:  disablenouninstallwarning
Name: Mode/MPOnly; Description: MPOnly; Flags: disablenouninstallwarning
Name: Mode2; Description: mode2; Types: custom; flags: fixed
Name: Mode2/SPOnly2; Description: SPOnly2; Flags: disablenouninstallwarning
Name: Mode2/MPOnly2; Description: MPOnly2; Flags: disablenouninstallwarning

[Code]
const
  UNDEF_INDEX = -777;

var
  LastIndex: Integer;

procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
    if Index = -1 then Exit;
    if Index = LastIndex then Exit;
    try
        case TNewCheckListBox(Sender).ItemCaption[Index] of
            'mode': TNewCheckListBox(Sender).Hint := 'Опись1';
            'SPOnly': TNewCheckListBox(Sender).Hint := 'Опись2';
            'MPOnly': TNewCheckListBox(Sender).Hint := 'Опись3';
            'mode2': TNewCheckListBox(Sender).Hint := 'Опись4';
            'SPOnly2': TNewCheckListBox(Sender).Hint := 'Опись5';
            'MPOnly2': TNewCheckListBox(Sender).Hint := 'Опись6';
        else
            begin
                TNewCheckListBox(Sender).ShowHint := False;
                LastIndex := UNDEF_INDEX;
                Exit;
            end;
        end;
        TNewCheckListBox(Sender).ShowHint := True;
    finally
        LastIndex := Index;
    end;
end;

procedure CompOnMouseLeave(Sender: TObject);
begin
    WizardForm.ComponentsList.ShowHint := False;
end;

procedure InitializeWizard();
begin
  LastIndex := UNDEF_INDEX;
  WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
  WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
end;


palsn2000 28-03-2015 22:14 2489022

Dodakaedr, Спасибо. Вырезка с скрипта R.i.m.s.k.y. очень помогла.
Но теперь возникло ещё три вопроса:
1. Можно ли сделать так, чтобы подпись отображалась немного дольше (секунд 10-15);
2. Можно ли сделать так, чтобы подпись (длинная) отображалась не в одну, а в 2-3 строки;
3. Можно ли сделать так, чтобы при переводе курсора с компонента на компонент подпись бы изменялась сразу (в представленном примере подпись отображается для одного компонента и один раз - для смены подписи нужно либо убрать курсор из поля компонентов и вернуть его снова, либо щелкнуть на компоненте левой или правой кнопкой мыши).

Okta_333 30-03-2015 18:13 2489752

Народ! Помогите пожалуйста вшить музыку с кнопочкой (play/stop) в скрипт: http://rghost.ru/7RSpPRxQh

R.i.m.s.k.y. 30-03-2015 18:45 2489764

Цитата:

Цитата palsn2000
Dodakaedr, Спасибо. Вырезка с скрипта R.i.m.s.k.y. очень помогла.
Но теперь возникло ещё три вопроса:
1. Можно ли сделать так, чтобы подпись отображалась немного дольше (секунд 10-15);
2. Можно ли сделать так, чтобы подпись (длинная) отображалась не в одну, а в 2-3 строки;
3. Можно ли сделать так, чтобы при переводе курсора с компонента на компонент подпись бы изменялась сразу (в представленном примере подпись отображается для одного компонента и один раз - для смены подписи нужно либо убрать курсор из поля компонентов и вернуть его снова, либо щелкнуть на компоненте левой или правой кнопкой мыши). »

сам интересовался, решения не нашел

kotyarko@fb 30-03-2015 18:56 2489770

Цитата:

Цитата Okta_333
Народ! Помогите пожалуйста вшить музыку с кнопочкой (play/stop) в скрипт »

Пробуйте: https://yadi.sk/d/70YrLaiafdGnm. Не проверял, т.к. не все файлы, прописанные в скрипте присутствуют в приложенном архиве.

Цитата:

Цитата palsn2000
2. Можно ли сделать так, чтобы подпись (длинная) отображалась не в одну, а в 2-3 строки; »

Так:
Код:

ShowHint := True;
Hint := 'This is' + #13#10 + 'hint.';


svs23 01-04-2015 13:43 2490398

подскажите возможность решения вопроса
есть файл настроек, в нем несколько управляющих функций с опцией вкл/выкл
надо так
если в списке компонентов выбран пункт 1 то копировать файл 1 но не копировать файл 2 и 3
если в списке компонентов выбран пункт 2 то копировать файл 2 но не копировать файл 1 и 3
если в списке компонентов выбран пункт 3 то копировать файл 3 но не копировать файл 1 и 2
и т.д.
1,2,3 это три варианта одного и тот же файл только с разными настройками

R.i.m.s.k.y. 01-04-2015 13:46 2490400

svs23, три разных файла
в секции Files использовать Components

svs23 01-04-2015 14:47 2490422

не правильно сформулировал вопрос
надо так
если в списке компонентов выбран пункт 1 то копировать файл 1
если в списке компонентов выбран пункт 2 то копировать файл 2
если в списке компонентов выбран пункт 3 то копировать файл 3
если в списке компонентов выбран пункт 1 и 2 то копировать файл 4 но не копировать файл 1 и 2
если в списке компонентов выбран пункт 2 и 3 то копировать файл 5 но не копировать файл 2 и 3
если в списке компонентов выбран пункт 1 и 3 то копировать файл 6 но не копировать файл 1 и 3
если в списке компонентов выбран пункт 1 и 2 и 3 то копировать файл 7 но не копировать файл 1 и 2 и 3
и т.д.

R.i.m.s.k.y. 01-04-2015 15:00 2490430

svs23,

[Files]
Components: punkt1 and not punkt2 and not punkt3; Source: 1\file1...
Components: punkt2 and not punkt1 and not punkt3; Source: 2\file2...
Components: punkt3 and not punkt2 and not punkt1; Source: 3\file3...
Components: punkt1 and punkt2; Source: 4\file4...
Components: punkt2 and punkt3; Source: 5\file5...

дальше по аналогии

kotyarko@fb 01-04-2015 15:09 2490438

Цитата:

Цитата svs23
если в списке компонентов выбран пункт 1 то копировать файл 1
если в списке компонентов выбран пункт 2 то копировать файл 2
если в списке компонентов выбран пункт 3 то копировать файл 3
если в списке компонентов выбран пункт 1 и 2 то копировать файл 4 но не копировать файл 1 и 2
если в списке компонентов выбран пункт 2 и 3 то копировать файл 5 но не копировать файл 2 и 3
если в списке компонентов выбран пункт 1 и 3 то копировать файл 6 но не копировать файл 1 и 3
если в списке компонентов выбран пункт 1 и 2 и 3 то копировать файл 7 но не копировать файл 1 и 2 и 3 »

Там же поддерживаются логические операторы. Значит что-то типо такого должно прокатить:
Код:

[Components]
Name: one; Description: "1";
Name: two; Description: "2";
Name: three; Description: "3";

[Files]
Source: "File1"; DestDir: ""; Components: one and not (two and three);
Source: "File2"; DestDir: ""; Components: two and not (one and three);
Source: "File3"; DestDir: ""; Components: three and not (one and two);
Source: "File4"; DestDir: ""; Components: one and two and not three;
Source: "File5"; DestDir: ""; Components: two and three and not one;
Source: "File6"; DestDir: ""; Components: one and three and not two;
Source: "File7"; DestDir: ""; Components: one and two and three;

Надеюсь, правильно вас понял.

R.i.m.s.k.y. 01-04-2015 15:11 2490439

svs23 конфа в инишнике?

Dodakaedr 01-04-2015 15:32 2490448

Цитата:

Цитата svs23
не правильно сформулировал вопрос
надо так »

Скрытый текст
Код:

[setup]
appname=app
appversion=1.0
DefaultDirName={sd}\app

[Files]
;если файл
Source: file1.xml; DestDir: {app}; Components: file1 and not file3 and not file2;
Source: file2.xml; DestDir: {app}; Components: file2 and not file1 and not file3;
Source: file3.xml; DestDir: {app}; Components: file3 and not file1 and not file2;
Source: file4.xml; DestDir: {app}; Components: file1 and file2 and not file3;
Source: file5.xml; DestDir: {app}; Components: file2 and file3 and not file1;
Source: file6.xml; DestDir: {app}; Components: file1 and file3 and not file2;
Source: file7.xml; DestDir: {app}; Components: file1 and file2 and file3;

[INI]
;если *.ini файл
Filename: {app}\file1.txt; Section: settings; Key: OnTop; String: Yes; Components: file1 and not file3 and not file2;
Filename: {app}\file2.txt; Section: settings; Key: Ask; String: No; Components: file2 and not file1 and not file3;
Filename: {app}\file3.txt; Section: settings; Key: ST; String: Stop; Components: file3 and not file1 and not file2;
Filename: {app}\file4.txt; Section: settings; Key: St; String: Play; Components: file1 and file2 and not file3;
Filename: {app}\file5.txt; Section: settings; Key: Type; String: Discont; Components: file2 and file3 and not file1;
Filename: {app}\file6.txt; Section: settings; Key: Name; String: Player; Components: file1 and file3 and not file2;
Filename: {app}\file7.txt; Section: settings; Key: BD; String: 12; Components: file1 and file2 and file3;

[Components]
Name: file1; Description: file1;
Name: file2; Description: file2;
Name: file3; Description: file3;


svs23 01-04-2015 16:52 2490488

Цитата:

Цитата Dodakaedr
Source: file1.xml; DestDir: {app}; Components: file1 and not file3 and not file2;
Source: file2.xml; DestDir: {app}; Components: file2 and not file1 and not file3;
Source: file3.xml; DestDir: {app}; Components: file3 and not file1 and not file2;
Source: file4.xml; DestDir: {app}; Components: file1 and file2 and not file3;
Source: file5.xml; DestDir: {app}; Components: file2 and file3 and not file1;
Source: file6.xml; DestDir: {app}; Components: file1 and file3 and not file2;
Source: file7.xml; DestDir: {app}; Components: file1 and file2 and file3; »

то что надо
огромное СПС

kotyarko@fb, R.i.m.s.k.y., Dodakaedr,
спасибо всем

svs23 02-04-2015 10:40 2490773

подскажите правильно сделал?
Код:

[Files]
Source: "...\XVMSymbol_11.1*"; DestDir: "{tmp}\XVMSymbol_11.1";

[Run]
Filename: "{tmp}\XVMSymbol_11.1\fontinst.exe"; Parameters: "/f fontinst.inf"


R.i.m.s.k.y. 02-04-2015 10:46 2490777

svs23, смотря чего хочешь сделать

svs23 02-04-2015 10:57 2490783

в {tmp} скопировать папку XVMSymbol_11.1 с содержимым fontinst.exe, fontinst.inf, XVMSymbol_11.1.ttf

fontinst.inf
Код:

[fonts]
XVMSymbol_11.1.ttf

при выполнении установки запустить fontinst.exe /f fontinst.inf для установки в систему шрифта XVMSymbol_11.1.ttf

R.i.m.s.k.y. 02-04-2015 11:01 2490787

svs23, можно
а можно использовать средства инно
[Files]
Source: "XVMSymbol_11.1.ttf"; DestDir: "{fonts}"; FontInstall: "XVMSymbol_11.1"; Flags: onlyifdoesntexist uninsneveruninstall

svs23 02-04-2015 11:07 2490789

нашел это пост и делал по нему....
http://forum.oszone.net/post-660231-2.html

Цитата:

Цитата R.i.m.s.k.y.
[Files]
Source: "XVMSymbol_11.1.ttf"; DestDir: "{fonts}"; FontInstall: "XVMSymbol_11.1"; Flags: onlyifdoesntexist uninsneveruninstall »

я так понял шрифт скопируется и установится в системе? перегружать винду не нужно будет?

R.i.m.s.k.y. 02-04-2015 11:25 2490795

Цитата:

Цитата svs23
я так понял шрифт скопируется и установится в системе? перегружать винду не нужно будет? »

ну если не 98-я то нет

svs23 02-04-2015 12:34 2490823

а как скрыть размер файла в окне выбора компонентов?

R.i.m.s.k.y. 02-04-2015 12:38 2490824

svs23,
я так делаю

[Files]
check: True_function; Source: "XVMSymbol_11.1.ttf"; DestDir: "{fonts}"; FontInstall: "XVMSymbol_11.1"; Flags: onlyifdoesntexist uninsneveruninstall


[Code]
function True_function(): Boolean;
begin
Result := True;
end;

Цитата:

Цитата svs23
я так понял шрифт скопируется и установится в системе? перегружать винду не нужно будет? »

добавь еще
[Setup]
ChangesAssociations=true
ChangesEnvironment=true
это заставит инно передернуть винду на изменившиеся связи и регистрации файлов

svs23 02-04-2015 14:36 2490912

а где можно найти инфу как сделать запоминание выбранных ранее элементов в установщике при повторных установках

R.i.m.s.k.y. 02-04-2015 14:43 2490920

svs23, я делаю сам: в реестр пишу несколько строковых параметров и потом уже анализирую
а вообще в секции реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\твойID есть четыре строковых параметра:
- Inno Setup: Deselected Components
- Inno Setup: Deselected Tasks
- Inno Setup: Selected Components
- Inno Setup: Selected Tasks
из названия ясно что за что отвечает

Dodakaedr 02-04-2015 14:44 2490921

Цитата:

Цитата svs23
а где можно найти инфу как сделать запоминание выбранных ранее элементов в установщике при повторных установках »

В справке. А вообще по умолчанию включено запоминание сценария предыдущей установки.

svs23 02-04-2015 14:45 2490923

Цитата:

Цитата R.i.m.s.k.y.
я делаю сам: в реестр пишу несколько строковых параметров и потом уже анализирую
а вообще в секции реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\твойID есть четыре строковых параметра:
- Inno Setup: Deselected Components
- Inno Setup: Deselected Tasks
- Inno Setup: Selected Components
- Inno Setup: Selected Tasks
из названия ясно что за что отвечает »

:) это конечно хорошо, но что и как мне с этим Selected Components делать?

R.i.m.s.k.y. 02-04-2015 14:46 2490924

Цитата:

Цитата Dodakaedr
В справке. А вообще по умолчанию включено запоминание сценария установки. »

да, забыл написать

Цитата:

Цитата svs23
это конечно хорошо, но что и как мне с этим Selected Components делать? »

анализировать
парсить
я ж говорю: проще самому писать в реетр

svs23 02-04-2015 14:47 2490926

Цитата:

Цитата Dodakaedr
А вообще по умолчанию включено запоминание сценария предыдущей установки. »

что-то у меня такого не наблюдается! может по-тому что отключил создание ярлыка в Программы и Компоненты?
подскажите где он ВКЛ/ВЫКЛ

Dodakaedr 02-04-2015 14:50 2490930

Цитата:

Цитата svs23
подскажите где он ВКЛ/ВЫКЛ »

Если Вы:
Цитата:

Цитата svs23
отключил создание ярлыка в Программы и Компоненты? »

то должны знать как и включить.

svs23 02-04-2015 14:50 2490932

в чем может быть косяк? на одном компе (7) справка ISetup.chm открывается без проблем, а на другом (7) только оглавление, а окне с инфой пусто!

Цитата:

Цитата Dodakaedr
Цитата svs23:
подскажите где он ВКЛ/ВЫКЛ »
Если Вы:
Цитата svs23:
отключил создание ярлыка в Программы и Компоненты? »
то должны знать как и включить. »

:) я же и спрашиваю в этом ли причина?

Dodakaedr 02-04-2015 14:54 2490937

Цитата:

Цитата svs23
я же и спрашиваю в этом ли причина? »

Если CreateUninstallRegKey=no или Uninstallable=no то да!

Цитата:

Цитата svs23
в чем может быть косяк? на одном компе (7) справка ISetup.chm открывается без проблем, а на другом (7) только оглавление, а окне с инфой пусто! »

ПКМ по файлу выбрать "Свойства" и нажать "Разблокировать".

svs23 02-04-2015 15:21 2490958

Цитата:

Цитата Dodakaedr
ПКМ по файлу выбрать "Свойства" и нажать "Разблокировать". »

блин... спасибо, я даже и не знал об этом...

вот еще вопрос:
у одних "главных компонентов" в окне выбора компонентов у меня есть размер в МБ а у других нет!?
где скрывается этот "подводный камень" или как скрыть у всех "главных компонентов" размер?

R.i.m.s.k.y. 02-04-2015 20:54 2491119

svs23, ванги на заработках в вашингтонске

svs23 02-04-2015 21:47 2491132

Цитата:

Цитата R.i.m.s.k.y.
svs23, ванги на заработках в вашингтонске »

;)

R.i.m.s.k.y. 02-04-2015 21:58 2491138

svs23, это был намек "скрипт покажи"

svs23 03-04-2015 07:09 2491240

Цитата:

Цитата R.i.m.s.k.y.
svs23, это был намек "скрипт покажи" »

я понял... комп не тот... позже скину :happy:

svs23 03-04-2015 08:54 2491261

вот список компонентов
Скрытый текст
Код:

[Components]
Name: a; Description: "spoter_mods";
Name: a\a; Description: "Потапыч (quests_extended)";
Name: a\a\a; Description: "Только основные условия"; Types: full; Flags: exclusive
Name: a\a\b; Description: "Основные и дополнительные условия"; Flags: exclusive
Name: a\b; Description: "Танкопыт (Vehicle-Exp_Extended)"; Types: full
Name: a\c; Description: "Экипаж (Crew_extended)";
Name: a\c\a; Description: "Экипаж (Crew_extended) настройки spoter"; Flags: exclusive
Name: a\c\b; Description: "Экипаж (Crew_extended) настройки svs"; Types: full; Flags: exclusive
Name: a\c\c; Description: "Экипаж (Crew_extended) настройки с чистыми ушами"; Flags: exclusive
Name: a\d; Description: "Винтик (repair_extended)";
Name: a\d\a; Description: "Стандарт (один для всех)"; Flags: exclusive
Name: a\d\b; Description: "С классовыми особенностими"; Types: full; Flags: exclusive
Name: a\i; Description: "Танки игрока в Ангарах (hangar_extended)    (доп. загрузка)"; ExtraDiskSpaceRequired: 94142899
Name: a\f; Description: "Индикатор (autoaim_extended)"; Types: full
Name: a\g; Description: "БроНЯНЯ (armoring_extended)"; Types: full
Name: a\j; Description: "Тылы (dirindicator_extended)"; Types: full
Name: a\k; Description: "Светлячок (spotted_extended)";
///PMOD///
Name: c; Description: "PMOD";
Name: c\a; Description: "Игровой чат в бою";
Name: c\a\a; Description: "Фильтр игрового чата";
Name: c\a\b; Description: "Информер результатов о завершенном бое в чат";
Name: c\b; Description: "Изменение поведения интерфейса в бою";
Name: c\b\a; Description: "Индикатора засвета (лампочка)";
Name: c\b\a\a; Description: "2сек"; Flags: exclusive
Name: c\b\a\b; Description: "4сек"; Flags: exclusive
Name: c\b\a\c; Description: "6сек"; Flags: exclusive
Name: c\b\b; Description: "Отображать УГН на всех типах техники";
Name: c\d; Description: "Информация об вашем респауне на экране загрузки";
Name: c\e; Description: "Настройки камеры во время боя";
Name: c\e\a; Description: "Отключить инерцию камеры";
Name: c\e\b; Description: "Отключить красную вспышку когда враг попадает по вам";
Name: c\e\c; Description: "Отключить тряску камеры когда враг попадает по вам";
Name: c\f; Description: "Постоянное стартовое значение кратности снайперского прицела";
Name: c\f\a; Description: "х2"; Flags: exclusive
Name: c\f\b; Description: "х4"; Flags: exclusive
Name: c\f\c; Description: "х6"; Flags: exclusive
Name: c\f\d; Description: "х10"; Flags: exclusive
Name: c\g; Description: "Фильтр сообщений в ангаре";
Name: c\h; Description: "Включить горизонтальную стабилизацию";
Name: c\i; Description: "Окно входа в игру";
Name: c\i\a; Description: "Автоматический вход при запуске игры";
Name: c\i\b; Description: "Запомининие последнего сервера";
Name: c\i\c; Description: "Отключение проигрывания стартового ролика";
Name: c\j; Description: "Отключение затемнения и озеленения в снайперском прицеле";
Name: c\k; Description: "Отключить покачивание прицела и камеры";
Name: c\l; Description: "Отмена смены режимов камеры по скроллу";
Name: c\m; Description: "Старый серверный прицел";
Name: c\m\a; Description: "Аркадный режим";
Name: c\m\b; Description: "Снайперский режим";
Name: c\m\c; Description: "Артилерийский режим";
Name: c\o; Description: "Сессионная статистика";
Name: c\o\a; Description: "За сутки"; Flags: exclusive
Name: c\o\b; Description: "За текущую сессию"; Flags: exclusive
Name: c\q; Description: "Отключить ручной тормоз на ПТ-САУ";
Name: c\r; Description: "Включить отдаление  камеры в бою (командирская камера)";
Name: c\s; Description: "Индикатор зума в прицеле";
Name: c\t; Description: "zoomX";
Name: c\t\a; Description: "х16"; Flags: exclusive
Name: c\t\b; Description: "х22"; Flags: exclusive
Name: c\t\c; Description: "х28"; Flags: exclusive
Name: c\t\d; Description: "х35 (не рекомендую)"; Flags: exclusive
Name: c\t\e; Description: "х45 (не рекомендую)"; Flags: exclusive
Name: c\t\f; Description: "х60 (не рекомендую)"; Flags: exclusive

[Files]
Source: "{#MyDir}\0.updete_svs\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: "{#MyDir}\0.pyc\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a or b or c;
///spoter///
Source: "{#MyDir}\1.quests_extended\Standart\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\a\a;
Source: "{#MyDir}\1.quests_extended\Hard\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\a\b;
Source: "{#MyDir}\2.Vehicle-Exp_Extended\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\b;
Source: "{#MyDir}\3.crew_extended\stok\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\c\a;
Source: "{#MyDir}\3.crew_extended\svs\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\c\b;
Source: "{#MyDir}\3.crew_extended\null\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\c\c;
Source: "{#MyDir}\4.repair_extended\Standart\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\d\a;
Source: "{#MyDir}\4.repair_extended\non_class\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\d\b;
Source: "{#MyDir}\6.autoaim_extended\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\f;
Source: "{#MyDir}\7.armoring_extended\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\g;
Source: "{#MyDir}\8.dirindicator_extended\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\j;
Source: "{#MyDir}\9.spotted_extended\*"; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a\k;
///PMOD///
Source: "{#MyDir}\12.pmod\battleChat\chat_filter\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\a\a and not c\a\b;
Source: "{#MyDir}\12.pmod\battleChat\Informer\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\a\b and not c\a\a;
Source: "{#MyDir}\12.pmod\battleChat\chat_filter+Informer\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\a\a and c\a\b;
Source: "{#MyDir}\12.pmod\battleGui\lamp_2\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\b\a\a and not c\b\b;
Source: "{#MyDir}\12.pmod\battleGui\lamp_4\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\b\a\b and not c\b\b;
Source: "{#MyDir}\12.pmod\battleGui\lamp_6\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\b\a\c and not c\b\b;
Source: "{#MyDir}\12.pmod\battleGui\lamp_2+traverse_angles\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\b\a\a and c\b\b;
Source: "{#MyDir}\12.pmod\battleGui\lamp_2+traverse_angles\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\b\b and not c\b\a\a and not c\b\a\b and not c\b\a\c;
Source: "{#MyDir}\12.pmod\battleGui\lamp_4+traverse_angles\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\b\a\b and c\b\b;
Source: "{#MyDir}\12.pmod\battleGui\lamp_6+traverse_angles\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\b\a\c and c\b\b;
Source: "{#MyDir}\12.pmod\battleLoading\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\d;
Source: "{#MyDir}\12.pmod\cameraOptions\inertia\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\e\a and not c\e\b and not c\e\c;
Source: "{#MyDir}\12.pmod\cameraOptions\Red_flash\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\e\b and not c\e\a and not c\e\c;
Source: "{#MyDir}\12.pmod\cameraOptions\Shake\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\e\c and not c\e\a and not c\e\b;
Source: "{#MyDir}\12.pmod\cameraOptions\inertia+Red_flash\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\e\a and c\e\b and not c\e\c;
Source: "{#MyDir}\12.pmod\cameraOptions\inertia+Shake\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\e\a and c\e\c and not c\e\b;
Source: "{#MyDir}\12.pmod\cameraOptions\inertia+Red_flash+Shake\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\e\a and c\e\b and c\e\c;
Source: "{#MyDir}\12.pmod\cameraOptions\Red_flash+Shake\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\e\b and c\e\c and not c\e\a;
Source: "{#MyDir}\12.pmod\defaultZoom\2\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\f\a;
Source: "{#MyDir}\12.pmod\defaultZoom\4\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\f\b;
Source: "{#MyDir}\12.pmod\defaultZoom\6\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\f\c;
Source: "{#MyDir}\12.pmod\defaultZoom\10\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\f\d;
Source: "{#MyDir}\12.pmod\hangar\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\g;
Source: "{#MyDir}\12.pmod\horizontalStabilizer\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\h;
Source: "{#MyDir}\12.pmod\loginWindow\autoLogin\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\i\a and not c\i\b and not c\i\c;
Source: "{#MyDir}\12.pmod\loginWindow\saveServer\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\i\b and not c\i\a and not c\i\c;
Source: "{#MyDir}\12.pmod\loginWindow\skipVideo\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\i\c and not c\i\a and not c\i\b;
Source: "{#MyDir}\12.pmod\loginWindow\autoLogin+saveServer\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\i\a and c\i\b and not c\i\c;
Source: "{#MyDir}\12.pmod\loginWindow\autoLogin+skipVideo\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\i\a and c\i\c and not c\i\b;
Source: "{#MyDir}\12.pmod\loginWindow\autoLogin+saveServer+skipVideo\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\i\b and c\i\c and not c\i\a;
Source: "{#MyDir}\12.pmod\loginWindow\saveServer+skipVideo\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\g;
Source: "{#MyDir}\12.pmod\noBinoculars\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\j;
Source: "{#MyDir}\12.pmod\noDynamic\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\k;
Source: "{#MyDir}\12.pmod\noScroll\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\l;
Source: "{#MyDir}\12.pmod\oldServerCrosshair\arcadeMode\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\m\a and not c\m\b and not c\m\c;
Source: "{#MyDir}\12.pmod\oldServerCrosshair\sniperMode\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\m\b and not c\m\a and not c\m\c;
Source: "{#MyDir}\12.pmod\oldServerCrosshair\strategicMode\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\m\c and not c\m\a and not c\m\b;
Source: "{#MyDir}\12.pmod\oldServerCrosshair\arcadeMode+sniperMode\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\m\a and c\m\b and not c\m\c;
Source: "{#MyDir}\12.pmod\oldServerCrosshair\arcadeMode+strategicMode\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\m\a and c\m\c and not c\m\b;
Source: "{#MyDir}\12.pmod\oldServerCrosshair\arcadeMode+sniperMode+strategicMode\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\m\a and c\m\b and c\m\c;
Source: "{#MyDir}\12.pmod\oldServerCrosshair\sniperMode+strategicMode\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\m\b and c\m\c and not c\m\a;
Source: "{#MyDir}\12.pmod\sessionStatistic\days\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\o\a;
Source: "{#MyDir}\12.pmod\sessionStatistic\Session\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\o\b;
Source: "{#MyDir}\12.pmod\TDBrakeRemover\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\q;
Source: "{#MyDir}\12.pmod\zoomDistance\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\r;
Source: "{#MyDir}\12.pmod\zoomIndicator\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\s;
Source: "{#MyDir}\12.pmod\zoomX\16\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\t\a;
Source: "{#MyDir}\12.pmod\zoomX\22\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\t\b;
Source: "{#MyDir}\12.pmod\zoomX\28\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\t\c;
Source: "{#MyDir}\12.pmod\zoomX\35\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\t\d;
Source: "{#MyDir}\12.pmod\zoomX\45\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\t\e;
Source: "{#MyDir}\12.pmod\zoomX\60\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c\t\f;
///PMOD_stok///
Source: "{#MyDir}\12.pmod\_stok\PMOD.json"; DestDir: "{#mods}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c;
Source: "{#MyDir}\12.pmod\_stok\PMOD.pyc"; DestDir: "{#mods}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c;
Source: "{#MyDir}\12.pmod\gun_marker\*"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c;
Source: "{#MyDir}\12.pmod\_stok\PMOD\battleChat.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\a;
Source: "{#MyDir}\12.pmod\_stok\PMOD\battleGui.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\b;
Source: "{#MyDir}\12.pmod\_stok\PMOD\battleLoading.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\d;
Source: "{#MyDir}\12.pmod\_stok\PMOD\cameraOptions.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\e;
Source: "{#MyDir}\12.pmod\_stok\PMOD\defaultZoom.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\f;
Source: "{#MyDir}\12.pmod\_stok\PMOD\hangar.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\g;
Source: "{#MyDir}\12.pmod\_stok\PMOD\horizontalStabilizer.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\h;
Source: "{#MyDir}\12.pmod\_stok\PMOD\loginWindow.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\i;
Source: "{#MyDir}\12.pmod\_stok\PMOD\noBinoculars.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\j;
Source: "{#MyDir}\12.pmod\_stok\PMOD\noDynamic.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\k;
Source: "{#MyDir}\12.pmod\_stok\PMOD\noScroll.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\l;
Source: "{#MyDir}\12.pmod\_stok\PMOD\oldServerCrosshair.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\m;
Source: "{#MyDir}\12.pmod\_stok\PMOD\sessionStatistic.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\o;
Source: "{#MyDir}\12.pmod\_stok\PMOD\TDBrakeRemover.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\q;
Source: "{#MyDir}\12.pmod\_stok\PMOD\zoomDistance.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\r;
Source: "{#MyDir}\12.pmod\_stok\PMOD\zoomIndicator.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\s;
Source: "{#MyDir}\12.pmod\_stok\PMOD\zoomX.json"; DestDir: "{#mods}\PMOD"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs; Components: c and not c\t;


R.i.m.s.k.y. 03-04-2015 09:40 2491276

svs23, с отображает размер, а - не отображает? кмк это багофича инно, из-за вложенных логических проверок вида Components: c\m\b and c\m\c and not c\m\a; его переколбашивает и инно не может подсчитать размер

svs23 03-04-2015 10:19 2491293

Цитата:

Цитата Dodakaedr
Если CreateUninstallRegKey=no или Uninstallable=no то да! »

спс... все запоминает...

Цитата:

Цитата R.i.m.s.k.y.
с отображает размер, а - не отображает »

пипец... появились везде.......
мозГ щА рваНет ;)
там где их не было появились, но пропали на 2-х других...

R.i.m.s.k.y. 03-04-2015 10:25 2491297

svs23, положи полностью папку

svs23 03-04-2015 10:33 2491301

Цитата:

Цитата R.i.m.s.k.y.
svs23, положи полностью папку »

нет размеров на
Код:

Name: a\a; Description: "Потапыч (quests_extended)";
Name: a\c; Description: "Экипаж (Crew_extended)";


R.i.m.s.k.y. 03-04-2015 10:38 2491305

svs23, не вижу в секции Files чистого Components: a\a и Components: a\с
есть на подкомпоненты
нет привязанных файлов - нет размера

svs23 03-04-2015 10:41 2491306

Цитата:

Цитата R.i.m.s.k.y.
svs23, не вижу в секции Files чистого Components: a\a и Components: a\с
есть на подкомпоненты
нет привязанных файлов - нет размера »

так в компонентах и на
Name: a\d; Description: "Винтик (repair_extended)";
нет привязки, а размер в окне компонентов есть

R.i.m.s.k.y. 03-04-2015 10:42 2491307

svs23, ну я хз

svs23 03-04-2015 10:43 2491308

блин увидел что размер появляется при выборе компонентов...
раньше не замечал, т.к. они у меня были всегда выбраны

Цитата:

Цитата R.i.m.s.k.y.
svs23, ну я хз »

все норм, все понял как он их показывает
спс

R.i.m.s.k.y. 03-04-2015 10:45 2491311

Цитата:

Цитата svs23
блин увидел что размер появляется при выборе компонентов... »

ААААААААААААААААААААААААААА!!11

Dodakaedr 03-04-2015 18:36 2491474

Как сохранить бэкап ключа реестра в реестре?

Okta_333 03-04-2015 18:50 2491476

Как сделать кликабельный логотип в PNG со ссылкой на сайт?

ispolin 04-04-2015 14:22 2491708

Возможно силами Inno реализовать такое?
есть 10 файлов, после установки 9ого требуется перезагрузка и затем продолжение установки 10ого
соответственно после установки 9ого должно выйти окно с сообщением "Сейчас будет произведена перезагрузка. Затем установка программы продолжится." и две кнопки "Перезагрузка" и "Отмена"
естественно первая кнопка произведёт перезагрузку, а вторая отменит перезагрузку, но во втором случае должно выйти сообщение "Вы отменили перезагрузку. Программа не будет установлена полностью"

Dodakaedr 07-04-2015 16:59 2492759

Как в зависимости от ОС показывать\скрывать элемент? В данном случаи чекбокс:
Скрытый текст
Код:

[Setup]
appname=app
appversion=1.0
DefaultDirName={pf}\app

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
    VER_PLATFORM_WIN32_NT = 2;
type
    _OSVERSIONINFOEX = record
        dwOSVersionInfoSize: DWORD;
        dwMajorVersion: DWORD;
        dwMinorVersion: DWORD;
        dwPlatformId: DWORD;
        wServicePackMajor: WORD;
      end;

var
Taskbar: TCheckBox;

function GetVersionEx( var lpVersionInformation: _OSVERSIONINFOEX ): BOOL; external 'GetVersionEx{#A}@kernel32.dll stdcall';

function IsWindowsXp( ): Boolean;
var
    osviEx: _OSVERSIONINFOEX;
begin
    osviEx.dwOSVersionInfoSize := SizeOf( osviEx );

    if ( not GetVersionEx( osviEx ) ) then
      Exit;

    Result := ( ( osviEx.dwPlatformId = VER_PLATFORM_WIN32_NT ) and
                ( osviEx.dwMajorVersion = 5 ) and
                ( osviEx.dwMinorVersion = 1 ) and
                ( osviEx.wServicePackMajor = 3 ) );
end;

procedure TaskbarCreate();
begin
    Taskbar := nil;

    if not IsWindowsXp then
      begin
          Taskbar := TCheckBox.Create(nil);
          with Taskbar do
          begin
              Parent := WizardForm.WelcomePage;
              SetBounds(ScaleX(185), ScaleY(251), ScaleX(104), ScaleY(15));
              Caption := 'Раздача';
             
          end;
      end;
end;

procedure InitializeWizard();
begin
  TaskbarCreate;
end;



Задача: не показывать чекбокс если оперативная система XP.

El Sanchez 08-04-2015 09:25 2493079

Цитата:

Цитата Dodakaedr
Задача: не показывать чекбокс если оперативная система XP. »

Dodakaedr,
Код:

var
   
Taskbar: TCheckBox;

procedure TaskbarCreate;
begin
   
Taskbar := TCheckBox.Create(WizardForm);
    with Taskbar do
    begin
       
Parent := WizardForm.WelcomePage;
        SetBounds(ScaleX(185), ScaleY(251), ScaleX(104), ScaleY(15));
        Caption := 'Раздача';
        Visible := (GetWindowsVersion > $06000000);
    end;
end;

///////////////////////////
procedure InitializeWizard;
begin
   
TaskbarCreate;
end;


AlekseyPopovv 08-04-2015 19:09 2493310

Как скрыть окошко в конце деинсталляции: "UninstalledAll=Программа %1 была полностью удалена с вашего компьютера."?
И ещё: вот так вот удаляется папка "DelTree(ExpandConstant('{localappdata}\Temp\CacheProgram'), True, True, True);"
а так нет "DelTree(ExpandConstant('{tmp}\CacheProgram'), True, True, True);". Почему не понятно!

Dodakaedr 08-04-2015 20:03 2493328

Цитата:

Цитата AlekseyPopovv
Как скрыть окошко в конце деинсталляции »

Скрытый текст
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DisableFinishedPage=yes
OutputDir=.

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

[Code]
function InitializeUninstall:boolean;
var
  rcode: Integer;
begin
  Result:= False;
if not UninstallSilent then
begin
  Exec(ExpandConstant('{uninstallexe}'), '/SILENT', '', SW_SHOW, ewNoWait, RCode);
  Exit;
end;
if MsgBox('удалить программу?', mbConfirmation, MB_YESNO) = IDYES then
begin
  Result := True;
end;
if not UninstallSilent then
begin
  Exec(ExpandConstant('{uninstallexe}'), '/SILENT', '', SW_SHOW, ewNoWait, RCode);
  Exit;
end;
end;



Цитата:

Цитата AlekseyPopovv
Почему не понятно! »

Потому что {localappdata}\Temp\CacheProgram это C:\Users\Admin\AppData\Local\Temp\CacheProgram, а {tmp}\CacheProgram:
Цитата:

{tmp}
Временная папка. Это не значение переменной среды TEMP пользователя. Это папка, где создаются временные файлы инсталлятора ("C:\WINDOWS\TEMP\IS-xxxxx.tmp"). Все файлы и папки удаляются из папки Temp после завершения установки приложения. Эта константа используется в случае, если в секции [Run] указаны файлы, необходимые при инсталляции, но не нужные для дальнейшей работы приложения.

AlekseyPopovv 08-04-2015 22:50 2493403

В системе имеется файл "Config.ini" с таким содержимым:
[General]
Language=Russian
Как мне в эту секцию дописать:
Key=123
и сохранить файл в таком виде:
[General]
Language=Russian
Key=123
Пробовал так, но результат не тот:
if FileExists(ExpandConstant('{win}\Config.ini')) then
SetIniString('Gereral', 'Key', '123', ExpandConstant('{win}\Config.ini'));
Получается:
[General]
Language=Russian

[General]
Key=123
Помогите.

Dodakaedr 08-04-2015 22:59 2493407

Цитата:

Цитата AlekseyPopovv
В системе имеется файл "Config.ini" с таким содержимым:
[General] »

В файле General а вы пишите SetIniString('Gereral', 'Key', '123', ExpandConstant('{win}\Config.ini')); вот и не стыковка.

AlekseyPopovv 08-04-2015 23:12 2493410

Исправил, но всё равно создаёт вторую такую же секцию. Я где то раньше видел пример, теперь не могу найти.

Dodakaedr 08-04-2015 23:18 2493411

Цитата:

Цитата AlekseyPopovv
Исправил, но всё равно создаёт вторую такую же секцию »

Скопируйте слово General с файла и вставьте в скрипт, потому что все работает.
Файл Config.ini
Положите файл Config.ini радом с исталлом
Цитата:

[General]
Language=Russian

Инсталл
Код:

[Setup]
appname=appppp
AppVersion=1.0
DefaultDirName={pf}\appppp
OutputDir=.

[code]
procedure InitializeWizard();
begin
if FileExists(ExpandConstant('{src}\Config.ini')) then
SetIniString('General', 'Key', '123', ExpandConstant('{src}\Config.ini'));
end;


AlekseyPopovv 08-04-2015 23:23 2493413

Попробовал. Создал новый другой файл .ini всё сработало, а у того файла видать особенность такая!
Добавил другие параметры, он их удалил сам. Короче файл шифрованный.

Dodakaedr 08-04-2015 23:30 2493414

Цитата:

Цитата AlekseyPopovv
Короче файл шифрованный. »

Скиньте его посмотрим что за файл такой. Возможно на нем атрибут стоить только чтение.

AlekseyPopovv 08-04-2015 23:40 2493417

Вложений: 1
Я так думаю он к программе привязан, с реестром тоже самое.
Вот:

vint56 09-04-2015 00:14 2493435

AlekseyPopovv, а так попробуй
Код:

var
 s: String;

procedure CurStepChanged(CurStep: TSetupStep);
begin
 s:= + 'General' + #13#10 + 'Language = Russian' + #13#10 + 'General'+ #13#10 +'Key = 123 ' +  #13#10;
  case CurStep of
  ssPostInstall: SaveStringToFile(ExpandConstant('{win}\Config.ini'), s, False);
  end;
end;


Dodakaedr 09-04-2015 00:28 2493445

vint56, s0 для чего? Он вроде не используется...

vint56 09-04-2015 00:36 2493446

Dodakaedr, я правил свой пример не все убрал

AlekseyPopovv 09-04-2015 01:00 2493453

Так заработало, только всё что там было перезаписалось. Надо как то дописать, там всего одна секция, других нет. Нужно просто в конце файла дописать Language=Russian
Вместо False ставим True и всё дописывает! Ура!

AlekseyPopovv 09-04-2015 11:33 2493594

Dodakaedr, vint56, спасибо за помощь, с другими файлами всё работает.

dracosha 09-04-2015 18:42 2493783

AlekseyPopovv, Леш ну вот зачем флудить? Тебе несколько человек старались помочь. Неужели так сложно нажать на Полезное сообщение?

AlekseyPopovv 09-04-2015 20:32 2493823

dracosha, Я редактировал своё сообщение, которое уже было не актуальным. А теперь по делу.
Я создал новую страницу "CreateCustomPage", как сделать что бы она отображалась только при выборе "Portable" версии?

kotyarko@fb 09-04-2015 20:43 2493836

Цитата:

Цитата AlekseyPopovv
Я создал новую страницу "CreateCustomPage", как сделать что бы она отображалась только при выборе "Portable" версии? »

Например:
Код:

...
 if Portable.Checked then
 begin
  Page := CreateCustomPage....
  ...
 end;

А вот откуда это выполнять зависит от того, где предоставляется выбор Portable-версии.

AlekseyPopovv 09-04-2015 20:49 2493839

kotyarko@fb, То есть где предоставляется выбор Portable-версии?
Эти функции выше
function InstallerCheck: Boolean;
begin
Result := Installer.Checked;
end;
function PortableCheck: Boolean;
begin
Result := Portable.Checked;
end;
Как мне быть?
Понял, да эта страница после выбора портабле...

kotyarko@fb 09-04-2015 20:56 2493845

Цитата:

Цитата AlekseyPopovv
То есть где предоставляется выбор Portable-версии? »

(когда\на каком этапе\на какой странице) установки пользователю предоставляется выбор версии?

AlekseyPopovv 09-04-2015 21:00 2493847

kotyarko@fb, Понял, да эта страница после выбора портабле и инсталер. Скрипт собирается, но инсталлятор выдаёт ошибку и не запускается.

kotyarko@fb 09-04-2015 21:05 2493852

Цитата:

Цитата AlekseyPopovv
Понял, да эта страница после выбора портабле и инсталер. »

Перечитайте внимательнее мой вопрос выше. Где находятся эти чекбоксы с версиями, при запуске или на одной из страниц установщика? - В первом случае можно использовать InitializeWizard, во втором - CurPageChanged.

AlekseyPopovv 09-04-2015 21:10 2493857

kotyarko@fb, На одной из страниц установщика. Щас попробую через CurPageChanged. Кто мне про неё говорил, но тогда я не понял этого.

kotyarko@fb, Не могу допетрить и всё...

Dodakaedr 09-04-2015 21:57 2493875

Цитата:

Цитата AlekseyPopovv
Я создал новую страницу "CreateCustomPage", как сделать что бы она отображалась только при выборе "Portable" версии? »

Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
AkkPage: TWizardPage;
portbtn: TNewCheckbox;

procedure InitializeWizard();
begin
 AkkPage := CreateCustomPage(wpWelcome, 'PortablePage_Caption', 'PortablePage_Description');

 portbtn := TNewCheckBox.Create(WizardForm);
 portbtn.Parent := WizardForm.WelcomePage;
 portbtn.Caption := 'Portable';
 portbtn.SetBounds(ScaleX(180), ScaleY(280), ScaleX(80), ScaleY(23));
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID = AkkPage.id) then Result := not portbtn.Checked;
end;


AlekseyPopovv 09-04-2015 22:13 2493886

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = AkkPage.id) then Result := not portbtn.Checked;
end;
В этом вся проблема была, этого не хватало.

Я создал TRichEditViewer. Как к нему прикрутить файл .rtf?

Dodakaedr 09-04-2015 23:11 2493905

Цитата:

Цитата AlekseyPopovv
Я создал TRichEditViewer. Как к нему прикрутить файл .rtf? »

Скрытый текст
Код:

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: ReadMe.rtf; Flags: dontcopy

[Code]
var
  Page: TWizardPage;
  RichEditViewer: TRichEditViewer;
  Readme: ansistring;

procedure InitializeWizard();
begin
Page := CreateCustomPage(wpWelcome, 'Information', 'Please read the following important information before continuing.');

RichEditViewer := TRichEditViewer.Create(Page.Surface);
with RichEditViewer do
begin
  ExtractTemporaryFile('ReadMe.rtf');
  LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMe.rtf', Readme);
  SetBounds(ScaleX(12),ScaleY(12),ScaleX(400),ScaleY(222));
  Parent := Page.Surface;
  Font.Size := 8;
  RTFText:= Readme;
  ReadOnly := True;
  ScrollBars := ssVertical;
end;
end;


nik1967 09-04-2015 23:33 2493910

AlekseyPopovv,
Скрытый текст
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
InfoBeforeFile=ReadMeRu.rtf

[Languages]
Name: ENG; MessagesFile: "compiler:Default.isl"
Name: RUS; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: ReadMeRu.rtf; Flags: dontcopy
Source: ReadMeEn.rtf; Flags: dontcopy

[Code]
var
  InfoBefore: TRichEditViewer;
  ReadmeRu,ReadmeEn: AnsiString;
       
procedure InitializeWizard();                     
begin
  ExtractTemporaryFile('ReadMeRu.rtf');
  LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeRu.rtf', ReadmeRu);
  ExtractTemporaryFile('ReadMeEn.rtf');
  LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeEn.rtf', ReadmeEn);
       
  InfoBefore:= TRichEditViewer.Create(WizardForm);
  with InfoBefore do begin
    SetBounds(ScaleX(0),ScaleY(24),ScaleX(417),ScaleY(205));
    Parent:= WizardForm.InfoBeforePage;
    ParentColor:= True;
    Color:= WizardForm.Color;
    BorderStyle:= bsNone;
    ScrollBars:= ssVertical;
    ReadOnly:= true;
               
    if ActiveLanguage='RUS' then
      RTFText:= ReadmeRu
    else
    if ActiveLanguage='ENG' then
      RTFText:= ReadmeEn;
    end;
end;


Это на стандартной инновской странице InfoBefore. И с выбором языка.

AlekseyPopovv 11-04-2015 05:16 2494389

У меня на странице 2 "CheckBox'a". Первый - копирует файл в папку, второй - этот файл запускает. По умолчанию оба "Checked:=True;". Как сделать так, что бы если галочку снять с первого, второй был не активен?

Код:

NewDel := TNewGroupBox.Create(WizardForm);
  with NewDel do
  begin
    Parent := NewForPortablePage.Surface;
    Caption := 'Дополнительно:';
    Left := ScaleX(0);
    Top := ScaleY(195);
    Width := ScaleX(417);
    Height := ScaleY(40);
  end;

  StartNewDel := TNewCheckBox.Create(WizardForm);
  with StartNewDel do
  begin
    Parent := NewForPortablePage.Surface;
    Left := ScaleX(5);
    Top := ScaleY(210);
    Width := ScaleX(174);
    Height := ScaleY(17);
    Caption := 'Распаковать My Prog';
    Checked:=True;
  end;

  PuskNewDel := TNewCheckBox.Create(WizardForm);
  with PuskNewDel do
  begin
    Parent := NewForPortablePage.Surface;
    Left := ScaleX(225);
    Top := ScaleY(210);
    Width := ScaleX(174);
    Height := ScaleY(17);
    Caption := 'Запустить My Prog';
    Checked:=True;
  end;
 end;
end;


kotyarko@fb 11-04-2015 13:09 2494486

Цитата:

Цитата AlekseyPopovv
Как сделать так, что бы если галочку снять с первого, второй был не активен? »

Так:
Код:

Var
 NewDel: TNewGroupBox;
 StartNewDel, PuskNewDel: TNewCheckBox;
 
Procedure EnableWhenChecked(Sender: TObject);
begin
 case StartNewDel.Checked of
 False:
  begin
  PuskNewDel.Checked := False;
  PuskNewDel.Enabled := False;
  end;
 True:
  begin
  PuskNewDel.Enabled := True;
  PuskNewDel.Checked := True;
  end;
 end;
end;

Procedure InitializeWizard();
begin
  NewDel := TNewGroupBox.Create(WizardForm);
  with NewDel do
  begin
    Parent := WizardForm;
    Caption := 'Дополнительно:';
    Left := ScaleX(0);
    Top := ScaleY(195);
    Width := ScaleX(417);
    Height := ScaleY(40);
  end;

  StartNewDel := TNewCheckBox.Create(WizardForm);
  with StartNewDel do
  begin
    Parent := WizardForm;
    Left := ScaleX(5);
    Top := ScaleY(210);
    Width := ScaleX(174);
    Height := ScaleY(17);
    Caption := 'Распаковать My Prog';
    Checked:=True;
    OnClick := @EnableWhenChecked;
  end;

  PuskNewDel := TNewCheckBox.Create(WizardForm);
  with PuskNewDel do
  begin
    Parent := WizardForm;
    Left := ScaleX(225);
    Top := ScaleY(210);
    Width := ScaleX(174);
    Height := ScaleY(17);
    Caption := 'Запустить My Prog';
    Checked:=True;
  end;
end;


NewMix 12-04-2015 16:42 2494873

Здравствуйте. Делаю модпак для танков и столкнулся с такой проблемой. В общем прописываю путь из реестра в скрипт мол чтобы определить установлена ли игра или нет, проверить версию патча и т.д но он не может найти игру. В чем проблема? Вот часть скрипта и скрин. Сразу говорю что использовал исходник от какого то мода для сталкера где была вбита проверка на игру и версию патча.



PHP код:

//Ищем в реестре место расположения игры
function GetAppDir(PathString): String;
begin
  
if RegKeyExists(HKEY_LOCAL_MACHINE'Software\Wargaming.net\wot'then begin
    RegQueryStringValue
(HKEY_LOCAL_MACHINE'Software\Wargaming.net\wot''InstallPath'Path);
    
Result := Path end else
  
Result := ExpandConstant('{pf}\Software\Wargaming.net\wot')
end;

//Выполняем проверку системы на соответсвтвие моду
procedure CheckRequirements(CurPageIDInteger);
var
  
PathVersString;
begin
  
if CurPageID=SystemPage.ID then
  begin
    
//Ищем папку с игрой
    
if RegValueExists(HKLM'Software\Wargaming.net\wot''InstallPath'then
    begin
      RegQueryStringValue
(HKLM'Software\Wargaming.net\wot''InstallPath'Path)
      
GamePathFindMemo.Caption := ExpandConstant('{cm:GameDetected}');
    
end else
    
begin
      GamePathFindMemo
.Caption := ExpandConstant('{cm:GameNotDetected}');
      
GamePathFindMemo.Color := clRed;
      
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
    
end;

    
//Ищем и проверяем версию игры
    
if RegValueExists(HKLM'Software\Wargaming.net\wot''InstallVers'then
    begin
      RegQueryStringValue
(HKLM'Software\Wargaming.net\wot''InstallVers'Vers)
      if 
Vers ExpandConstant('{#NeedVers}'then
        GameVersFindMemo
.Caption := ExpandConstant('{cm:GameVersDetected} ') + Vers
      
else begin
        GameVersFindMemo
.Caption := ExpandConstant('{cm:GameVers} ') + Vers ExpandConstant(' {cm:GameVersNotSatisfy}');
        
GameVersFindMemo.Color := clRed;
        
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
      
end
    end 
else
    
begin
      GameVersFindMemo
.Caption := ExpandConstant('{cm:GameVersNotDetected}');
      
GameVersFindMemo.Color := clRed;
      
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
    
end;

    
//Ищем наличие модов в папке с игрой
    
if RegValueExists(HKLM'Software\Wargaming.net\wot''InstallPath'then
    begin
      
if DirExists(Path+'\res_mods\0.9.6'then
      begin
        GameModFindMemo
.Caption := ExpandConstant('{cm:ModDetected}');
        
GameModFindMemo.Color := clRed;
        
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
        
RenameCheckBox.Show;
      
end else
        
GameModFindMemo.Caption := ExpandConstant('{cm:ModNotDetected}');
      
end else
    
begin
      GameModFindMemo
.Caption := ExpandConstant('{cm:GameNotDetected}');
      
GameModFindMemo.Color := clRed;
      
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
    
end;
  
end;
end


kotyarko@fb 12-04-2015 18:13 2494887

NewMix, а что, пользователю не предоставляется возможность вручную выбрать папку с игрой? - Это неправильно. Бывают ситуации, когда в реестре нет следов от игры, а она есть.

Цитата:

Цитата NewMix
HKEY_LOCAL_MACHINE »

Текущий установщик заносит ветку игры в HKEY_CURRENT_USER. Поэтому лучше скомбинировать.

NewMix 12-04-2015 19:08 2494901

Цитата:

Цитата kotyarko@fb
NewMix, а что, пользователю не предоставляется возможность вручную выбрать папку с игрой? - Это неправильно. Бывают ситуации, когда в реестре нет следов от игры, а она есть.
Цитата NewMix:
HKEY_LOCAL_MACHINE »
Текущий установщик заносит ветку игры в HKEY_CURRENT_USER. Поэтому лучше скомбинировать. »

а если не трудно можешь кинуть исправленный код ибо я уже не догоняю что и как делать. Но запасная проверка на исполнительный файл есть позже при выборе места установки.

NewMix 13-04-2015 13:15 2495074

Сделал все как в этом уроке и вылетает такая ошибка, в чем проблема?


kotyarko@fb 13-04-2015 13:23 2495082

Цитата:

Цитата NewMix
в чем проблема? »

Нужна расширенная версия компилятора.

NewMix 13-04-2015 13:37 2495088

Цитата:

Цитата kotyarko@fb
Нужна расширенная версия компилятора. »

так у меня и так стоит inno setup plus

dracosha 13-04-2015 21:07 2495308

NewMix, а что за сборка такая inno setup plus? Гугл тоже не в курсе про такую сборку :)
Рекомендую установить полную версию сборки InnoSetup Ultra

R.i.m.s.k.y. 14-04-2015 12:23 2495518

dracosha, а автору можно отписать? а то вместо инно ультра качается какая-то заглушка

dracosha 14-04-2015 13:59 2495557

R.i.m.s.k.y. отписал.
Залил полную версию InnoUltra на drive.google.com и ссылку выше временно изменил.

NewMix 14-04-2015 15:45 2495630

А такой еще вопрос, как изменить размер инсталятора?

NewMix 14-04-2015 19:42 2495729

Теперь сделал и вроде все правильно но один фиг вылетает теперь другая ошибка. Работаю на расширенной версии.


kotyarko@fb 14-04-2015 19:52 2495734

Цитата:

Цитата NewMix
вылетает теперь другая ошибка »

Не "Files\images\damage1.bmp", а "damage1.bmp", при условии, что в секции [Files] всё правильно записано.

NewMix 14-04-2015 20:41 2495761

Цитата:

Цитата kotyarko@fb
Не "Files\images\damage1.bmp", а "damage1.bmp", при условии, что в секции [Files] всё правильно записано. »

Спасибо помогло, только она полупрозрачная. Не подскажите как убрать эту прозрачность?

p.s я новичок и извиняюсь если задаю глупые вопросы

NewMix 14-04-2015 21:01 2495771

Все нашел где прозрачность изменять. Данная строка отвечает за прозрачность
PHP код:

GWL_EXSTYLE = (-20); 


kotyarko@fb 14-04-2015 21:56 2495796

Цитата:

Цитата NewMix
GWL_EXSTYLE = (-20); »

Нет, эта:
Код:

ALPHA_BLEND_LEVEL

MaximilianoPozo 15-04-2015 13:49 2496103

Почему не переносит файл?
[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
FileCopy(ExpandConstant('{app}\{#MyAppName}\backup\paths.xml'), ExpandConstant('{app}\paths.xml'),false);
DelTree(ExpandConstant('{app}\{#MyAppName}'), True, True, True);
ForceDirectories(ExpandConstant('{app}\res_mods\{#Patch}'));
end;
end;

Dodakaedr 15-04-2015 13:54 2496107

Цитата:

Цитата MaximilianoPozo
Почему не переносит файл? »

Может так?
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
FileCopy(ExpandConstant('{app}\backup\paths.xml'), ExpandConstant('{app}\paths.xml'),false);
DelTree(ExpandConstant('{app}\backup'), True, True, True);
ForceDirectories(ExpandConstant('{app}\res_mods\{#Patch}'));
end;
end;


MaximilianoPozo 15-04-2015 14:00 2496112

Цитата:

Цитата Dodakaedr
Может так?
Код:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
FileCopy(ExpandConstant('{app}\backup\paths.xml'), ExpandConstant('{app}\paths.xml'),false);
DelTree(ExpandConstant('{app}\backup'), True, True, True);
ForceDirectories(ExpandConstant('{app}\res_mods\{#Patch}'));
end;
end; »

нет, app это папка с игрой, а в этой папке создается папка инсталлятора

Dodakaedr 15-04-2015 14:31 2496128

Цитата:

Цитата MaximilianoPozo
нет, app это папка с игрой, а в этой папке создается папка инсталлятора »

Без скрипта можно до Нового года угадывать как Вам нужно, поэтому вот Вам пример:
Код:

[Setup]
appname=app
AppVersion=1.0
DefaultDirName={pf}\app

[Files]
Source: 1.txt; DestDir: {app}; AfterInstall: backup;

[Code]
procedure backup;
begin
  CreateDir(ExpandConstant('{app}\backup'));
  //FileCopy(ExpandConstant('{app}\1.txt'), ExpandConstant('{app}\backup\1.txt'), false);
  RenameFile(ExpandConstant('{app}\1.txt'), ExpandConstant('{app}\backup\1.txt'));
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
FileCopy(ExpandConstant('{app}\backup\1.txt'), ExpandConstant('{app}\1.txt'),false);
DelTree(ExpandConstant('{app}\backup'), True, True, True);
end;
end;


MaximilianoPozo 15-04-2015 15:07 2496149

Цитата:

Цитата Dodakaedr
Без скрипта можно до Нового года угадывать как Вам нужно, поэтому вот Вам пример: »

Спасибо

svs23 15-04-2015 21:30 2496351

возможно сделать несколько страниц выбора компонентов? при этом с сохранением Components: в [Files], т.е. без Check: как в этом примере
Скрытый текст
[code][Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа
DirExistsWarning=no
AppendDefaultDirName=no

[CustomMessages]
CompName1=Компонент 1
CompName2=Компонент 2
CompSubtitlesLng=Язык субтитров
CompVoiceLng=Язык озвучки
CompRussian=Русский
CompEnglish=Английский

[Components]
Name: comp1; Description: "{cm:CompName1}";
Name: comp2; Description: "{cm:CompName2}";
Name: comp3; Description: "{cm:CompName1}";
Name: comp4; Description: "{cm:CompName2}";
Name: comp5; Description: "{cm:CompName1}";
Name: comp6; Description: "{cm:CompName2}";

[Files]
//===========================ПЕРВАЯ СТРАНИЦА ПОСЛЕ КОМПОНЕНТОВ================================\\
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponentsForm1(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponentsForm1(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponentsForm1(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponentsForm1(5)
//===========================ВТОРАЯ СТРАНИЦА ПОСЛЕ КОМПОНЕНТОВ================================\\
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponentsForm2(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponentsForm2(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponentsForm2(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponentsForm2(5)
//===========================ТРЕТЬЯ СТРАНИЦА ПОСЛЕ КОМПОНЕНТОВ================================\\
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponentsForm3(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponentsForm3(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponentsForm3(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponentsForm3(5)

Код:

var
  ComponentsPage1,ComponentsPage2,ComponentsPage3: TWizardPage;
  SelectComponentsLabel1,SelectComponentsLabel2,SelectComponentsLabel3: TNewStaticText;
  ComponentsList1,ComponentsList2,ComponentsList3: TNewCheckListBox;

procedure ComponentsForm1;
begin
  ComponentsPage1 := CreateCustomPage(wpSelectComponents, 'ПЕРВАЯ СТРАНИЦА ПОСЛЕ КОМПОНЕНТОВ', SetupMessage(msgSelectComponentsDesc));
//========================================================================\\
  SelectComponentsLabel1 := TNewStaticText.Create(WizardForm);
  with SelectComponentsLabel1 do
  begin
    Parent := ComponentsPage1.Surface;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(42));
    AutoSize := False;
    WordWrap := True;
    Caption := SetupMessage(msgSelectComponentsLabel2);
  end;
//========================================================================\\
  ComponentsList1 := TNewCheckListBox.Create(WizardForm);
  with ComponentsList1 do
  begin
    Parent := ComponentsPage1.Surface;
    SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
    AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);  //0
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);                //1
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);              //2
    AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);      //3
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);                //4
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);              //5
  end;
end;
procedure ComponentsForm2;
begin
  ComponentsPage2 := CreateCustomPage(ComponentsPage1.ID, 'ВТОРАЯ СТРАНИЦА ПОСЛЕ КОМПОНЕНТОВ', SetupMessage(msgSelectComponentsDesc));
//========================================================================\\
  SelectComponentsLabel2 := TNewStaticText.Create(WizardForm);
  with SelectComponentsLabel2 do
  begin
    Parent := ComponentsPage2.Surface;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(42));
    AutoSize := False;
    WordWrap := True;
    Caption := SetupMessage(msgSelectComponentsLabel2);
  end;
//========================================================================\\
  ComponentsList2 := TNewCheckListBox.Create(WizardForm);
  with ComponentsList2 do
  begin
    Parent := ComponentsPage2.Surface;
    SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
    AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);  //0
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);                //1
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);              //2
    AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);      //3
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);                //4
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);              //5
  end;
end;

procedure ComponentsForm3;
begin
  ComponentsPage3 := CreateCustomPage(ComponentsPage2.ID, 'ТРЕТЬЯ СТРАНИЦА ПОСЛЕ КОМПОНЕНТОВ', SetupMessage(msgSelectComponentsDesc));
//========================================================================\\
  SelectComponentsLabel3 := TNewStaticText.Create(WizardForm);
  with SelectComponentsLabel3 do
  begin
    Parent := ComponentsPage3.Surface;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(42));
    AutoSize := False;
    WordWrap := True;
    Caption := SetupMessage(msgSelectComponentsLabel2);
  end;
//========================================================================\\
  ComponentsList3 := TNewCheckListBox.Create(WizardForm);
  with ComponentsList3 do
  begin
    Parent := ComponentsPage3.Surface;
    SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
    AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);  //0
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);                //1
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);              //2
    AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);      //3
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);                //4
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);              //5
  end;
end;

function IsComponentsForm1(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList1.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList1.ItemCount - 1) then
      Result := ComponentsList1.Checked[CompIndex];
  end;
end;
//========================================================================\\
function IsComponentsForm2(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList2.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList2.ItemCount - 1) then
      Result := ComponentsList2.Checked[CompIndex];
  end;
end;
//========================================================================\\
function IsComponentsForm3(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList3.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList3.ItemCount - 1) then
      Result := ComponentsList3.Checked[CompIndex];
  end;
end;

procedure InitializeWizard();
begin
  ComponentsForm1;
  ComponentsForm2;
  ComponentsForm3;
end;


это вариант для меня сложноват...

Okta_333 15-04-2015 21:43 2496353

Подскажите пожалуйста, как в FreeArc правильно прописать вот такой алгоритм?
arc.exe a -ep1 -dses --dirs -s; -lc- -di -i2 -r -mmsc:f:raw=1:bmf=9s:ddsraw=1:bmp=1:mp3=2:lzma,bt4,fb128,mc10000,lc8+precomp+srep:l128+lzma:a1:mfbt4: d200m:fb128:mc100:lc8

Dodakaedr 15-04-2015 21:47 2496354

Цитата:

Цитата svs23
возможно сделать несколько страниц выбора компонентов? при этом с сохранением Components: в [Files], т.е. без Check: как в этом примере »

Нет, так как вторая страница кастомная, и на нее идет отдельная проверка.

svs23 15-04-2015 21:50 2496356

Цитата:

Цитата Dodakaedr
Нет, так как вторая страница кастомная, и на нее идет отдельная проверка. »

печалька...

svs23 16-04-2015 22:30 2496832

вопрос: есть стандартная форма компонентов wpSelectComponents и костомная ComponentsPage1
проверка на выбор хотя бы одного компонента
Код:

if CurPageID = ComponentsPage1.ID then
                if WizardSelectedComponents(False) = '' then
begin
MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
Result:= False;
end;

со стандартной работает, а во с кастомной не хочет
помогите, плиз...

maraby 17-04-2015 12:19 2497068

Здравствуйте!

Ситуация:
нужно допилить чужую инсталку. Несколько дней поисков готовых решений (или требующих минимальных изменений) - безрезультатны
Нет опыта, поэтому обращаюсь за помощью
задачи 3:

1) добавить в список выбора языков - русский язык
http://forum.oszone.net/attachment.p...1&d=1429261858

Добавила ShowLanguageDialog, добавила в [Languages] язык, в списке - не отображается :(

UPD. пока писала сообщение, нашла решение этой проблемы (метод резиновой уточки detected ;) )

[Setup]
ShowUndisplayableLanguages=yes
//корректно не отображается, но думаю, это можно полечить локальными настройками системы

2) сделать зависимость инсталяции компонентов (MS SQL Server 2008 или 2012) от версии системы (если Windows 5, 6 в первом случае и >=7 - во втором)
NB. "Зависимость иннсталяции" для меня значит, что будет только один возможный RadioButton будет активный

http://forum.oszone.net/attachment.p...1&d=1429261858

Нашла такой код
Код:


if ((GetWindowsVersion shr 24) = 5) and (((GetWindowsVersion shr 16) and $FF) = 1) then
begin
MsgBox('Windows XP', mbInformation, MB_OK);
end
else if ((GetWindowsVersion shr 24) = 6) and (((GetWindowsVersion shr 16) and $FF) = 1) then
begin
MsgBox('Windows 7', mbInformation, MB_OK);
end;

//Windows 7 = 6.1
//Windows Vista = 6.0
//Windows XP 64-Bit Edition = 5.2
//Windows XP = 5.1
//Windows 2000 = 5.0

Проблема в том, что я не знаю, куда его вставить


3) При выборе уже существующего на компьютере пользователя MS SQL Server необходим список этих самых серверов. Но чесно говоря этот вопрос еще не гуглила. Если кто подскажет где искать/ что делать - буду благодарна :)

http://forum.oszone.net/attachment.p...1&d=1429261858

весь iss

Код:

[Setup]
AppName=PasCom
AppVerName=PasCom
DefaultDirName={pf}\PasCom
DefaultGroupName=PasCom
UninstallDisplayIcon={app}\PasCom.exe
Compression=lzma
SolidCompression=yes
ShowLanguageDialog=yes
LanguageDetectionMethod=none
ShowUndisplayableLanguages=yes

[Languages]
Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl"; LicenseFile: "Licencja.rtf"
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "Licencja.rtf"

[Registry]
Root: HKCU; Subkey: "PasCom Transport"; Flags: uninsdeletekey

[CustomMessages]
Demo=Demo                                                                                       
pl.Aplikacja=Klient aplikacji
en.Aplikacja=Application client
ru.Aplikacja=Клиент приложения

pl.AplikacjaServer=Aplikacja serwerowa
en.AplikacjaServer=Server application
ru.AplikacjaServer=Серверное приложение

pl.WyborWersji=Wybór wersji programu
en.WyborWersji=Choose application version
ru.WyborWersji=Версия программы

pl.WyborWersjiRozwiniecie=Proszę wybrać wersję aplikacji, a następnie przejść dalej
en.WyborWersjiRozwiniecie=Please choose application version and click next
ru.WyborWersjiRozwiniecie=Необходимо выбрать версию программы и перейти дальше

pl.RodzajInstalacjiTypowa=Typowa
en.RodzajInstalacjiTypowa=Typical
ru.RodzajInstalacjiTypowa=Стандартная установка

pl.RodzajInstalacjiZaawansowana=Zaawansowana
en.RodzajInstalacjiZaawansowana=Advanced
ru.RodzajInstalacjiZaawansowana=Расширенная

pl.RodzajInstalacjiTypowaOpis=Instaluje automatycznie najczęściej używane składniki
en.RodzajInstalacjiTypowaOpis=Automatically install the most commonly used components
ru.RodzajInstalacjiTypowaOpis=Автоматическая установка наиболее часто используемых компонентов

pl.RodzajInstalacjizaawansowanaOpis=Umożliwia samodzielny wybór składników do zainstalowania lub podłączenie bazy danych do istniejących serwerów SQL
en.RodzajInstalacjizaawansowanaOpis=Allows you to choose the components to install or connect to an existing database SQL servers
ru.RodzajInstalacjizaawansowanaOpis=Позволяет выбрать компоненты для установки или подключение к существующим серверам баз данных SQL.

pl.RodzajInstalacjiRozwiniecie=Proszę wybrać rodzaj instalacji, a następnie przejść dalej
en.RodzajInstalacjiRozwiniecie=Please choose the type of application and click next
ru.RodzajInstalacjiRozwiniecie=Необходимо выбрать тип установки

pl.RodzajInstalacji=Wybór rodzaju instalacji
en.RodzajInstalacji=Choose instalation type
ru.RodzajInstalacji=Выберите тип установки

pl.TypSerwera=Wybór wersji serwera MS SQL
en.TypSerwera=Choose MS SQL server type
ru.TypSerwera=Выберите тип сервера MS SQL

pl.TypSerweraRozwiniecie=Proszę wybrać która wersja serwera MS SQL ma zostać zainstalowana
en.TypSerweraRozwiniecie=Please choose witch version of MS SQL server want to install
ru.TypSerweraRozwiniecie=Пожалуйста, выберите версию сервера MS SQL для установки

pl.TypSerwera2008=Microsoft SQL 2008 Express
en.TypSerwera2008=Microsoft SQL 2008 Express
ru.TypSerwera2008=Microsoft SQL 2008 Express

pl.TypSerwera2012=Microsoft SQL 2012 Express
en.TypSerwera2012=Microsoft SQL 2012 Express
ru.TypSerwera2012=Microsoft SQL 2012 Express

pl.TypSerweraBrak=Nie instaluj serwera SQL. Podłącz baze do istniejącej już instancji MS SQL.
en.TypSerweraBrak=Do not install the SQL server. Attache databese to existing MS SQL instance.
ru.TypSerweraBrak=Не устанавливайте сервер SQL, подключите базу к существующему серверу MS SQL.

pl.TypSerweraWybor=Zainstaluj serwer MS SQL
en.TypSerweraWybor=Install the MS SQL server
ru.TypSerweraWybor=Установить сервер MS SQL

pl.PodlaczanieBazy=Podłączenie bazy danych.
en.PodlaczanieBazy=Attaching database.
ru.PodlaczanieBazy=Подключение базы данных

pl.PodlaczanieBazyRozwiniecie=Proszę wybrać parametry zainstalowanego serwera MS SQL w celu prawidłowego podłączenia bazy dancyh systemu PasCom.
en.PodlaczanieBazyRozwiniecie=Please choose the parameters of the installed MS SQL server to correctly attaching database of PasCom system.
ru.PodlaczanieBazyRozwiniecie=Пожалуйста, выберите параметры установленного сервера MYSQL для корректного подключения базы данных системы PasCom.

pl.TypAutoryzacja=Zaloguj się do serwera SQL.
en.TypAutoryzacja=Connect to SQL server.
ru.TypAutoryzacja=Подключение к серверу SQL.

pl.AutoryzacjaWindows=Użyj uwierzytelniania Windows
en.AutoryzacjaWindows=Use Windows authorization
ru.AutoryzacjaWindows=Авторизация с помощью Windows

pl.AutoryzacjaSql=Użyj uwierzytelniania SQL
en.AutoryzacjaSql=Use SQL authorization
ru.AutoryzacjaSql=Авторизация с помощью SQL

pl.NazwaUzytkownika=Nazwa Użytkownika:
en.NazwaUzytkownika=Username:
ru.NazwaUzytkownika=Имя пользователя:

pl.Haslo=Hasło:
en.Haslo=Password:
ru.Haslo=Пароль:

pl.Serwer=Serwer MS SQL:
en.Serwer=MS SQL server:
ru.Serwer=Сервер MS SQL:

pl.KodLicencji=Parametry instalacyjne
en.KodLicencji=Parameters of instalation
ru.KodLicencji=Параметры установки
                                                                                                               
pl.KodLicencjiRozwiniecie=Proszę podać parametry instalacyjne potrzebne do utworzenia nowej bazy systemu PasCom
en.KodLicencjiRozwiniecie=Please provide installation parameters needed to create a new database system PasCom
ru.KodLicencjiRozwiniecie=Пожалуйста, укажите параметры установки, необходимые для создания новой базы данных для системы PasCom.

pl.SkrotOpis=Nazwa Skrócona
pl.SkrotOpis=Short Name
ru.SkrotOpis=Сокращенное название

pl.PelnaOpis=Pełna nazwa Firmy
pl.PelnaOpis=Full name of the Company
ru.PelnaOpis=Полное название фирмы

pl.PodajKod=Wczytaj kod licencji:
pl.PodajKod=Load license code:
ru.PodajKod=Укажите код лицензии:

pl.Nip=NIP:
en.Nip=NIP:
ru.Nip=NIP:

pl.Miasto=Miasto:
en.Miasto=City:
ru.Miasto=Город:

pl.KodPocztowy=Kod pocztowy:
en.KodPocztowy=Postal Code:
ru.KodPocztowy=Постовый код:

pl.Ulica=Ulica:
en.Ulica=Street:
ru.Ulica=Улица:

pl.Jezyk=polski
en.Jezyk=english
ru.Jezyk=русский

pl.Odinstaluj=Odinstaluj
en.Odinstaluj=Uninstall
ru.Odinstaluj=Деинсталляция

pl.StworzIkone=Stwórz ikonę na pulpicie
en.StworzIkone=Create a desktop icon
ru.StworzIkone=Создать иконку на рабочем столе

pl.DodatkoweIkony="Dodatkowe ikony:"
en.DodatkoweIkony="Additional icons:"
ru.DodatkoweIkony="Дополнительные иконки:"

pl.StworzIkoneWszyscy=dla wszystkich użytkowników
en.StworzIkoneWszyscy=for all users
ru.StworzIkoneWszyscy=для всех пользователей

pl.StworzIkoneObecny=dla obecnego użytkownika
en.StworzIkoneObecny=for current user only
ru.StworzIkoneObecny=для актуального пользователя

pl.StworzIkoneSzybkieUruchamianie=Stwórz ikonę na pasku szybkiego uruchamiania
en.StworzIkoneSzybkieUruchamianie=Create a quick launch icon
ru.StworzIkoneSzybkieUruchamianie=Создать иконку быстрого запуска

pl.KomunikatKodLicencji=Proszę uzupełnić pola:
en.KomunikatKodLicencji=Please complete the fields:
ru.KomunikatKodLicencji=Пожалуйста, заполните поля:

pl.KomunikatSkrot=Nazwa Skrócona
en.KomunikatSkrot=Short Name
ru.KomunikatSkrot=Краткое название

pl.KomunikatPelna=Pełna nazwa Firmy
en.KomunikatPelna=Full name of the Company
ru.KomunikatPelna=Полное название компании

pl.KomunikatNip=NIP
en.KomunikatNip=NIP
ru.KomunikatNip=NIP

pl.KomunikatMiasto=Miasto
en.KomunikatMiasto=City
ru.KomunikatMiasto=Город

pl.KomunikatKodPocztowy=Kod pocztowy
en.KomunikatKodPocztowy=Postal Code
ru.KomunikatKodPocztowy=Почтовый код

pl.KomunikatUlica=Ulica
en.KomunikatUlica=Street
ru.KomunikatUlica=Улица

[Files]
Source: "PasCom\*"; DestDir: "{app}";  Flags: recursesubdirs;

[Icons]
Name: "{group}\PasCom"; Filename: "{app}\PasCom.exe";
Name: "{group}\{cm:Odinstaluj}"; Filename: "{uninstallexe}"
Name: "{userdesktop}\PasCom"; Filename: "{app}\PasCom.exe"; Tasks: desktopicon\user; WorkingDir: "{app}"
Name: "{commondesktop}\PasCom"; Filename: "{app}\PasCom.exe"; Tasks: desktopicon\common; WorkingDir: "{app}"
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\PasCom"; Filename: "{app}\PasCom.exe"; Tasks: quicklaunchicon; WorkingDir: "{app}"

[Tasks]
Name: desktopicon; Description: "{cm:StworzIkone}"; GroupDescription: "{cm:StworzIkone}";
Name: desktopicon\common; Description: "{cm:StworzIkoneWszyscy}"; GroupDescription: "{cm:StworzIkone}"; Flags: exclusive
Name: desktopicon\user; Description: "{cm:StworzIkoneObecny}"; GroupDescription: "{cm:StworzIkone}"; Flags: exclusive unchecked
Name: quicklaunchicon; Description: "{cm:StworzIkoneSzybkieUruchamianie}"; GroupDescription: "{cm:StworzIkone}"; Flags: unchecked

[  Code]
var
  WyborWersji : TInputOptionWizardPage;
  RodzajInstalacji : TInputOptionWizardPage;
  TypSerwera : TWizardPage;
  Button: TNewButton;
  PodlaczanieBazy : TWizardPage;
  KodLicencji : TWizardPage;
  CheckBox: TNewCheckBox;
  SerwerInstancja: TNewComboBox;
  Licencja: TInputFileWizardPage;
  NazwaInstancji : String;
  NazwaZrodlaODBC : String;
  PlikInstalacyjny : String;
  Edit, Skrot, Pelna, Nip, Miasto, Ulica, KodPocztowy: TNewEdit;
  TypAutoryzacji : TLabel;
  Uzytkownik, Haslo, ProgressBarLabel, Serwer, Kod, SkrotOpis, PelnaOpis, NipOpis, MiastoOpis, KodPocztowyOpis, UlicaOpis: TNewStaticText;
  PasswordEdit: TPasswordEdit;
  {Specjalna wersja to wersja dla konkretnego klienta, jezeli ustawimy to na True to zmianiamy jeszcze stala Demo na np. 'Aplikacja dla Szerwal' i mamy}
  CzySpecjalnaWersja : Boolean;
  CheckListBox, TypSerweraCheckListBox, AutoryzacjaCheckListBox: TNewCheckListBox;

procedure ButtonOnClick(Sender: TObject);
var
Filename: String;
begin
    GetOpenFileName('', Filename, '',
    'Text Documents (*.key)|*.key|', 'txt');
end;
procedure CheckListBoxClick(Sender: TObject);
begin
//MsgBox('You clicked the image!', mbInformation, mb_Ok);
  Edit.Enabled := AutoryzacjaCheckListBox.ItemIndex = 1;
  PasswordEdit.Enabled := AutoryzacjaCheckListBox.Itemindex = 1;
  Haslo.Enabled := AutoryzacjaCheckListBox.Itemindex = 1;
  Uzytkownik.Enabled := AutoryzacjaCheckListBox.Itemindex = 1;
                         
end;
 

procedure InitializeWizard;
begin
  { Create the pages }

  WyborWersji := CreateInputOptionPage(wpLicense,
    ExpandConstant('{cm:WyborWersji}'), '',
    ExpandConstant('{cm:WyborWersjiRozwiniecie}'),
    True, False);
  WyborWersji.Add(ExpandConstant('{cm:Demo}'));
  WyborWersji.Add(ExpandConstant('{cm:Aplikacja}'));
  WyborWersji.Add(ExpandConstant('{cm:AplikacjaServer}'));
  WyborWersji.SelectedValueIndex := 0;
  CzySpecjalnaWersja := False;

  RodzajInstalacji := CreateInputOptionPage(WyborWersji.ID,
        ExpandConstant('{cm:RodzajInstalacji}'), '',
        ExpandConstant('{cm:RodzajInstalacjiRozwiniecie}'),
        True, False);
  RodzajInstalacji.Add(ExpandConstant('{cm:RodzajInstalacjiTypowa}'));
  RodzajInstalacji.Add(ExpandConstant('{cm:RodzajInstalacjiZaawansowana}'));
  RodzajInstalacji.SelectedValueIndex := 0;

//********************************************Wybor serwera

  TypSerwera := CreateCustomPage(RodzajInstalacji.ID,
    ExpandConstant('{cm:TypSerwera}'),
    ExpandConstant('{cm:TypSerweraRozwiniecie}'));
  TypSerweraCheckListBox := TNewCheckListBox.Create(TypSerwera);
  TypSerweraCheckListBox.Width := TypSerwera.SurfaceWidth;
  TypSerweraCheckListBox.Height := ScaleY(97);
  TypSerweraCheckListBox.BorderStyle := bsNone;
  TypSerweraCheckListBox.ParentColor := True;
  TypSerweraCheckListBox.MinItemHeight := WizardForm.TasksList.MinItemHeight;
  TypSerweraCheckListBox.ShowLines := False;
  TypSerweraCheckListBox.WantTabs := True;
  TypSerweraCheckListBox.Parent := TypSerwera.Surface;
  TypSerweraCheckListBox.AddRadioButton(ExpandConstant('{cm:TypSerweraWybor}'), '', 0, True, True, nil);      //
    TypSerweraCheckListBox.AddRadioButton(ExpandConstant('{cm:TypSerwera2008}'), '', 1, True, True, nil);
    TypSerweraCheckListBox.AddRadioButton(ExpandConstant('{cm:TypSerwera2012}'), '', 1, False, True, nil);
  TypSerweraCheckListBox.AddRadioButton(ExpandConstant('{cm:TypSerweraBrak}'), '', 0, False, True, nil);

  PodlaczanieBazy := CreateCustomPage(Typserwera.ID,
    ExpandConstant('{cm:PodlaczanieBazy}'),
    ExpandConstant('{cm:PodlaczanieBazyRozwiniecie}'));
  TypAutoryzacji := TLabel.Create(PodlaczanieBazy);
    with TypAutoryzacji do
  begin
    Parent := PodlaczanieBazy.Surface;
    Caption := ExpandConstant('{cm:TypAutoryzacja}');
    Left := ScaleX(24);
    Top := ScaleY(72);
    Width := ScaleX(87);
    Height := ScaleY(13);
    Enabled := False;
  end;
  AutoryzacjaCheckListBox := TNewCheckListBox.Create(PodlaczanieBazy);
  AutoryzacjaCheckListBox.Width := PodlaczanieBazy.SurfaceWidth;
  AutoryzacjaCheckListBox.Height := ScaleY(97);
  AutoryzacjaCheckListBox.BorderStyle := bsNone;
  AutoryzacjaCheckListBox.ParentColor := True;
  AutoryzacjaCheckListBox.MinItemHeight := WizardForm.TasksList.MinItemHeight;
  AutoryzacjaCheckListBox.ShowLines := False;
  AutoryzacjaCheckListBox.WantTabs := True;
  AutoryzacjaCheckListBox.Parent := PodlaczanieBazy.Surface;
  AutoryzacjaCheckListBox.AddRadioButton(ExpandConstant('{cm:AutoryzacjaWindows}'), '', 0, True, True, nil);
  AutoryzacjaCheckListBox.OnClick := @CheckListBoxClick;
 
 
  Edit := TNewEdit.Create(PodlaczanieBazy);
  Edit.HideSelection := false;
  Edit.Top := ScaleY(50);
  Edit.Left := ScaleX(130);
  Edit.Width := ScaleX(173);
  Edit.Parent := PodlaczanieBazy.Surface;
  Edit.Enabled := False;
 
  PasswordEdit := TPasswordEdit.Create(PodlaczanieBazy);
  PasswordEdit.Top := + ScaleY(75);
  PasswordEdit.Width := ScaleX(173);
  PasswordEdit.Left := ScaleX(130);
  PasswordEdit.Parent := PodlaczanieBazy.Surface;
  PasswordEdit.Enabled := False;
 
  Uzytkownik := TNewStaticText.Create(PodlaczanieBazy);
  Uzytkownik.Top:= ScaleY(50);
  Uzytkownik.Left := ScaleX(25);
  Uzytkownik.Width := PodlaczanieBazy.SurfaceWidth div 2 - ScaleX(8);
  Uzytkownik.Caption := ExpandConstant('{cm:NazwaUzytkownika}');
  Uzytkownik.Parent := PodlaczanieBazy.Surface;
  Uzytkownik.Enabled := False;

  Haslo := TNewStaticText.Create(PodlaczanieBazy);
  //Haslo.Left := PodlaczanieBazy.SurfaceWidth - Uzytkownik.Width;
  Haslo.Top := + ScaleY(75);
  Haslo.Left := ScaleX(25);
  Haslo.Width := Uzytkownik.Width;
  Haslo.Caption := ExpandConstant('{cm:Haslo}');
  Haslo.Parent := PodlaczanieBazy.Surface;
  Haslo.Enabled := False;

  AutoryzacjaCheckListBox.AddRadioButton(ExpandConstant('{cm:AutoryzacjaSql}'), '', 0, False, True, nil);

  SerwerInstancja := TNewComboBox.Create(PodlaczanieBazy);
  SerwerInstancja.Width := PodlaczanieBazy.SurfaceWidth;
  SerwerInstancja.Parent := PodlaczanieBazy.Surface;
  SerwerInstancja.Top := + ScaleY(130);
  SerwerInstancja.Width := ScaleX(173);
  SerwerInstancja.Left := ScaleX(130);
  //SerwerInstancja.Style := csDropDownList;
  //SerwerInstancja.Items.Add('Wybór instancji');
  SerwerInstancja.ItemIndex := 0;

  Serwer := TNewStaticText.Create(PodlaczanieBazy);
  Serwer.Top := + ScaleY(130);
  Serwer.Left := ScaleX(25);
  Serwer.Width := SerwerInstancja.Width;
  Serwer.Caption := ExpandConstant('{cm:Serwer}');
  Serwer.Parent := PodlaczanieBazy.Surface;
 

  KodLicencji := CreateCustomPage(PodlaczanieBazy.ID,
    ExpandConstant('{cm:KodLicencji}'),
    ExpandConstant('{cm:KodLicencjiRozwiniecie}'));
  Button := TNewButton.Create(KodLicencji);
  //Button.Top := ScaleY(10);
  Button.Left := ScaleY(120);
  Button.Width := ScaleX(90);
  Button.Height := ScaleY(23);
  Button.Caption := 'Otwórz';
  Button.OnClick := @ButtonOnClick;
  Button.Parent := KodLicencji.Surface;

  Kod := TNewStaticText.Create(KodLicencji);
  Kod.Top:= ScaleY(2);
  Kod.Caption := ExpandConstant('{cm:PodajKod}');
  Kod.Parent := KodLicencji.Surface;

  Skrot := TNewEdit.Create(KodLicencji);
  Skrot.Top := ScaleY(40);
  Skrot.Left := ScaleX(100);
  Skrot.Width := ScaleX(173);
  Skrot.Parent := KodLicencji.Surface;
  Skrot.Enabled := True;
 
  SkrotOpis := TNewStaticText.Create(KodLicencji);
  SkrotOpis.Top:= ScaleY(40);
  //SkrotOpis.Left := ScaleX(25);
  SkrotOpis.Caption := ExpandConstant('{cm:SkrotOpis}');
  SkrotOpis.Parent := KodLicencji.Surface;
  SkrotOpis.Enabled := True;

  Pelna := TNewEdit.Create(KodLicencji);
  Pelna.Top := ScaleY(65);
  Pelna.Left := ScaleX(100);
  Pelna.Width := ScaleX(173);
  Pelna.Parent := KodLicencji.Surface;
  Pelna.Enabled := True;
 
  PelnaOpis := TNewStaticText.Create(KodLicencji);
  PelnaOpis.Top:= ScaleY(65);
  //PelnaOpis.Left := ScaleX(25);
  PelnaOpis.Caption := ExpandConstant('{cm:PelnaOpis}');
  PelnaOpis.Parent := KodLicencji.Surface;
  PelnaOpis.Enabled := True;

  Nip := TNewEdit.Create(KodLicencji);
  Nip.Top := ScaleY(90);
  Nip.Left := ScaleX(100);
  Nip.Width := ScaleX(173);
  Nip.Parent := KodLicencji.Surface;
  Nip.Enabled := True;
 
 
  NipOpis := TNewStaticText.Create(KodLicencji);
  NipOpis.Top:= ScaleY(90);
  //PelnaOpis.Left := ScaleX(25);
  NipOpis.Caption := ExpandConstant('{cm:Nip}');
  NipOpis.Parent := KodLicencji.Surface;
  NipOpis.Enabled := True;
 

  Miasto := TNewEdit.Create(KodLicencji);
  Miasto.Top := ScaleY(115);
  Miasto.Left := ScaleX(100);
  Miasto.Width := ScaleX(173);
  Miasto.Parent := KodLicencji.Surface;
  Miasto.Enabled := True;
 
  MiastoOpis := TNewStaticText.Create(KodLicencji);
  MiastoOpis.Top:= ScaleY(115);
  //PelnaOpis.Left := ScaleX(25);
  MiastoOpis.Caption := ExpandConstant('{cm:Miasto}');
  MiastoOpis.Parent := KodLicencji.Surface;
  MiastoOpis.Enabled := True;
 
  KodPocztowy := TNewEdit.Create(KodLicencji);
  KodPocztowy.Top := ScaleY(140);
  KodPocztowy.Left := ScaleX(100);
  KodPocztowy.Width := ScaleX(173);
  KodPocztowy.Parent := KodLicencji.Surface;
  KodPocztowy.Enabled := True;
 
  KodPocztowyOpis := TNewStaticText.Create(KodLicencji);
  KodPocztowyOpis.Top:= ScaleY(140);
  //PelnaOpis.Left := ScaleX(25);
  KodPocztowyOpis.Caption := ExpandConstant('{cm:KodPocztowy}');
  KodPocztowyOpis.Parent := KodLicencji.Surface;
  KodPocztowyOpis.Enabled := True; 

  Ulica := TNewEdit.Create(KodLicencji);
  Ulica.Top := ScaleY(165);
  Ulica.Left := ScaleX(100);
  Ulica.Width := ScaleX(173);
  Ulica.Parent := KodLicencji.Surface;
  Ulica.Enabled := True;
 

 
  UlicaOpis := TNewStaticText.Create(KodLicencji);
  UlicaOpis.Top:= ScaleY(165);
  //PelnaOpis.Left := ScaleX(25);
  UlicaOpis.Caption := ExpandConstant('{cm:Ulica}');
  UlicaOpis.Parent := KodLicencji.Surface;
  UlicaOpis.Enabled := True;
                   
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
 { Skip pages that shouldn't be shown }
 Result := False;

 if (PageID = RodzajInstalacji.ID) and (Wyborwersji.SelectedValueIndex <> 2)
  then Result := True;

 if (PageID = TypSerwera.ID) and ((RodzajInstalacji.SelectedValueIndex <> 1) or (Wyborwersji.SelectedValueIndex <> 2))
  then Result := True;

  if (PageID = PodlaczanieBazy.ID) and ((not TypSerweraCheckListBox.Checked[3]) or (RodzajInstalacji.SelectedValueIndex <> 1) or (Wyborwersji.SelectedValueIndex <> 2))
  then Result := True;
       
  if (PageID = KodLicencji.ID) and (Wyborwersji.SelectedValueIndex <> 2)
  then Result := True;   
     
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  ResultCode : Integer;
  BrakWypelnienia : String;
  begin
  Result := True;
  BrakWypelnienia := ExpandConstant('{cm:KomunikatKodLicencji}');
  { Validate certain pages before allowing the user to proceed }
 
  if CurPageID = RodzajInstalacji.ID then
    begin
    MsgBox('You clicked the image!', mbInformation, mb_Ok);
    end

  if CurPageID = KodLicencji.ID then
   
    begin
      if Skrot.Text = nil then
        begin
        BrakWypelnienia := BrakWypelnienia + #13#10#13#10 + ExpandConstant('{cm:KomunikatSkrot}');
        Result := False;
        end;
      if Pelna.Text = nil then
        begin
          BrakWypelnienia := BrakWypelnienia + #13#10 + ExpandConstant('{cm:KomunikatPelna}');
          Result := False;
        end;
      if Nip.Text = nil then
        begin
        BrakWypelnienia := BrakWypelnienia + #13#10 + ExpandConstant('{cm:KomunikatNip}');
          Result := False;
        end;
      if Miasto.Text = nil then
        begin
        BrakWypelnienia := BrakWypelnienia + #13#10 + ExpandConstant('{cm:KomunikatMiasto}');
          Result := False;
        end;
      if KodPocztowy.Text = nil then
        begin
        BrakWypelnienia := BrakWypelnienia + #13#10 + ExpandConstant('{cm:KomunikatKodPocztowy}');
          Result := False;
        end;
      if Ulica.Text = nil then
        begin
        BrakWypelnienia := BrakWypelnienia + #13#10 + ExpandConstant('{cm:KomunikatUlica}');
          Result := False;
        end;
      if Result = False then
      MsgBox(BrakWypelnienia, mbInformation, mb_Ok)
    end

  if CurPageID = WyborWersji.ID then
  begin
   
    if WyborWersji.SelectedValueIndex = 0 then
    begin
 
      {Specjalna wersja to wersja dla konkretnego klienta}
      if CzySpecjalnaWersja then
      begin
        NazwaInstancji := 'PASCOM';
        NazwaZrodlaODBC := 'pascom';
      end
      else
      begin
        NazwaInstancji := 'PASCOM_DEMO';
        NazwaZrodlaODBC := 'pascom_demo';
        PlikInstalacyjny := 'SQLEXPR_x86_ENU.exe';
      end;
     
    Exec(GetCurrentDir + '\Microsoft\' + PlikInstalacyjny, '/QS /ACTION=Install /INSTANCENAME=' + NazwaInstancji + ' /INSTANCEID=' + NazwaInstancji + ' /QUIETSIMPLE=True /SKIPRULES=RebootRequiredCheck /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /AGTSVCACCOUNT="NT AUTHORITY\Network Service" /FEATURES=SQLENGINE /SQLSVCSTARTUPTYPE=Automatic /SECURITYMODE=SQL /SAPWD=S3l3cti0n@', '',SW_SHOW,ewWaitUntilTerminated, ResultCode);

    end
    else
    if WyborWersji.SelectedValueIndex = 2 then
    begin

     
   
    end
    else
      begin
          NazwaInstancji := 'PASCOM';
          NazwaZrodlaODBC := 'pascom';
      end
  end;
 
  if Assigned(RodzajInstalacji) and (CurPageID = RodzajInstalacji.ID) then
      begin
      if RodzajInstalacji.SelectedValueIndex = 0 then
        begin
        NazwaInstancji := 'PASCOM';
        NazwaZrodlaODBC := 'pascom';
        Exec(GetCurrentDir + '\Installer.exe', '"' + ExpandConstant('{pf}') + '\Microsoft SQL Server" "' + NazwaInstancji + '" ', '',SW_SHOW,ewWaitUntilTerminated, ResultCode);
        end
      else
        if RodzajInstalacji.SelectedValueIndex = 1 then
          begin
          end
      end;
 
  if CurPageID = wpFinished then
  begin
    RegWriteStringValue(HKEY_CURRENT_USER, 'Software\ODBC\ODBC.INI\ODBC Data Sources',
      NazwaZrodlaODBC, 'SQL Server');
     
    RegWriteStringValue(HKEY_CURRENT_USER, 'Software\ODBC\ODBC.INI\' + NazwaZrodlaODBC,
      'Server', 'localhost\' + NazwaInstancji);
     
    RegWriteStringValue(HKEY_CURRENT_USER, 'Software\ODBC\ODBC.INI\' + NazwaZrodlaODBC,
      'Database', 'pascom');
     
    RegWriteStringValue(HKEY_CURRENT_USER, 'Software\ODBC\ODBC.INI\' + NazwaZrodlaODBC,
      'Driver', ExpandConstant('{syswow64}') + '\SQLSRV32.dll');
     
    RegWriteStringValue(HKEY_CURRENT_USER, 'Software\ODBC\ODBC.INI\' + NazwaZrodlaODBC,
      'LastUser', 'pascom');
     
    RegWriteStringValue(HKEY_CURRENT_USER, 'Software\ODBC\ODBC.INI\' + NazwaZrodlaODBC,
      'Language', ExpandConstant('{cm:Jezyk}'));
     
     
    if NazwaZrodlaODBC = 'pascom' then
    begin
      RegWriteStringValue(HKEY_CURRENT_USER, 'PasCom Transport\Login','eUsername_Text','admin');
      RegWriteStringValue(HKEY_CURRENT_USER, 'PasCom Transport\Login','eDatabase_Text','pascom');
    end
    else
    begin
      RegWriteStringValue(HKEY_CURRENT_USER, 'PasCom Transport\Login','eUsername_Text','demo');
      RegWriteStringValue(HKEY_CURRENT_USER, 'PasCom Transport\Login','eDatabase_Text','pascom_demo');
    end;
   
    RegWriteStringValue(HKEY_CURRENT_USER, 'PasCom Transport\Login','edProductIdent_Text','pascom');
    RegWriteStringValue(HKEY_CURRENT_USER, 'PasCom Transport\Login','edProductKey_Text','S3l3cti0n@');
    RegWriteStringValue(HKEY_CURRENT_USER, 'PasCom Transport\Login','combLang_ItemIndex','0');
    RegWriteStringValue(HKEY_CURRENT_USER, 'PasCom Transport\Login','cbServerType_ItemIndex','1');
  end;
 
 
end;

procedure DeinitializeUninstall();
begin
  RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER,'Software\ODBC\ODBC.INI\pascom');
  RegDeleteValue(HKEY_CURRENT_USER, 'Software\ODBC\ODBC.INI\ODBC Data Sources\','pascom');
  RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER,'Software\ODBC\ODBC.INI\pascom_demo');
  RegDeleteValue(HKEY_CURRENT_USER, 'Software\ODBC\ODBC.INI\ODBC Data Sources\','pascom_demo');
end;


//*********************************Sprawdzenie wersiji Windows
//
function InitializeSetup: Boolean;
var
  Version: TWindowsVersion;
  S: String;
begin
  GetWindowsVersionEx(Version);

  // Disallow installation on Home edition of Windows
  if Version.SuiteMask and VER_SUITE_PERSONAL <> 0 then
  begin
    SuppressibleMsgBox('This program cannot be installed on a Home edition of Windows.',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  // Disallow installation on domain controllers
  if Version.ProductType = VER_NT_DOMAIN_CONTROLLER then
  begin
    SuppressibleMsgBox('This program cannot be installed on domain controllers.',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  // On Windows 2000, check for SP4
  if Version.NTPlatform and
    (Version.Major = 5) and
    (Version.Minor = 0) and
    (Version.ServicePackMajor < 4) then
  begin
    SuppressibleMsgBox('When running on Windows 2000, Service Pack 4 is required.',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  // On Windows XP, check for SP2
  if Version.NTPlatform and
    (Version.Major = 5) and
    (Version.Minor = 1) and
    (Version.ServicePackMajor < 2) then
  begin
    SuppressibleMsgBox('When running on Windows XP, Service Pack 2 is required.',
      mbCriticalError, MB_OK, MB_OK);
    Result := False;
    Exit;
  end;

  Result := True;
end;


Благодарю!

Irenis 17-04-2015 13:08 2497101

Здравствуйте! Возник такой вопрос. Есть разные степени сжатия при создании установщика. А нельзя ли сделать так, чтоб установщик получался заданного размера. Например, компилирую приложение, степень сжатия lzma2/ultra, размер получается 42,1 Мб. А мне нужно, чтоб размер приложения получился 41,5 Мб? Может есть какой то код, в котором можно указывать нужный размер? Спасибо :)

NewMix 17-04-2015 13:59 2497122

Возник такой вопрос. Как мне сделать чтобы при выборе компонентов был значек проигрывания звукого файла как на скрине и как добавить загрузку некоторых файлов из интернета уже в ту категорию которую указали при начале установки?


svs23 17-04-2015 14:24 2497128

Цитата:

Цитата NewMix
как добавить загрузку некоторых файлов из интернета »

https://code.google.com/p/inno-download-plugin/
http://forum.oszone.net/post-2267694-1626.html

NewMix 17-04-2015 14:37 2497131

svs23, Спасибо позже попробую. А такой вот еще вопрос. Сколько хочу декомпилировать ехе-шники ничего не получается. Выдает постоянно ошибку, как ее исправить? p.s пользуюсь вроде как последними версиями по которые должны открывать ехе-шники созданные в inno setup 5.5


svs23 17-04-2015 14:42 2497133

Цитата:

Цитата NewMix
Сколько хочу декомпилировать ехе-шники ничего не получается. Выдает постоянно ошибку, как ее исправить? p.s пользуюсь вроде как последними версиями по которые должны открывать ехе-шники созданные в inno setup 5.5 »

маловероятно, а точнее практически невозможно :)

svs23 17-04-2015 15:00 2497141

Вложений: 1
Цитата:

Цитата NewMix
Спасибо позже попробую. »

держи...

Shkutu 17-04-2015 15:30 2497156

Вложений: 2
Всем доброго времени суток!
Возникла следующая проблема. При установке создается .url файл (способ стандартный :) )
Код:

[Icons]
Name: "{commondesktop}\WebReports\WebInterface"; Filename: "{code:GetLink}"; Components: iis\web; Tasks: desktopicon\web
[Сode]
function GetLink(param:string):string;
begin
  result:='http://127.0.0.1:' + SitePortPage.values[0] + '/webinterface/Home/Login';
end;

Собственно, сам ярлык создается, но при этом иногда (не всегда, но часто) у созданного файла не совпадают значения свойств url-адреса на вкладке "веб-документ" и "подробно". Пример, как это выглядит в результате - в скиншотах.
Подскажите пожалуйста, откуда может взяться эта проблема и как ее решить.

Dodakaedr 17-04-2015 15:46 2497162

Вложений: 1
Цитата:

Цитата Shkutu
При установке создается .url файл (способ стандартный ) »

Код:

[Setup]
appname=app
AppVersion=1.0
DefaultDirName={pf}\app

[Icons]
Name: "{commondesktop}\WebInterface"; Filename: "http://127.0.0.1:90/webinterface/Home/Login";


MaximilianoPozo 17-04-2015 16:08 2497169

Цитата:

Цитата NewMix
А такой вот еще вопрос. Сколько хочу декомпилировать ехе-шники ничего не получается. Выдает постоянно ошибку, как ее исправить? p.s пользуюсь вроде как последними версиями по которые должны открывать ехе-шники созданные в inno setup 5.5 »

А никак

Shkutu 17-04-2015 17:07 2497194

Dodakaedr, там неспроста строка, идущая в filename не пишется хардкодом, а возвращается функцией, ибо порт может отличаться. в любом случае, это вряд ли влияет. судя по тому, что, если открыть этот файлик как текст, ссылка там правильная, напрашивается мысль, что проблема не с ярлыком, а с кэшем браузера или системы.

svs23 17-04-2015 18:21 2497206

как сделать проверку на выбор хотя бы одно компонента для кастомного листа?
Скрытый текст
Код:

if CurPageID = ComponentsPage1.ID then
                if WizardSelectedComponents(False) = '' then
begin
MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
Result:= False;
end;


ekspoint 17-04-2015 19:02 2497221

Цитата:

Цитата svs23
как сделать проверку на выбор хотя бы одно компонента для кастомного листа? »

вот так:
Код:

function NextButtonClick(CurPageID: Integer): Boolean;
var
i: integer;
begin
  Result := True;

  if CurPageID = wpSelectDir then
  begin
    if (FileSearch('WorldOfTanks.exe', ExpandConstant('{app}')) = '') then
        begin
        SuppressibleMsgBox('"WorldOfTanks.exe не найден в папке назначения,  проверьте путь к игре".', mbCriticalError, MB_OK, MB_OK);
        Result := False;
      end else
        Result := True;
        end else

        if CurPageID = ComponentsPage1.ID then
begin
Result := False;
for i:= 0 to ComponentsList1.Items.Count - 1 do
begin
if (ComponentsList1.Checked[i]) then
begin
Result := True;
Break;
end;
end;
if Not Result then MsgBoxEx(0, 'Не один из компонетов не выбран!','Внимание!!',MB_OK or MB_ICONWARNING, 0, 0);
end else
begin
Result := True;
end;
end


svs23 17-04-2015 19:10 2497223

ekspoint, спс

ekspoint 18-04-2015 00:24 2497330

Помогите прицепить новый тип установки к новому компонент листу
Код:

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа
DirExistsWarning=no
AppendDefaultDirName=no
[CustomMessages]
CompName1=Компонент 1
CompName2=Компонент 2
CompSubtitlesLng=Язык субтитров
CompVoiceLng=Язык озвучки
CompRussian=Русский
CompEnglish=Английский
[_CODE]
var
ComboBox: TNewComboBox;
Page: TWizardPage;
var
ComponentsList1: TNewCheckListBox;
procedure CreateWizardPages;
begin
begin
Page := CreateCustomPage(wpWelcome, '', '');
ComboBox := TNewComboBox.Create(Page);
ComboBox.Width := Page.SurfaceWidth;
ComboBox.Parent := Page.Surface;
ComboBox.Style := csDropDownList;
ComboBox.Items.Add('TComboBox 1');
ComboBox.Items.Add('TComboBox 2');
ComboBox.Items.Add('TComboBox 3');
ComboBox.Items.Add('TComboBox 4');
ComboBox.Items.Add('TComboBox 5');
ComboBox.ItemIndex := 0;
end;
//========================================================================\\
ComponentsList1 := TNewCheckListBox.Create(WizardForm);
with ComponentsList1 do
begin
Parent := Page.Surface;
SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, True, False, True, nil); //0
AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil); //1
AddRadioButton(CustomMessage('CompEnglish'), '', 1, True, True, nil); //2
AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, True, False, True, nil); //3
AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil); //4
AddRadioButton(CustomMessage('CompEnglish'), '', 1, True, True, nil); //5
end;
end;
function IsComponentsForm1(CompIndex: Integer): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to ComponentsList1.ItemCount - 1 do
begin
if CompIndex <= (ComponentsList1.ItemCount - 1) then
Result := ComponentsList1.Checked[CompIndex];
end;
end;
procedure InitializeWizard();
begin
CreateWizardPages;
end;


NewMix 18-04-2015 07:38 2497353

Цитата:

Цитата svs23
держи...
Вложения
IDP_and_Extract_Example_AtotIK.rar
(416.8 Kb, 4 просмотров) »


а это что такое?

NewMix 18-04-2015 08:27 2497357

Цитата:

Цитата svs23
держи...
Вложения
IDP_and_Extract_Example_AtotIK.rar
(416.8 Kb, 4 просмотров) »

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

svs23 18-04-2015 10:26 2497389

Цитата:

Цитата NewMix
Мне нужно чтобы после разорхивирования скачанного файла данный архив который скачал был удален. »

это в коде предусмотренно
Код:

DeleteFile(ExpandConstant(

NewMix 19-04-2015 08:53 2497716

а такой вопрос, после того как файл скачался и начал распаковываться почему не появляется cmd со списком распаковываемых компонентов? Ибо пользователь не сразу может понять что будет еще распаковка звуков.

ekspoint 19-04-2015 09:34 2497726

Цитата:

Цитата NewMix
а такой вопрос, после того как файл скачался и начал распаковываться почему не появляется cmd со списком распаковываемых компонентов? Ибо пользователь не сразу может понять что будет еще распаковка звуков. »

SW_Hide замени на SW_Show

NewMix 19-04-2015 11:33 2497770

Цитата:

Цитата ekspoint
SW_Hide замени на SW_Show »

ах да точняк. Сразу не заметил. Благодарю. Кстате файл удаляется автоматически тоже не заметил. =)

ekspoint 19-04-2015 13:37 2497821

Цитата:

Цитата NewMix
ах да точняк. Сразу не заметил. Благодарю. Кстате файл удаляется автоматически тоже не заметил. »

можно сделать так что бы удалялся если выбрал чек

ekspoint 19-04-2015 17:37 2497921

Как сделать запоминание установленных компонентов из TNewCheckListBox?

VoLT 20-04-2015 18:13 2498385

Немножко вернулся к прошлым идеям, из за потери сорцов - переписал на Delphi, возможно если будут желающие перепишу на Си, там не сложно.
Из ожидаемых фич - пакетная многопоточная обработка (запуск) по маске/списку.
Надеюсь что терпения хватит и я скоро выложу ISWin7.

Исходник ISExec на github

Dodakaedr 20-04-2015 18:30 2498395

VoLT, а саму dll-ку где можно взять?

audiofeel 20-04-2015 18:36 2498396

опять я тут со своими чек боксами. не могу "сделать" такое = при отмене создания папки в меню пуск, (т.е когда нажат чек бокс "не создавать папку") кнопка групп браузер бутон не активна, примеров насобирал штук 10. ни один не могу "воткнуть"
в кратце скрипт
Скрытый текст

procedure WizardFormBtnClick(hBtn: HWND);
var
Btn: TButton;

begin
case hBtn of
GroupBrowseButton: Btn := WizardForm.GroupBrowseButton;
end;
end;
Btn.OnClick(Btn);
BtnRefresh(hBtn);
end;

procedure GroupEditOnChange(Sender: TObject);
begin
GroupEditLabel.Caption := MinimizePathName(WizardForm.GroupEdit.Text, GroupEditLabel.Font, GroupEditLabel.Width);
end;

function NoStartIcon: boolean;
begin
Result := not BtnGetChecked(NoStartIconCheckBox);
end;

procedure CheckBoxesClick(Sender: TObject);
begin
case Sender of
NoStartIconLabel: BtnSetChecked(NoStartIconCheckBox, not BtnGetChecked(NoStartIconCheckBox));
end;
end;

procedure CreateButtons;
begin
GroupBrowseButton := BtnCreate(WizardForm.Handle, ScaleX(494), ScaleY(132), ScaleX(94), ScaleY(26), 'DirBrowseBtn.png', 0, False);
BtnSetEvent(GroupBrowseButton, BtnClickEventID, WrapBtnCallback(@WizardFormBtnClick, 1));
NoStartIconCheckBox := BtnCreate(WizardForm.Handle, ScaleX(25), ScaleY(235), ScaleX(18), ScaleY(18), 'CheckBox.png', 0, True);
end;



VoLT 20-04-2015 18:46 2498399

Dodakaedr, там пока мало что реализованно, но если очень надо вот - ISExec.dll

Dodakaedr 20-04-2015 20:23 2498423

VoLT, что за ошибка? Библа вообще рабочая?
Скрытый текст

Код:

[Setup]
appname=app
AppVersion=1.0
DefaultDirName={pf}\app

[Files]
Source: "ISExec.dll"; Flags: dontcopy nocompression

[Code]
type
  TCancelFunc = procedure(var Cancel: Boolean);

procedure Exec(aEXEName: WideString; aVisible: Boolean; aCallback: TCancelFunc); external 'Exec@files:ISExec.dll stdcall';
procedure CallMe(var Cancel: Boolean);
begin
  Cancel := False;
end;

procedure InitializeWizard();
begin
  Exec(ExpandConstant('{src}\MyProg.exe'), True, @CallMe);
  //Exec('cmd.exe', True, @CallMe);
end;


VoLT 20-04-2015 21:36 2498441

Dodakaedr, ой спасибо за тест - разница в объявлении процедур
библиотека рабочая - а вот скрипт не поправлен - печаль ...
Правильно - так:
Код:

type
  TCancelProc = function: Boolean

Перекачай ISExec.iss

PleaseTryAgain 20-04-2015 21:41 2498442

Здравствуйте. Нужна помощь по работе с внешними dll'ками.
При установке нужно получать информацию о подключённом HID устройстве. Для этого решил использовать библиотеку hidapi.dll, а из неё нужна функция hid_enumerate(int vid, int pid). Функция возвращает указатель на структуру, содержащую информацию о HID устройствах.
Как я понял в inno script указателей нет, поэтому вопрос, можно ли использовать эту функцию? И если да, то какой указывать тип результата и каким образом его вообще получать?

Код:

function GetInfo(vid: integer; pid: integer):  integer;
external 'hid_enumerate@files:hidapi.dll stdcall delayload';

procedure CurPageChanged(CurPageID: Integer);
Var
  vid: integer;
  pid: integer;
  res:  integer;
begin
  vid := 0;
  pid := 0;
  if CurPageId = wpWelcome then
      begin
        WizardForm.WelcomeLabel1.Caption := ExpandConstant('{cm:InstallPage_pageDescription_Caption1}')+#13#10+('{#MyAppName}');
        res := GetInfo(vid, pid);
      end


VoLT 20-04-2015 21:44 2498443

PleaseTryAgain, напишите на дельфи или на си длл - в ней все функции

PleaseTryAgain 20-04-2015 22:04 2498458

VoLT, библиотека на С написана

VoLT 20-04-2015 22:09 2498461

PleaseTryAgain, я про обертку ...
а если использовать на чистую то вы правильно сделали что использовали integer (но для 64 битных длл нужно расширить до 8 знаков)
странно что юзаете stdcall вроде dll на си все юзают Cdecl

PleaseTryAgain 20-04-2015 22:31 2498468

VoLT, благодарю, с заменой stdcall на cdecl программа заработала Х)


Код:

res := GetInfo(vid, pid);
Я так понимаю, что раз функция возвращает указатель, то в переменную res записывается адрес, но как получить то что записано по этому адресу?

VoLT 21-04-2015 10:12 2498594

PleaseTryAgain, почти никак) как вы и сказали в инно нет указателей

PleaseTryAgain 21-04-2015 16:27 2498757

VoLT, понятно)
в любом случае спасибо за помощь

svs23 22-04-2015 10:18 2499084

подскажите как скрыть стандартные заголовки?
Код:

-Информация
-Пожалуйста прочтите..
 
-Выбор папки...
-В какую папку..
 
-Выбор компонентов...
-Какие компоненты...


El Sanchez 22-04-2015 10:49 2499105

Цитата:

Цитата PleaseTryAgain
Как я понял в inno script указателей нет »

Цитата:

Цитата PleaseTryAgain
Я так понимаю, что раз функция возвращает указатель, то в переменную res записывается адрес»

PleaseTryAgain, все там есть. Указатель есть переменная, хранящая адрес на начало данных переменной, на которую указывает указатель. Я надеюсь, что hidapi.dll вы используете по назначению, и GetInfo возвращает вам непустое значение, ибо у меня возвращает 0. Так вот, res в вашем примере это нетипизированный указатель. Указатель - потому что переменная res типа Integer имеет такой же размер в 4 байта, что и настоящая переменная типа указатель (Pointer), если такой тип был бы реализован в скриптовом движке, и значением res является адрес (грубо говоря, число), нетипизированный - потому что движок ничего не знает о типе переменной, адрес которой лежит в res. В Inno типизированных указателей всего ничего - PChar (для ANSI), PAnsiChar (для Unicode).
Цитата:

Цитата PleaseTryAgain
но как получить то что записано по этому адресу? »

Хоть res и нетипизированный указатель для движка, мы то знаем, что это указатель на структуру hid_device_info. Попробуйте объявить её так (для Unicode-версии компилятора):
Скрытый текст

Код:

type
   
hid_device_info = record
       
path: String;
        vendor_id: WORD;
        product_id: WORD;
        serial_number: String;
        release_number: WORD;
        manufacturer_string: String;
        product_string: String;
        usage_page: WORD;
        usage: WORD;
        interface_number: Integer;
        next: Longint;
    end;


Теперь указатель надо разименовать. Т.к. в движке оператора ^ нет, вместо этого можно использовать одну из WinAPI функций для операций с памятью, типа RtlMoveMemory или memcpy. Возьмем первую, для вашего случая объявим её так:
Скрытый текст

Код:

function RtlMoveMemoryHDI(var Destination: hid_device_info; const Source: Longint; len: Integer): Integer; external 'RtlMoveMemory@kernel32.dll stdcall';


RtlMoveMemory копирует блок памяти размером, указанном в параметре len, начиная с адреса, указанном в параметре-указателе Source, по адресу, указанном в параметре-указателе Destination. Только вместо Destination у нас не переменная-указатель, а ссылочная переменная (наличие ключевого слова var). Это означает, что в RtlMoveMemory первым параметром будет передана не копия переменной типа hid_device_info, которая явно не 4 байта совсем, а лишь ссылка (тот же указатель с некоторыми отличиями) на нее. После отработки функции в переменной типа hid_device_info будет разименованая копия из Source. Осталось обработать полученную переменную как угодно, не забываем, что в поле next будет указатель на следующую структуру hid_device_info, обрабатываем, пока next не будет равен 0:
Скрытый текст

Код:

type
   
hid_device_info = record
       
path: String;
        vendor_id: WORD;
        product_id: WORD;
        serial_number: String;
        release_number: WORD;
        manufacturer_string: String;
        product_string: String;
        usage_page: WORD;
        usage: WORD;
        interface_number: Integer;
        next: Longint;
    end;

function HIDEnumerate(vendor_id, product_id: WORD): Longint; external 'hid_enumerate@files:hidapi.dll cdecl';
function RtlMoveMemoryHDI(var Destination: hid_device_info; const Source: Longint; len: Integer): Integer; external 'RtlMoveMemory@kernel32.dll stdcall';

///////////////////////////
procedure InitializeWizard;
var
   
LRes: Longint;
    hdi: hid_device_info;
begin
   
LRes := HIDEnumerate(0, 0);
    if LRes <> 0 then
    repeat
       
RtlMoveMemoryHDI(hdi, LRes, SizeOf(hdi));
        // чего-то делаем с hdi
   
until hdi.next = 0;
end;


PleaseTryAgain 22-04-2015 22:04 2499429

El Sanchez, огромное спасибо за развёрнутый ответ, буду разбираться

ekspoint 23-04-2015 18:42 2499868

Как сделать фон для компонент листа?

Dodakaedr 23-04-2015 21:43 2499931

Цитата:

Цитата ekspoint
Как сделать фон для компонент листа? »

через процедуру LoadBGBmpFromFile
Скрытый текст
Код:

[Files]
Source: "1.bmp"; Flags: dontcopy;
 
 
[Code] 
var
BGImgFile: String;
BorderWidth:Integer;
 
procedure InitializeWizard();
 
  ExtractTemporaryFile('1.bmp');
  BGImgFile := ExpandConstant('{tmp}\1.bmp');
  with WizardForm.ComponentsList do
  begin
  Left := (WizardForm.ClientWidth-WizardForm.ComponentsList.Width) div 2;
  Top := ScaleY(180);
  Parent := WizardForm.WelcomePage;
  Font.Color := clSilver;
  BorderWidth := (WizardForm.ComponentsList.Width-WizardForm.ComponentsList.ClientWidth) div 2;
  LoadBGBmpFromFile(BGImgFile, WizardForm.ComponentsList.Left+BorderWidth, WizardForm.ComponentsList.Top+BorderWidth);
end;



Цитата:

Цитата svs23
подскажите как скрыть стандартные заголовки? »

Скрытый текст
Код:

[setup]
appname=app
appversion=1.0
DefaultDirName={pf}\app

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
end;


бювет 23-04-2015 21:46 2499932

Очень нужна ваша помощь. С помощью программы Inno Setup и советов вашего форума сделал простенький репак игры Готика 3 с накатанными на неё Коммьюнити патчем, Квест пакетом и Контент модом (давно об этом мечтал, но не хватало знаний). Инсталятор работает прекрасно - игра устанавливается, запускается и работает стабильно (наиграл уже больше пятидесяти часов). Однако, не всё так хорошо как хотелось: при попытке удалить игру посредством встроенного деинсталятора выскакивает ошибка о том, что формат деинсталяционного файла расположенного по адресу С:\куда установлена игра\unins000.dat не может быть обнаружен (это мой вольный перевод с немецкого :) Пакет квестов и контент мод немецкого производства, пропатченные российскими умельцами до русификации.) Ясно одно: я что-то упустил при создании скрипта, а вот что? мне без помощи никогда не разобраться.
Подскажите по адресу ли я обратился? Если нет, то направте в нужную сторону. Если да, то черкните, какая нужна ещё информация.

Dodakaedr 23-04-2015 22:10 2499939

бювет, без скрипта сложновато что-то посоветовать. И как вы запускаете деинсталлятор? От куда?

бювет 24-04-2015 06:26 2499999

Запуск деинсталятора стандартный (win7), как и для всех компьютерных игр: пуск\все программы\Gothic3\Деинсталировать Gothic3. Пробовал так же удалить игру напрямую из папки с установленной игрой жамкая файл unins000.exe - та же ошибка.
Это скрипт:
Скрытый текст

[Setup]
AppId={{683EA565-2AB3-4BB5-A2C6-FE80AD463975}
AppName=GothicIII
AppVersion=1.75.14
AppVerName=GothicIII 1.75.14
AppPublisher=Piranha Bytes
AppPublisherURL=www.gothic3.com
AppSupportURL=www.gothic3.com
AppUpdatesURL=www.gothic3.com
DefaultDirName={pf}\GothicIII
DefaultGroupName=GothicIII
AllowNoIcons=yes
OutputDir=C:\Users\retur\Desktop\готика
OutputBaseFilename=setup
SetupIconFile=C:\!закачки!\Иконки\LDNetwork.ico
Compression=lzma
SolidCompression=yes
WizardImageFile=11.bmp
DiskSpanning=true
DiskSliceSize=1566000000

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Name: ukrainian; MessagesFile: compiler:Languages\Ukrainian.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: C:\Program Files (x86)\GothicIII\Gothic3.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Program Files (x86)\GothicIII\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\GothicIII; Filename: {app}\Gothic3.exe
Name: {group}\{cm:ProgramOnTheWeb,GothicIII}; Filename: www.gothic3.com
Name: {group}\{cm:UninstallProgram,GothicIII}; Filename: {uninstallexe}
Name: {commondesktop}\GothicIII; Filename: {app}\Gothic3.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\GothicIII; Filename: {app}\Gothic3.exe; Tasks: quicklaunchicon

[Run]
Filename: {app}\Gothic3.exe; Description: {cm:LaunchProgram,GothicIII}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Setup Version; ValueData: 5.5.5 (u)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: App Path; ValueData: C:\Program Files (x86)\GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: InstallLocation; ValueData: C:\Program Files (x86)\GothicIII\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Icon Group; ValueData: GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: retur
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Selected Tasks; ValueData: desktopicon
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Deselected Tasks; ValueData:
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Language; ValueData: russian
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: DisplayName; ValueData: GothicIII 1.75.14 + Update Pack v1.02 (сборка от 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: UninstallString; ValueData: "\""C:\Program Files (x86)\GothicIII\unins000.exe\"""
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: "\""C:\Program Files (x86)\GothicIII\unins000.exe\"" /SILENT"
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: DisplayVersion; ValueData: 1.75.14 + Update Pack v1.02 (сборка от 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Publisher; ValueData: Piranha Bytes & Kompany
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: URLInfoAbout; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: HelpLink; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: URLUpdateInfo; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: NoModify; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: NoRepair; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: InstallDate; ValueData: 20150423
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: MajorVersion; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: MinorVersion; ValueData: $0000004b
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: $004be622
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Setup Version; ValueData: 5.5.5 (u)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: App Path; ValueData: C:\Program Files (x86)\GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Icon Group; ValueData: GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: retur
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Selected Tasks; ValueData: desktopicon
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Deselected Tasks; ValueData:
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Language; ValueData: russian
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayName; ValueData: GothicIII 1.75.14 + Update Pack v1.02 (сборка от 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayVersion; ValueData: 1.75.14 + Update Pack v1.02 (сборка от 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Publisher; ValueData: Piranha Bytes & Kompany
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLInfoAbout; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: HelpLink; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLUpdateInfo; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoModify; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoRepair; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallDate; ValueData: 20150422
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MajorVersion; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MinorVersion; ValueData: $0000004b
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: $004be60d
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallLocation; ValueData: C:\Program Files (x86)\GothicIII\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: UninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"""
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"" /SILENT"
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Setup Version; ValueData: 5.5.5 (u)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: App Path; ValueData: C:\Program Files (x86)\GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Icon Group; ValueData: GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: retur
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Selected Tasks; ValueData: desktopicon
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Deselected Tasks; ValueData:
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Language; ValueData: russian
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayName; ValueData: GothicIII 1.75.14 + Update Pack v1.02 (сборка от 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayVersion; ValueData: 1.75.14 + Update Pack v1.02 (сборка от 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Publisher; ValueData: Piranha Bytes & Kompany
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLInfoAbout; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: HelpLink; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLUpdateInfo; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoModify; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoRepair; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallDate; ValueData: 20150422
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MajorVersion; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MinorVersion; ValueData: $0000004b
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: $004be60d
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallLocation; ValueData: C:\Program Files (x86)\GothicIII\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: UninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"""
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"" /SILENT"
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Setup Version; ValueData: 5.5.5 (u)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: App Path; ValueData: C:\Program Files (x86)\GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Icon Group; ValueData: GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: retur
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Selected Tasks; ValueData: desktopicon
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Deselected Tasks; ValueData:
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Language; ValueData: russian
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayName; ValueData: GothicIII 1.75.14 + Update Pack v1.02 (сборка от 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayVersion; ValueData: 1.75.14 + Update Pack v1.02 (сборка от 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Publisher; ValueData: Piranha Bytes & Kompany
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLInfoAbout; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: HelpLink; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLUpdateInfo; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoModify; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoRepair; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallDate; ValueData: 20150422
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MajorVersion; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MinorVersion; ValueData: $0000004b
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: $004be60d
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallLocation; ValueData: C:\Program Files (x86)\GothicIII\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: UninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"""
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"" /SILENT"

Мои изменения: WizardImageFile (вставил картинку в инсталятор), DiskSpanning, DiskSliceSize (вставил нужные параметры) и вставил ключи реестра - всё.
Несколько слов по поводу ключей реестра: что бы найти их и с помощью ISTool вставить в скрипт я как настоящий ламер запустил программу Uninstall Tool, выбрал в ней Готику 3 и нажал "принудительное удаление". Через несколько секунд программа показала все папки игры и все ключи реестра (26 элементов) которые я прилежно экспортировал в отдельную папку, а за тем через ISTool перенёс в скрипт. Там наверное много лишнего, но я посчитал, что лучше перебдеть чем недобдеть :) А если честно, то я не знаю что лишнее, а что нужное.

Nordek 24-04-2015 07:23 2500012

бювет, Это лишнее:
Скрытый текст
Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Setup Version; ValueData: 5.5.5 (u)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: App Path; ValueData: C:\Program Files (x86)\GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: InstallLocation; ValueData: C:\Program Files (x86)\GothicIII\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Icon Group; ValueData: GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: retur
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Selected Tasks; ValueData: desktopicon
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Deselected Tasks; ValueData:
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Inno Setup: Language; ValueData: russian
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: DisplayName; ValueData: GothicIII 1.75.14 + Update Pack v1.02 (ñáîðêà îò 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: UninstallString; ValueData: "\""C:\Program Files (x86)\GothicIII\unins000.exe\"""
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: "\""C:\Program Files (x86)\GothicIII\unins000.exe\"" /SILENT"
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: DisplayVersion; ValueData: 1.75.14 + Update Pack v1.02 (ñáîðêà îò 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: Publisher; ValueData: Piranha Bytes & Kompany
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: URLInfoAbout; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: HelpLink; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: URLUpdateInfo; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: NoModify; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: NoRepair; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: string; ValueName: InstallDate; ValueData: 20150423
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: MajorVersion; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: MinorVersion; ValueData: $0000004b
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{2773C4BD-B765-408E-B6BD-83FB4CA1FCF4}_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: $004be622

Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Setup Version; ValueData: 5.5.5 (u)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: App Path; ValueData: C:\Program Files (x86)\GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Icon Group; ValueData: GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: retur
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Selected Tasks; ValueData: desktopicon
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Deselected Tasks; ValueData:
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Language; ValueData: russian
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayName; ValueData: GothicIII 1.75.14 + Update Pack v1.02 (ñáîðêà îò 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayVersion; ValueData: 1.75.14 + Update Pack v1.02 (ñáîðêà îò 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Publisher; ValueData: Piranha Bytes & Kompany
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLInfoAbout; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: HelpLink; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLUpdateInfo; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoModify; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoRepair; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallDate; ValueData: 20150422
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MajorVersion; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MinorVersion; ValueData: $0000004b
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: $004be60d
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallLocation; ValueData: C:\Program Files (x86)\GothicIII\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: UninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"""
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"" /SILENT"
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Setup Version; ValueData: 5.5.5 (u)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: App Path; ValueData: C:\Program Files (x86)\GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Icon Group; ValueData: GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: retur
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Selected Tasks; ValueData: desktopicon
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Deselected Tasks; ValueData:
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Language; ValueData: russian
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayName; ValueData: GothicIII 1.75.14 + Update Pack v1.02 (ñáîðêà îò 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayVersion; ValueData: 1.75.14 + Update Pack v1.02 (ñáîðêà îò 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Publisher; ValueData: Piranha Bytes & Kompany
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLInfoAbout; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: HelpLink; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLUpdateInfo; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoModify; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoRepair; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallDate; ValueData: 20150422
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MajorVersion; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MinorVersion; ValueData: $0000004b
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: $004be60d
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallLocation; ValueData: C:\Program Files (x86)\GothicIII\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: UninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"""
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"" /SILENT"
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Setup Version; ValueData: 5.5.5 (u)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: App Path; ValueData: C:\Program Files (x86)\GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Icon Group; ValueData: GothicIII
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: User; ValueData: retur
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Selected Tasks; ValueData: desktopicon
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Deselected Tasks; ValueData:
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Inno Setup: Language; ValueData: russian
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayName; ValueData: GothicIII 1.75.14 + Update Pack v1.02 (ñáîðêà îò 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: DisplayVersion; ValueData: 1.75.14 + Update Pack v1.02 (ñáîðêà îò 09.01.2015)
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: Publisher; ValueData: Piranha Bytes & Kompany
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLInfoAbout; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: HelpLink; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: URLUpdateInfo; ValueData: http://www.nnm-club.me
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoModify; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: NoRepair; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallDate; ValueData: 20150422
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MajorVersion; ValueData: $00000001
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: MinorVersion; ValueData: $0000004b
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: dword; ValueName: EstimatedSize; ValueData: $004be60d
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: InstallLocation; ValueData: C:\Program Files (x86)\GothicIII\
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: UninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"""
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{C12E35E1-6E9C-4106-93B1-511F895431E1}_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: "\\""C:\Program Files (x86)\GothicIII\unins000.exe\\"" /SILENT"




бювет, Всё что касается раздела Uninstall, вам включать не нужно: т.к инсталлятор и так создаёт в разделе Uninstall, подраздел "{{683EA565-2AB3-4BB5-A2C6-FE80AD463975}_is1":
Код:

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{683EA565-2AB3-4BB5-A2C6-FE80AD463975}_is1
или
Код:

SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{683EA565-2AB3-4BB5-A2C6-FE80AD463975}_is1
с информацией.

Обратите внимание на две разницы:
Первая: Информация о деинсталляции произвольная, т.е создание производится самим инсталлятором.
Код:

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXX
или
Код:

SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\XXX
Вторая: Информация о деинсталляции в вашем случае прописана жёстко
Код:

SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\XXX
- это значит, что может получится так, что будет присутствовать и
Код:

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXX
и
Код:

SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\XXX

бювет 24-04-2015 15:38 2500237

Nordek, спасибо за ответ.
Я так понял, что всё что я "натягал" из реестра в сценарий скрипту и даром не нунжно?
Удалил всё, что шло ниже [Registry]. Сделал инсталлятор и установил с него игру. При попытке удаления выскакивает та же ошибка.

Nordek 24-04-2015 23:44 2500415

Цитата:

Цитата бювет
Я так понял, что всё что я "натягал" из реестра в сценарий скрипту и даром не нунжно? »

Да, т.е вам не нужно добавлять информацию в скрипт из раздела "Uninstall"
Например:
У вас имеются:
Код:

Software\MPC-HC
Код:

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1
В
Код:

Software\MPC-HC
содержится информация о настройках, которая в будущем может пригодиться (Зависит от возможностей): Может быть как добавлено содержимое в скрипт, так и нет (т.к в другом случае информация о параметрах может быть помещена в конфигурационный файл ".ini").

В
Код:

Software\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1
содержится информация о приложении, контакты и пр. В тоже время, благодаря информации которая содержится в "MPC-HC_is1", позволит без труда деинсталлировать приложение.

Т.е для деинсталляции, достаточно такой информации:
Код:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1]
"DisplayIcon"="C:\\Program Files\\MPC-HC\\mpc-hc.exe"
"DisplayName"="Media Player Classic Home Cinema"
"UninstallString"="C:\\Program Files\\MPC-HC\\uninsall.exe"

Даже при добавлении информации из "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1" в скрипт, то ранее внесённая информация в [Registry], в реестре не будет числиться. Будет внесена та информация, которая внесена в секцию [Setup]:
Код:

[Setup]
AppId=ID Приложения
AppVersion=Версия
AppPublisher=Издатель
AppPublisherURL=Сайт создателя
AppSupportURL=Поддержка
AppUpdatesURL=Обновления
UninstallDisplayName=Имя
UninstallDisplayIcon=Значок,Индекс значка
AppModifyPath=Изменения
AppComments=Комментарии
AppContact=Контакты
AppReadmeFile=Файл Readme
AppSupportPhone=Телефон

По этому, вам в секцию [Registry], добавлять информацию вида:
Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1

не нужно.
В некотором случае, добавление может стать ошибочной или не желательной (например в случае как 32-х и 64-х битных системах, одна из информации может являться неверной информацией (мусором)).


Цитата:

Цитата бювет
При попытке удаления выскакивает та же ошибка. »

Смотрите внимательно:
Код:

[Files]
Source: C:\Program Files (x86)\GothicIII\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs


Вы компилируете напрямую с "C:\Program Files (x86)\GothicIII"
В инсталляторе прописано "C:\Program Files (x86)\GothicIII\*" + Обрабатовать подкаталоги + Создавать все подкаталоги: Это значит, что в инсталлятор входит всё содержимое.
Вы не учли одно "но", то что в инсталлятор не должны входить файлы "unins000.dat" и "unins000.exe".

Чтоб не путаться, скопируйте содержимое: "C:\Program Files (x86)\GothicIII" в другое удобное место.

Например:
Зайдите в "C:\Program Files (x86)" и скопируйте от туда папку "GothicIII" на локальный диск "D:\" т.е чтоб получилось "D:\GothicIII"
Затем зайдите в "D:\GothicIII" и в папке "GothicIII" удалите "unins000.dat" и "unins000.exe".
В скрипте, в секции [Files] замените:
Код:

Source: C:\Program Files (x86)\GothicIII\Gothic3.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Program Files (x86)\GothicIII\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

на
Код:

Source: D:\GothicIII\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs



Строка вида C:\Program Files (x86)\GothicIII\Gothic3.exe вам не нужна, потому-что у вас и так входит всё содержимое каталога.

бювет 25-04-2015 06:59 2500454

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

palsn2000 25-04-2015 10:31 2500497

Здравствуйте, подскажите пожалуйста можно-ли каким-то образом перенести часть названия (текста) задачи на вторую строку.

Допустим (произвольное название)
[Tasks]
Name: zadacha1; Description: Установить/Обновить Название программы Версия программы (от: число месяц год)

Хочу чтобы на странице инсталлятора название задачи выглядело следующим образом:

Установить/Обновить Название программы
Версия программы (от: число месяц год)

Отбивать строку пробелами как-то не серьёзно (каждый раз приходится подбирать заново при наличии/отсутствии прокрутки в задачах или при изменении названия)
Есть какой-нибудь способ типа +#13#10+ или что-то типа того?

Nordek 25-04-2015 14:10 2500561

Цитата:

Цитата palsn2000
Хочу чтобы на странице инсталлятора название задачи выглядело следующим образом:
Установить/Обновить Название программы
Версия программы (от: число месяц год) »

Код:

[CustomMessages]
zadacha1=Установить/Обновить Название программы %nВерсия программы (от: число месяц год)

[Tasks]
Name: zadacha1; Description: {cm:zadacha1}


OldGamer 26-04-2015 12:16 2500861

Всем привет!

Подскажите, пожалуйста, нубу, пример кода (скрипта) на установку доп. компонентов (DirectX, Visual C++) ? :blush:
Сойдёт либо тихая установка, либо в конце шла - без разницы.

Заранее Большое Спасибо!

Dodakaedr 26-04-2015 14:07 2500922

OldGamer, Вот здесь посмотрите Ссылка
еще такое есть
Скрытый текст
Код:

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: icons\Mp; Description: Создать ярлык на рабочем столе для одиночной игры (Mp)
Name: soft; Description: Дополнительные програмное обеспечение
Name: soft\directx; Description: Обновить DirectX
Name: soft\VCCheck; Description: Установить Microsoft Visual C++
Name: soft\oalinst; Description: Установить Open AL
Name: soft\PhysX; Description: Установить Nvidia PhysX
Name: soft\ubisoft_Game_Launcher; Description: Установить Ubisoft Game Launcher
Name: icons; Description: Дополнительные значки
Name: icons\sp; Description: Создать ярлык на рабочем столе для одиночной игры (Sp)
Name: icons\Mp; Description: Создать ярлык на рабочем столе для одиночной игры (Mp)

[Run]
Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; StatusMsg: Обновление DirectX...; Tasks: soft\directx; Flags: waituntilterminated
Filename: {src}\vcredist\vcredist_x86.exe; Parameters: /q; StatusMsg: Установка Microsoft Visual C++ ...; Tasks: soft\VCCheck; Flags: runhidden waituntilterminated
Filename: {src}\Redist\oalinst.exe; Parameters: /silent; MinVersion: 4.0,5.0; StatusMsg: Идет установка дополнительных программ...; Tasks: soft\oalinst; Flags: waituntilterminated
Filename: {src}\PhysX_9.10.0224_SystemSoftware.exe; Parameters: /quiet; MinVersion: 4.0,5.0; StatusMsg: Идет установка Nvidia PhysX; Tasks: soft\PhysX; Flags: waituntilterminated
Filename: {src}\GameLauncher\UbisoftGameLauncherInstaller.exe; Parameters: /silent; MinVersion: 4.0,5.0; StatusMsg: Идет установка Ubisoft Game Launcher...; Tasks: soft\Ubisoft_Game_Launcher; Flags: waituntilterminated


aidynchik 27-04-2015 11:58 2501277

Добрый день, народ!
Подскажите пожалуйста, Inno Setup юзаю 3-ий день и потому не совсем втыкаю как и что, поэтому прошу помощи.
Задача такая - нужен установщик и апдейтер в одном. То есть если приложение не установлено - идет установка, если установлено, то соответственно обновление.
Причем при обновлении нужно копировать новый екзе, и после этого запускать второй екзешник, который будет делать обновление скриптов в базе. После всего этого закрывать установщик.
Записывать что-то в регистр не обязательно.

Как это сделать? Я нашел код сравнивающий версии файлов, впихнул его в раздел Code, но что делать дальше ума не приложу, да к тому же компилятор ругается на строку 47.
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
AppId={{1419C2B5-9C27-42DE-9424-9EB8FEEF4C3B}
AppName=MyApp
AppVersion=1.0.0.3
AppPublisher=Студия "MyApp"
DefaultDirName={pf}\MyApp
DefaultGroupName=MyApp
LicenseFile=C:\CVSWork\MyApp\license.txt
OutputDir=C:\CVSWork\MyApp\Out
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "C:\CVSWork\MyApp\ShopUchet.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\CVSWork\MyApp\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

{Code}
type
  VersionState = (vsNotInstalled, vsOlderInstalled, vsSameInstalled, vsNewerInstalled);

function GetVersionState(): VersionState;
var
  ExePath: String;
  VersionMS, VersionLS: Cardinal;
begin
  ExePath := ExpandConstant('{app}\MyApp.exe');
  if GetVersionNumbers(ExePath, VersionMS, VersionLS) then begin
    if (VersionMS < {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS < {#VersionLS})) then begin
      Result := vsOlderInstalled;
    end else if (VersionMS > {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS > {#VersionLS})) then begin
      Result := vsNewerInstalled;
    end else begin
      Result := vsSameInstalled;
    end;
  end else begin
    Result := vsNotInstalled;
  end;
end;

function OnNextButtonClick(CurPageId: Integer): Boolean;
begin
  Result := True;
  if CurPageId = wpSelectDir then begin
    if GetVersionState() = vsNewerInstalled then begin
      Result := SuppressibleMsgBox('A newer version of the application is already installed.  Are you sure you want to '
        + 'downgrade to {#MyAppVersion}?', mbConfirmation, MB_YESNO, IDYES) = IDYES;
    end;
  end;
end;

[Icons]
Name: "{group}\ShopUchet"; Filename: "{app}\MyApp.exe"
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: quicklaunchicon

[Run]
Filename: "{app}\MyApp.exe"; Description: "{cm:LaunchProgram,MyApp}"; Flags: nowait postinstall skipifsilent

строка, на которую ругается компилятор "if (VersionMS < {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS < {#VersionLS})) then begin"

kotyarko@fb 27-04-2015 13:12 2501325

Цитата:

Цитата aidynchik
строка, на которую ругается компилятор "if (VersionMS < {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS < {#VersionLS})) then begin" »

Вы не указали эти директивы, вот и ругается.
Перед секцией [Setup] (ну или же в любом месте, где вам угодно), прописываете:
Код:

#define VersionMS "необходимое_вам_значение"
#define VersionLS "необходимое_вам_значение"

З.ы. это директивы препроцессора, встроенного в компилятор. Не все компиляторы имеют его.

aidynchik 28-04-2015 06:27 2501630

Цитата:

Вы не указали эти директивы, вот и ругается.
Перед секцией [Setup] (ну или же в любом месте, где вам угодно), прописываете:
спасибо, вставил директивы. А что дальше делать, как заставить теперь сработать эту функцию?
Т.к. установка проходит вполне гладко, и пошагово компилятор туда не заходит

kotyarko@fb 28-04-2015 11:28 2501708

Цитата:

Цитата aidynchik
А что дальше делать, как заставить теперь сработать эту функцию? »

Переименуйте функцию OnNextButtonClick на NextButtonClick.

aidynchik 28-04-2015 14:04 2501781

спасибо! =)
теперь не подскажете - как все-таки сделать, если программа уже установлена, то обновить ТОЛЬКО лишь екзешник а не все файлы с папки, и запустить второй exe-файл, который будет обновлять БД?

Dodakaedr 29-04-2015 09:12 2502097

Цитата:

Цитата aidynchik
теперь не подскажете - как все-таки сделать, если программа уже установлена, то обновить ТОЛЬКО лишь екзешник а не все файлы с папки »

Для обновления файлов используйте флаг onlyifdoesntexist(установить если файл отсутствует) а для exe-шника ignoreversion(игнорировать, заменить)
Код:

[Files]
Source: 1.dll; DestDir: {app}; Flags: onlyifdoesntexist
Source: help.chm; DestDir: {app}; Flags: onlyifdoesntexist
Source: MyProg.exe; DestDir: {app}; Flags: ignoreversion

Цитата:

Цитата aidynchik
и запустить второй exe-файл, который будет обновлять БД? »

А для этой задачи есть секция Run, в справке все подробно описывается.

maraby 29-04-2015 10:20 2502127

привет!

Как сделать зависимость инсталяции компонентов от версии системы (будет один RadioButton будет активный - MS SQL Server 2008 или 2012, или оба - если версия виндовса поддерживает обе программы) ?

Win < 6.0 - только 2008
Win >6.1 - только 2012
Win = 6.0 or 6.1 - 2008 и 2012

Благодарю!!
:)

Dodakaedr 29-04-2015 10:23 2502130

Как в inno сгенерировать случайное число на 10 цифр?

aidynchik 29-04-2015 13:07 2502192

я извиняюсь, но почему-то этот код не работает :(
ставлю версию 1.0.0.5 на версию 1.0.0.4 - пишет что новейшая версия уже установлена...
Код:

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{1419C2B5-9C27-42DE-9424-9EB8FEEF4C3B}
AppName=MyApp
AppVersion=1.0.0.5
;AppVerName=MyApp 1.0.0.5
AppPublisher=Студия "Автоматизация ИП"
AppPublisherURL=http://MyApp.kz/
AppSupportURL=http://MyApp.kz/
AppUpdatesURL=http://MyApp.kz/
DefaultDirName={pf}\MyApp
DefaultGroupName=MyApp
LicenseFile=C:\CVSWork\MyAppFB\MyApp32\license.txt
OutputDir=C:\CVSWork\MyAppFB\MyApp32
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "C:\CVSWork\MyAppFB\MyApp32\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\CVSWork\MyAppFB\MyApp32\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files


#define VersionMajor
#define VersionMinor
#define VersionRevision
#define VersionBuild
#expr ParseVersion("MyApp.exe", VersionMajor, VersionMinor, VersionRevision, VersionBuild)
#define VersionMS ((VersionMajor << 16) + VersionMinor)
#define VersionLS ((VersionRevision << 16) + VersionBuild)

{Code}
type
  VersionState = (vsNotInstalled, vsOlderInstalled, vsSameInstalled, vsNewerInstalled);

function GetVersionState(): VersionState;
var
  ExePath: String;
  VersionMS, VersionLS: Cardinal;
  VersionMSs : Cardinal;
begin
  ExePath := ExpandConstant('{app}\MyApp.exe');
  if GetVersionNumbers(ExePath, VersionMS, VersionLS) then begin
    if (VersionMS < {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS < {#VersionLS})) then begin
      Result := vsOlderInstalled;
    end else if (VersionMS > {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS > {#VersionLS})) then begin
      Result := vsNewerInstalled;
    end else begin
      Result := vsSameInstalled;
    end;
  end else begin
    Result := vsNotInstalled;
  end;
end;

function NextButtonClick(CurPageId: Integer): Boolean;
var VersState : VersionState;
begin
  Result := True;
  if CurPageId = wpSelectDir then begin
    VersState := GetVersionState();
    if (VersState = vsNewerInstalled) or (VersState = vsSameInstalled) then begin
      MsgBox('Последняя версия программного продукта уже установлена. Установка будет отменена.', mbConfirmation, MB_OK);
      Result := False;
      WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
    end;
  end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
    Confirm := false;
end;

[Icons]
Name: "{group}\MyApp"; Filename: "{app}\MyApp.exe"
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: quicklaunchicon

[Run]
Filename: "{app}\MyApp.exe"; Description: "{cm:LaunchProgram,MyApp}"; Flags: nowait postinstall skipifsilent

что я написал не так?

OldGamer 29-04-2015 19:31 2502314

Help! В конце установки Visual C++ выбивает ошибку :shocked: (при этом компоненты в систему устанавливаются):

http://i58.fastpic.ru/big/2015/0429/...974a13031c.png

С чем эта проблема связана?
(скину скрипт при необходимости)

R.i.m.s.k.y. 29-04-2015 19:46 2502319

aidynchik, у тебя переменные с версиями обнулены
#define VersionMajor
#define VersionMinor
#define VersionRevision
#define VersionBuild


OldGamer, залил на говнохостинг - сиди жди у моря погоды

OldGamer 29-04-2015 20:14 2502326

R.i.m.s.k.y., заменил ссылку.

R.i.m.s.k.y. 29-04-2015 20:22 2502330

OldGamer, потому что в скрипте обращаешься к несуществующему элементу

OldGamer 30-04-2015 01:42 2502425

Цитата:

Цитата R.i.m.s.k.y.
потому что в скрипте обращаешься к несуществующему элементу

Что-то не получается разобраться... :cry:

Пожалуйста, помогите сделать))

Вот сам скрипт https://yadi.sk/d/0Ds5IKzvgLcnb

R.i.m.s.k.y. 30-04-2015 11:14 2502509

OldGamer, запусти компиляцию и выполнение в инно по F9, и инно опдстветит тебе ошибочную строчку
так я криминала не вижу

aidynchik 30-04-2015 12:15 2502528

Цитата:

Цитата R.i.m.s.k.y.
aidynchik, у тебя переменные с версиями обнулены
#define VersionMajor
#define VersionMinor
#define VersionRevision
#define VersionBuild »

а разве следующая строка "#expr ParseVersion("MyApp.exe", VersionMajor, VersionMinor, VersionRevision, VersionBuild)"
не должна его разложить?

что мне вбивать в эти переменные, если устанавливаемая версия 1.0.0.5?
#define VersionMajor = 1
#define VersionMinor = 0
#define VersionRevision = 0
#define VersionBuild = 5

так?

P.S. ну вроде так работает. Причем со строкой "#expr ParseVersion("MyApp.exe", VersionMajor, VersionMinor, VersionRevision, VersionBuild)" и без нее

aidynchik 30-04-2015 12:56 2502550

еще вопрос - вот тут посоветовали секцию RUN для запуска второго екзешника, который будет обновлять скрипты БД.
Но дело в том, что запускать его надо, только если это обновление. Если это первичная установка - то ничего делать не надо...
Как это реализовать?

есть идея - сохранять его в папку tmp и запускать оттуда в секции RUN, но опять же делать это надо не всегда. И потом как затем найти папку TMP в секции RUn?

R.i.m.s.k.y. 30-04-2015 12:59 2502551

Цитата:

Цитата aidynchik
а разве следующая строка "#expr ParseVersion("MyApp.exe", VersionMajor, VersionMinor, VersionRevision, VersionBuild)"
не должна его разложить? »

не должна потому что компилятор ищет MyApp.exe рядом с собой или в Path и вряд ли она там лежит, а путь у тебя не прописан

OldGamer 30-04-2015 13:14 2502564

Цитата:

Цитата R.i.m.s.k.y.
запусти компиляцию и выполнение в инно по F9, и инно опдстветит тебе ошибочную строчку
так я криминала не вижу

Выполнил по F9 - всё тоже самое и ни на что не жалуется...

Может Visual C++ надо устанавливать отдельно (разными экзешниками) для x86 и x64 ?
(у меня в одном .exe устанавливается сразу оба x86 & x64 - https://yadi.sk/d/akr1NmFYgMCso )

---------
Проверил - установка с отдельными (vcredist_x86.exe и vcredist_x64.exe) проходит "на ура!"
Ради эксперимента было бы интересно узнать: то, что в одном экзе (по ссылке) - возможно ли выполнить без ошибок?

dracosha 30-04-2015 16:51 2502624

OldGamer, нужно выполнить компиляцию по клавише F9, после компиляции установщик запускается в режиме debug, и не закрывая окно компилятора производишь установку, а там где происходит ошибка - компилятор ее отобразит в своем окне. Скриншот в студию :)

OldGamer 30-04-2015 17:13 2502629

dracosha,
Спасибо, действительно нашлась ошибка:

http://i59.fastpic.ru/big/2015/0430/...efa4400b58.png

Dodakaedr 30-04-2015 18:21 2502649

OldGamer, Если нужен отмеченный чекбокс, то не проще в секции [Run] напротив нужного убрать флаг unchecked?
Код:

[Run]
Filename: {src}\Redistributable\DirectX\DXSETUP.exe; Parameters: /silent; Tasks: DirectX; StatusMsg: Обновление DirectX...
Filename: {src}\Redistributable\Redist\vcredist_x64_2010.exe; Parameters: /q; Tasks: Redist; StatusMsg: Установка Microsoft Visual С++ 2010 Redistributable (32 & 64-bit)
Description: {cm:LaunchProgram, MyProg (Part One)}; Filename: {app}\MyProg (Part One).exe; WorkingDir: {app}; Flags: nowait postinstall skipifsilent
Description: {cm:LaunchProgram, MyProg (Part Two)}; Filename: {app}\MyProg (Part Two).exe; WorkingDir: {app}; Flags: nowait postinstall skipifsilent unchecked
Description: {cm:LaunchProgram, MyProg-Options}; Filename: {app}\MyProg-Options.exe; WorkingDir: {app}; Flags: nowait postinstall skipifsilent unchecked


OldGamer 01-05-2015 00:16 2502722

Спасибо всем за помощь! Всё работает! :rupor:

4o_kavo 01-05-2015 17:35 2502871

Нужна помощь для создания Setup программой Inno Setup
 
Всем привет.
Нужна помощь для создания Setup файла с помощью программы Inno Setup, кто умеет обращаться с этой программой, будьте добры, отпишитесь мне в ЛС или в теме, я займу у вас не более 5 минут.

K.A.V. 01-05-2015 17:49 2502876

А выше тема вам чем не понравилась? Скрипты Inno Setup. Помощь и советы [часть 8]

Макс_Скоробогатов@vk 01-05-2015 21:53 2502934

Помогите, уже 3 дня голову ломаю…
Как установить скин??? У меня Inno Setup Compiler 5.5.1.ee2(u)
[Files]
Source: cybertron.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external ‘LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external ‘UnloadSkin@files:isskin.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile(‘cybertron.cjstyles’);
LoadSkin(ExpandConstant(‘{tmp}\cybertron.cjstyles’), »);
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;
Выдает ошибку на строке
procedure DeinitializeSetup();
собсна ошибка
Duplicate identifier «DEINITIALIZESETUP»

сколько не пробЫвал найти дубликат не где не чего подобного не вижу!

Nordek 02-05-2015 11:19 2502998

Цитата:

Цитата Макс_Скоробогатов@vk
Как установить скин??? »

Код:

#define A = (Defined UNICODE) ? "W" : "A"

[Files]
Source: cybertron.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin{#A}.dll; DestDir: {tmp}; Flags: dontcopy

[Code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin{#A}.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin{#A}.dll stdcall';

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('cybertron.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\cybertron.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
  UnloadSkin();
end;


Nordek 03-05-2015 10:19 2503215

Цитата:

Цитата maraby
Как сделать зависимость инсталяции компонентов от версии системы »

Пример:
Код:

[Components]
Name: "cp"; Description: "Компонент"; MinVersion: 0,5.0; OnlyBelowVersion: 0,6.0

Далее: #1974, #1977, #1809, #1816.


Скрытый текст

MinVersion: Минимальная версия Windows, для которой вхождение будет обработано
OnlyBelowVersion: Противоположно MinVersion. Определяет минимальную версию Windows, для которой вхождение не будет обработано
Код:

4.0,        - Windows 95

4.1,        - Windows 98

4.9,        - Windows ME

0,4.0      - Windows NT 4.0
0,4.0sp1    - Windows NT 4.0 Service Pack 1
0,4.0sp2    - Windows NT 4.0 Service Pack 2
0,4.0sp3    - Windows NT 4.0 Service Pack 3
0,4.0sp4    - Windows NT 4.0 Service Pack 4
0,4.0sp5    - Windows NT 4.0 Service Pack 5
0,4.0sp6    - Windows NT 4.0 Service Pack 6

0,5.0      - Windows 2000
0,5.0sp1    - Windows 2000 Service Pack 1
0,5.0sp2    - Windows 2000 Service Pack 2
0,5.0sp3    - Windows 2000 Service Pack 3
0,5.0sp4    - Windows 2000 Service Pack 4

0,5.01      - Windows XP/Windows XP 64-Bit Edition Version 2002 (Itanium)
0,5.01sp1  - Windows XP Service Pack 1
0,5.01sp2  - Windows XP Service Pack 2
0,5.01sp3  - Windows XP Service Pack 3
0,5.02      - Windows XP x64 Edition (AMD/EM64T)
0,5.01      - Windows XP 64-Bit Edition Version 2002 (Itanium)
0,5.02      - Windows XP 64-Bit Edition Version 2003 (Itanium)

0,6.0      - Windows Vista
0,6.0sp1    - Windows Vista Service Pack 1
0,6.0sp2    - Windows Vista Service Pack 2

0,6.1      - Windows 7
0,6.1sp1    - Windows 7 Service Pack 1

0,5.02      - Windows Server 2003
0,5.02sp1  - Windows Server 2003 Service Pack 1
0,5.02sp2  - Windows Server 2003 Service Pack 2
0,5.02      - Windows Server 2003 R2

0,6.0      - Windows Server 2008
0,6.1      - Windows Server 2008 R2

0,6.2      - Windows 8

0,6.3      - Windows 8.1

0,6.4      - Windows 10

Примечание:
В списке могут попадаться одинаковые значения, например: для Windows Vista: 0,6.0; для Windows Server 2008: 0,6.0 - это не опечатка, 0,6.0 равнозначен как для Windows Vista так для Windows Server 2008.
По этому, достаточно один раз выставить значение 0,6.0 - отработает как для Windows Vista так для Windows Server 2008.

Значения могут применяться как для MinVersion, так для OnlyBelowVersion.

Dodakaedr 03-05-2015 12:58 2503247

Цитата:

Цитата Nordek
MinVersion: Минимальная версия Windows, для которой вхождение будет обработано
OnlyBelowVersion: Противоположно MinVersion. Определяет минимальную версию Windows, для которой вхождение не будет обработано ....»

Для секции Code имеется такой список?

maraby 05-05-2015 15:02 2504033

Nordek, спасибо огромное! На прошлой неделе сделала что-то такое. Не знаю, насколько изящно, но работает :)

Версии Винды и установка MS SQL 2008/ 2012

Код:

begin
    GetWindowsVersionEx(Version);

  // On Windows < 6.0
  if (Version.Major < 6) then begin
      TypSerweraCheckListBox.ItemEnabled[IndexSerwera2008] := True;
      TypSerweraCheckListBox.Checked[IndexSerwera2008] := True;
     
      TypSerweraCheckListBox.ItemEnabled[IndexSerwera2012] := False;
      TypSerweraCheckListBox.Checked[IndexSerwera2012] := False;
 
  end

  // Windows 6.0 || 6.1
  else if (Version.Major = 6) and (Version.Minor >= 0)
          and (Version.Minor <= 1)
  then  begin
      TypSerweraCheckListBox.ItemEnabled[IndexSerwera2008] := True;
      TypSerweraCheckListBox.Checked[IndexSerwera2008] := True;
     
      TypSerweraCheckListBox.ItemEnabled[IndexSerwera2012] := True;
      TypSerweraCheckListBox.Checked[IndexSerwera2012] := False;
  end

  else begin
      TypSerweraCheckListBox.ItemEnabled[IndexSerwera2008] := False;
      TypSerweraCheckListBox.Checked[IndexSerwera2008] := False;
     
      TypSerweraCheckListBox.ItemEnabled[IndexSerwera2012] := True;
      TypSerweraCheckListBox.Checked[IndexSerwera2012] := True;
  end
  end;



А есть еще один вопрос: как можно получить список инстанций MS SQL? Даже не знаю, как и что в гугле спрашивать... :(

Николай_Николаич@vk 07-05-2015 19:40 2504846

Здравствуйте.
Как сделать так, чтобы при установке в файл (который уже есть на диске) добавлялись строчки которые указаны в инсталяторе.

Dodakaedr 07-05-2015 20:26 2504865

Цитата:

Цитата Николай_Николаич@vk
Как сделать так, чтобы при установке в файл (который уже есть на диске) добавлялись строчки которые указаны в инсталяторе. »

Типа такого?
Код:

[setup]
appname=app
appvername=app 1.0
DefaultDirName={pf}\app

[files]
Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: "Changestring"; Flags: ignoreversion

[Code]
procedure Changestring;
begin
  if FileExists(ExpandConstant('{app}\MYPROG.EXE')) then
    RenameFile(ExpandConstant('{app}\MYPROG.EXE'), ExpandConstant('{app}\MYPROG_текст.EXE_или здесь что-то'));
end;


Николай_Николаич@vk 07-05-2015 20:46 2504877

Цитата:

Цитата Dodakaedr
Типа такого?
Код:
[setup]
appname=app
appvername=app 1.0
DefaultDirName={pf}\app
[files]
Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: "Changestring"; Flags: ignoreversion
[code]
procedure Changestring;
begin
if FileExists(ExpandConstant('{app}\MYPROG.EXE')) then
RenameFile(ExpandConstant('{app}\MYPROG.EXE'), ExpandConstant('{app}\MYPROG_текст.EXE_или здесь что-то'));
end;
------- »


Нет.
К примеру в пути game/mods/01/ есть файл file.cti. При установке в папку mods/01/ установщик дописывал бы в файл file.cti пару строчек которые указываешь в скрипте.

Dodakaedr 07-05-2015 20:55 2504879

Цитата:

Цитата Николай_Николаич@vk
Нет.
К примеру в пути game/mods/01/ есть файл file.cti. При установке в папку mods/01/ установщик дописывал бы в файл file.cti пару строчек которые указываешь в скрипте. »

А что по вашему значить "дописывал бы в файл file.cti пару строчек"? Какие строчки?

Николай_Николаич@vk 07-05-2015 21:21 2504896

Цитата:

Цитата Dodakaedr
А что по вашему значить "дописывал бы в файл file.cti пару строчек"? Какие строчки? »

в нем строчки к примеру такие.
HTML код:

[item]
1
farbschema_tex1
main1.bmp

Нужно чтобы во время установки дописывалось в конец данного документа (file.cti) :

Код:

[item]
2
farbschema_tex1
main2.bmp


и получалось

Код:

[item]
1
farbschema_tex1
main1.bmp

[item]
2
farbschema_tex1
main2.bmp


Dodakaedr 07-05-2015 21:40 2504909

Цитата:

Цитата Николай_Николаич@vk
в нем строчки к примеру такие. »

А вот какой файл... ну тогда так:
Код:

[setup]
appname=app
appvername=app 1.0
DefaultDirName={pf}\app

[Code]
procedure Changestring;
var
s: string;
begin
s := +#13#10+ '[item]' +#13#10+ '2' +#13#10+ 'farbschema_tex1' +#13#10+ 'main2.bmp';
  if FileExists(ExpandConstant('{app}\file.cti')) then
  SaveStringToFile(ExpandConstant('{app}\file.cti'), s, True);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then Changestring;
end;


Николай_Николаич@vk 07-05-2015 21:57 2504914

Цитата:

Цитата Dodakaedr
А вот какой файл... ну тогда так:
Код:
[setup]
appname=app
appvername=app 1.0
DefaultDirName={pf}\app
[code]
procedure Changestring;
var
s: string;
begin
s := +#13#10+ '[item]' +#13#10+ '2' +#13#10+ 'farbschema_tex1' +#13#10+ 'main2.bmp';
if FileExists(ExpandConstant('{app}\file.cti')) then
SaveStringToFile(ExpandConstant('{app}\file.cti'), s, True);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then Changestring;
end; »

Спасибо огромное, помогло.

AlexM22204 08-05-2015 10:37 2505038

Вложений: 1
Всем здравствуйте и с наступающим праздником ПОБЕДЫ!!! :up:
Сделал для себя перепаковку программы USB Safely Remove, всё получилось хорошо, но остались два вопроса ("косметического плана - уборка за собой") :cool: :
1) При запуске программа создаёт дополнительную ветку в реестре HKLM\SOFTWARE\SafelyRemove. Как прописать её удаление при деинсталяции в скрипте.
2) При запуске программа создаёт лог событий USBSRService (c:\ProgramData\USBSRService\USBSRService.log.txt). Как прописать удаление папки с логом (c:\ProgramData\USBSRService) при деинсталяции в скрипте.
Вот мой скрипт. Если есть ещё замечания по скрипту - приму с удовольствием (только учусь) :o

R.i.m.s.k.y. 08-05-2015 10:52 2505039

AlexM22204,

1.
[Registry]
Root: HKLM; SubKey: SOFTWARE\SafelyRemove; Flags: uninsdeletekey noerror

2.[UninstallDelete]
Type: filesandordirs; Name: "{commonappdata}\USBSRService"

Цитата:

Цитата AlexM22204
Вот мой скрипт. Если есть ещё замечания по скрипту - приму с удовольствием (только учусь »

Filename: "{win}\regedit.exe"; Parameters: "-s ""{src}\USBSafelyRemoveSettings.reg"""; StatusMsg: "Внесение настроек в реестр..."

покажи USBSafelyRemoveSettings.reg, а то может ты там вносишь в х64 секции реестра

AlexM22204 08-05-2015 11:09 2505048

R.i.m.s.k.y.,
Цитата:

Цитата R.i.m.s.k.y.
2.[UninstallDelete]
Type: filesandordirs; Name: "{commonappdata}\USBSRService" »

Тут всё удалилось, без вопросов.
А вот ветка в реестре HKLM\SOFTWARE\SafelyRemove не удаляется, хоть тресни, может как по другому. :( Хотя вручную всё удаляется...
А также таким батником всё удаляется...
Скрытый текст
@Echo Off
Reg Delete "HKLM\SOFTWARE\SafelyRemove" /f
Pause

Цитата:

Цитата R.i.m.s.k.y.
AlexM22204, попробуй запусти деинсталлятор от админа »

не помогло...
Цитата:

Цитата R.i.m.s.k.y.
покажи USBSafelyRemoveSettings.reg, а то может ты там вносишь в х64 секции реестра »

Скрытый текст
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\SafelyRemove\Options]

; Спятать иконку, когда нет устройств для остановки
"AutoHideIcon"="1"
; Показывать количество отображаемых устройств в трей-иконке
"ShowCountOfDevicesInTrayIcon"="1"
; Упрощённое меню
"SimpleMenu"="1"

R.i.m.s.k.y. 08-05-2015 11:12 2505052

AlexM22204, попробуй запусти деинсталлятор от админа

R.i.m.s.k.y. 08-05-2015 11:30 2505055

AlexM22204, это очень плохой тон - отвечать выше

убери noerror и удали еще раз - что напишет покажи
и проверь правильность написания Software\SafelyRemove

AlexM22204 08-05-2015 11:47 2505065

Цитата:

Цитата R.i.m.s.k.y.
AlexM22204, это очень плохой тон - отвечать выше »

Извиняюсь исправлюсь! Не удалилось...

R.i.m.s.k.y. 08-05-2015 11:56 2505070

AlexM22204, хз
либо права на ветку не даны, либо написание (копировать из реестра название разделов - вставлять в скрипт)

svs23 08-05-2015 20:14 2505275

помогите.
в коде где-то косяк. при выборе "неправильной" папки для установки появляется окно с сообщением что выбрана неправильная папка, но после нажатия ок проходит дальше на следующую страницу, хотя должна остаться на странице выбора папки для установки

kotyarko@fb 09-05-2015 10:29 2505398

Цитата:

Цитата svs23
при выборе "неправильной" папки для установки появляется окно с сообщением что выбрана неправильная папка, но после нажатия ок проходит дальше на следующую страницу, хотя должна остаться на странице выбора папки для установки »

444 строка, уберите Result := True;
Какой смысл всех тех проверок и указаний "Result := False", если в конце функции Result всё равно приравнивается к True?

svs23 09-05-2015 12:54 2505424

kotyarko@fb, не очень силен в этом. спс

Цитата:

Цитата kotyarko@fb
444 строка, уберите Result := True;
Какой смысл всех тех проверок и указаний "Result := False", если в конце функции Result всё равно приравнивается к True? »

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

kotyarko@fb 09-05-2015 13:31 2505438

svs23, там ещё после каждого прохода "if CurPageID = ComponentsPage1.ID" Result`у присваивался True.
Пробуйте: [ссылка удалена].

з.ы. подправил проверку версии патча.

OldGamer 09-05-2015 14:49 2505458

Доброго дня!

Подскажите, пожалуйста, как сделать отображение процентов установки?

svs23 09-05-2015 15:00 2505463

Цитата:

Цитата kotyarko@fb
svs23, там ещё после каждого прохода "if CurPageID = ComponentsPage1.ID" Result`у присваивался True.
з.ы. подправил проверку версии патча. »

огромное человеческое спасибо....

kotyarko@fb 09-05-2015 15:07 2505466

Цитата:

Цитата OldGamer
Подскажите, пожалуйста, как сделать отображение процентов установки? »

Пример в конце поста.

palsn2000 10-05-2015 14:13 2505758

kotyarko@fb, OldGamer, Здравствуйте, можно мне присоединиться к вашей теме отображения процентов установки?

В обновлённом примере благодаря правке El Sanchez-а процент выполнения прогрессбара дописывается к уже имеющемуся тексту, а можно ли процент выполнения связать с каким нибудь TLabel1, поместить этот TLabel1 например на середину прогресс бара и чтобы отображалось от 0 до 100 % в течение установки?

Николай_Николаич@vk 12-05-2015 00:42 2506217

Еще раз здравствуйте.
Подскажите, как сделать проверку на наличие папки.
Например, путь установки такой - C:\MyProgram\
Если в папке MyProgram есть папка Prog - то все отлично, если же её нету, то предупреждение в окошке.

kotyarko@fb 12-05-2015 08:44 2506269

Цитата:

Цитата Николай_Николаич@vk
Подскажите, как сделать проверку на наличие папки. »

Например, так:
Код:

Function NextButtonClick(CurPageID: Integer): Boolean;
begin
 Result := True;
 case CurPageID of
  wpSelectDir:
  begin
  if not DirExists(ExpandConstant('{app}\Prog')) then
  begin
    MsgBox('Выбрана не верная папка', mbError, MB_OK);
    Result := False;
  end;
  end;
 end;
end;

palsn2000, я точно не уверен, не пробовал. Но на прогрессбар разве лейбл станет?

Kashtan007 12-05-2015 12:34 2506354

Привет всем.
Как сделать, чтобы деинсталятор удалял заранее указанные папки?
Например: У меня есть папка res_mods, в не папка mods и папка 0.9.7.
Мне нужно чтобы деинсталятор удалил папку mods и очистил папку 0.9.7

Nordek 12-05-2015 14:08 2506388

Цитата:

Цитата Kashtan007
Как сделать, чтобы деинсталятор удалял заранее указанные папки? »

Пример:
Код:

[UninstallDelete]
Name: {userappdata}\res_mods; Type: filesandordirs


Kashtan007 12-05-2015 18:55 2506495

Nordek, файл удалять по такому же способу?

Dodakaedr 12-05-2015 19:29 2506506

Цитата:

Цитата Kashtan007
файл удалять по такому же способу? »

Инфа из справки. По-моему все доходчиво описано
Цитата:

Это не обязательная секция. В ней указываются дополнительные файлы или папки, которые деинсталлятор должен удалить, кроме тех, которые были установлены/созданы с помощью параметров секций [Files] или [Dirs]. Главным образом эта секция используется для удаления .INI файлов, созданных вашим приложением. Деинсталлятор выполняет эти параметры в конце деинсталляции.

Пример секции [UninstallDelete]:

Код:

[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"

Список поддерживаемых параметров:
Type (Обязательно)
Указывает тип удаляемого объекта. Может быть следующим:

files
Параметр Name указывает имя отдельного файла или маску.

filesandordirs
То же, что files за исключением, что также можно задать имя папки: в этом случае удаляются все ее файлы и подпапки.

dirifempty
При использовании этого типа параметр Name должен задавать папку, но не содержать масок. Папка будет удалена, только если она пустая.

Например:
Код:

Type: files


Name (Обязательно)
Имя удаляемого файла или папки.

Внимание! Не торопитесь использовать здесь маски для удаления всех файлов папки {app}. Строго рекомендуется не делать этого по двум причинам. Во-первых, пользователи обычно не любят, когда данные, введенные ими в директории приложения, удаляются без предупреждения (они могут удалить их просто потому, что хотят, например, переместить программу в папку на другом диске). Будет лучше оставить файлы, чтобы при желании пользователь потом сам удалил их. Во-вторых, если пользователь по ошибке установит приложение не в ту папку (например, в C:\WINDOWS) и потом удалит его оттуда, это может привести к плачевным последствиям. Так что НЕ ДЕЛАЙТЕ ЭТОГО!

Например:
Код:

Name: "{win}\MYPROG.INI"


palsn2000 12-05-2015 19:46 2506514

Цитата:

Цитата kotyarko@fb
palsn2000, я точно не уверен, не пробовал. Но на прогрессбар разве лейбл станет? »

Я имел ввиду не лэйбл для прогрессбара, А просто произвольный лэйбл, который можно расположить на прогрессбаре (прогрессбар на нижнем слое - лэйбл выще и просто накладывается).
Но в общем речь не об этом, а о том, что мои познания в программировании близки к нулю, и сам я не понимаю как (и вообще можно ли) проценты установки связать с дэйблом, а не сообщением.

У Вас там используется SetupMessage(msgStatusExtractFiles)
Код:

function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    if Msg = PBM_SETPOS then with WizardForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [SetupMessage(msgStatusExtractFiles), FormatFloat('0.#0 %', (ProgressGauge.Position*100)/ProgressGauge.Max)]) );

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;

А я спрашиваю можно ли как нибудь вот это (ProgressGauge.Position*100)/ProgressGauge.Max) в процентах или даже без процентов связать с произвольным лэйблом или произвольным текстом, который можно бы было наложить на прогрессбар?

Может я не совсем правильно объясняю, чего хочу, вот для примера картинка:

El Sanchez 12-05-2015 20:45 2506549

palsn2000, например, так:
Скрытый текст

Код:

function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

var
   
PercentLabel: TLabel;

///////////////////////////
procedure InitializeWizard;
begin
   
{ PercentLabel }
   
PercentLabel := TLabel.Create(WizardForm);
    with PercentLabel do
    begin
       
Parent := WizardForm.ProgressGauge;
        Align := alClient;
        Alignment := taCenter;
        Layout := tlCenter;
        Transparent := True;
    end;
end;

/////////////////////////////////////////////////////////////////////////////////////////
function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    case
Msg of
       
PBM_SETPOS:
            begin
               
Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
                with WizardForm.ProgressGauge do
                   
PercentLabel.Caption := Format('%d %%', [MulDiv(Position, 100, Max)]);
            end;
    else
       
Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
    end;
end;


Dodakaedr 12-05-2015 22:41 2506600

Цитата:

Цитата El Sanchez
например, так: »

полный рабочий пример можете привести?

Николай_Николаич@vk 12-05-2015 23:12 2506618

Цитата:

Цитата kotyarko@fb
Например, так:
Код:
Function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
begin
if not DirExists(ExpandConstant('{app}\Prog')) then
begin
MsgBox('Выбрана не верная папка', mbError, MB_OK);
Result := False;
end;
end;
end;
end; »

Немного не то.

Нужно что то типо этого:

Код:

if not FileExists(AddBackslash(WizardForm.DirEdit.Text) + 'Prog.exe') then
только проверка не на файл, а папку.

El Sanchez 13-05-2015 09:05 2506735

Цитата:

Цитата Dodakaedr
полный рабочий пример можете привести? »

Dodakaedr, пример:
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Files]
Source: compiler:Languages\*; DestDir: {app}

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
   
WM_USER = $0400;
    PBM_SETPOS = (WM_USER + 2);
    GWL_WNDPROC = (-4);
    GWL_USERDATA = (-21);

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

var
   
InstPercentLabel: TLabel;

///////////////////////////////
procedure CreateInstallingPage;
begin
   
{ InstPercentLabel }
   
InstPercentLabel := TLabel.Create(WizardForm);
    with InstPercentLabel do
    begin
       
Parent := WizardForm.ProgressGauge;
        Align := alClient;
        Alignment := taCenter;
        Layout := tlCenter;
        Transparent := True;
    end;
end;

///////////////////////////////////////////////////////////////////////////////////////
function ProgressGaugeWndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
begin
    case
Msg of
       
PBM_SETPOS:
            begin
               
Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
                with WizardForm.ProgressGauge do
                   
InstPercentLabel.Caption := Format('%d %%', [MulDiv(Position, 100, Max)]);
            end;
    else
       
Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

///////////////////////////
procedure SubclassControls;
begin
   
{ ProgressGauge }
   
with WizardForm.ProgressGauge do
    begin
        if
GetWindowLong(Handle, GWL_USERDATA) = 0 then
           
SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, CallbackAddr('ProgressGaugeWndProc')));
    end;
end;

///////////////////////////
procedure InitializeWizard;
begin
   
CreateInstallingPage;
    SubclassControls;
end;

/////////////////////////////
procedure UnSubclassControls;
begin
   
{ ProgressGauge }
   
with WizardForm.ProgressGauge do
    begin
        if
GetWindowLong(Handle, GWL_USERDATA) > 0 then
           
SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));
    end;
end;

////////////////////////////
procedure DeinitializeSetup;
begin
    if
ExpandConstant('{wizardhwnd}') = '0' then
       
Exit;
    UnSubclassControls;
end;


Цитата:

Цитата Николай_Николаич@vk
Нужно что то типо этого:
Код:
if not FileExists(AddBackslash(WizardForm.DirEdit.Text) + 'Prog.exe') then
только проверка не на файл, а папку. »

Николай_Николаич@vk,
Скрытый текст

Код:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
   
Result := True;
    case CurPageID of
       
wpSelectDir:
            if DirExists(ExpandConstant('{app}\MyProg')) then
               
MsgBox('bla-bla-bla', mbInformation, MB_OK);
    end;
end;


Dodakaedr 13-05-2015 16:30 2506951

El Sanchez, можно реализовать этот вопрос? http://forum.oszone.net/post-2502130-555.html

kotyarko@fb 13-05-2015 17:01 2506958

Цитата:

Цитата Dodakaedr
Как в inno сгенерировать случайное число на 10 цифр? »

Например, так:
Код:

Function InitializeSetup(): Boolean;
var
 I: Integer;
 S: String;
begin
 S := '';
 for I := 0 to 9 do
 begin
  S := S + IntToStr(Random(9));
 end;
 MsgBox(S, mbInformation, MB_OK);
 Result := False;
end;


Николай_Николаич@vk 14-05-2015 22:34 2507416

Цитата:

Цитата El Sanchez
Код:
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
if DirExists(ExpandConstant('{app}\MyProg')) then
MsgBox('bla-bla-bla', mbInformation, MB_OK);
end;
end; »

С этим вообще ничего не происходит, устанавливается всегда.

maraby 15-05-2015 11:07 2507625

Цитата:

А есть еще один вопрос: как можно получить список инстанций MS SQL? Даже не знаю, как и что в гугле спрашивать...

Последний раз редактировалось maraby, 05-05-2015 в 15:21.

В общем, получилось :)
Использовала RegGetValueNames. Единственное, если RootKey указать как HKEY_LOCAL_MACHINE - то возвращает пустой список.
В общем надо указать HKLM64

Вопрос: а если инстанция SQL 32-разрядная?

Код:


 procedure UzupelniNazweInstancjiSQL;
 var
  Names: TArrayOfString;
  I: Integer;
  S: String;

begin
  if RegGetValueNames(HKLM64, 'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL', Names)
  then
  begin
    S := '';
    SerwerInstancja.Items.Clear;
    for I := 0 to GetArrayLength(Names)-1
    do
      begin
      S := S + Names[i] + #13#10;
      SerwerInstancja.Items.Add(S);
      end;
  end else
  begin
    // add any code to handle failure here
        MsgBox(' :( ', mbInformation, MB_OK);
  end;
end;


kotyarko@fb 15-05-2015 15:01 2507721

Цитата:

Цитата maraby
а если инстанция SQL 32-разрядная? »

Попробуйте так:
код
Код:

procedure UzupelniNazweInstancjiSQL;
 var
  Names: TArrayOfString;
  I, RegName: Integer;
  S: String;

begin
 if IsWin64 then
  RegName := HKLM64
 else
  RegName := HKLM32;

  if RegGetValueNames(RegName, 'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL', Names)
  then
  begin
    S := '';
    SerwerInstancja.Items.Clear;
    for I := 0 to GetArrayLength(Names)-1
    do
      begin
      S := S + Names[i] + #13#10;
      SerwerInstancja.Items.Add(S);
      end;
  end else
  begin
    // add any code to handle failure here
        MsgBox(' :( ', mbInformation, MB_OK);
  end;
end;



з.ы. вместо HKLM32, вроде, можете использовать просто HKLM.

maraby 15-05-2015 15:50 2507733

kotyarko@fb
Спасибо :)
В принципе ведь нужен список всех инстанций?
поэтому сделала так (правда еще не тестила):

Скрытый текст

Код:

begin
  if RegGetValueNames(HKLM64, 'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL', Names64) 
  or RegGetValueNames(HKLM32, 'SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\Instance Names\SQL', Names32)
  then
  begin
    S := '';
    SerwerInstancja.Items.Clear;
   
    for I := 0 to GetArrayLength(Names64)-1
    do
    begin
      SerwerInstancja.Items.Add(Names64[i]+ #13#10);
    end;
   
    for I := 0 to GetArrayLength(Names32)-1
    do
      begin
      SerwerInstancja.Items.Add(Names32[i] + #13#10);
      end;
  end else
  begin
    // add any code to handle failure here
        MsgBox(' :( ', mbInformation, MB_OK);
  end;
end;


El Sanchez 16-05-2015 15:34 2508034

Цитата:

Цитата Николай_Николаич@vk
С этим вообще ничего не происходит, устанавливается всегда. »

Цитата:

Цитата Николай_Николаич@vk
Если в папке MyProgram есть папка Prog - то все отлично, если же её нету, то предупреждение в окошке. »

Николай_Николаич@vk, ну, я и сделал предупреждение, сообщил и продолжил далее. Так?
Скрытый текст

Код:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
   
Result := True;
    case CurPageID of
       
wpSelectDir:
            begin
               
Result := not DirExists(ExpandConstant('{app}\MyProg'));
                if not Result then
                   
MsgBox('bla-bla-bla', mbInformation, MB_OK);
            end;
    end;
end;


Николай_Николаич@vk 16-05-2015 18:17 2508074

Цитата:

Цитата El Sanchez
ну, я и сделал предупреждение, сообщил и продолжил далее. Так?
Скрытый текст
Код:
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
begin
Result := not DirExists(ExpandConstant('{app}\MyProg'));
if not Result then
MsgBox('bla-bla-bla', mbInformation, MB_OK);
end;
end;
end; »

Ну дело в том, что нет предупреждения, независимо от того, если ли папка Prog или нету.

Dodakaedr 17-05-2015 00:10 2508174

Николай_Николаич@vk, попробуйте так
Скрытый текст
Код:

[setup]
appname=app
appvername=1.0 app
defaultdirname={sd}\app
DirExistsWarning=no

[Code]
function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;
    case CurPageID of
        wpSelectDir:
            begin
                Result := DirExists(ExpandConstant('{app}\MyProg'));
                if not Result then
                    MsgBox('bla-bla-bla', mbInformation, MB_OK);
            end;
    end;
end;


Николай_Николаич@vk 17-05-2015 03:50 2508203

El Sanchez, Dodakaedr, Спасибо, разобрался.

Не подскажите как брать путь установки из реестра.
Например:
Если в реестре есть только ключ -
SOFTWARE\1
Dir - C:\1

То берем C:\1

А если в реестре есть

SOFTWARE\2
Dir - C:\2

То путь установки будет из 2-го.

если имеется два ключа, путь бы брался из второго - C:\2

Dodakaedr 17-05-2015 09:42 2508244

Цитата:

Цитата Николай_Николаич@vk
Не подскажите как брать путь установки из реестра. »

Приблизительно так
Скрытый текст
Код:

[setup]
appname=app
appvername=1.0 app
defaultdirname={code:GetDir}

[Code]
function GetDir(S: string): string;
var
d,r: string;
begin
  S := ExpandConstant('{pf}\app');
 if RegKeyExists(HKLM, 'Software\1') then begin
  if RegQueryStringValue(HKLM, 'Software\1', 'Dir', d) then
  S := d;
  end;
  if RegKeyExists(HKLM, 'Software\2') then begin
  if RegQueryStringValue(HKLM, 'Software\2', 'Dir', r) then
  S := r;
  end;
  if RegValueExists(HKLM, 'Software\1', 'Dir') and RegValueExists(HKLM, 'Software\2', 'Dir') then
  s := r;
  Result := S;
end;


Okta_333 18-05-2015 11:30 2508621

Доброго времени суток!
Помогите пожалуйста сделать панельку (не логотип), как на втором скрине:
Скрины



Панель представлена в виде PNG-картинки. Открывается с нажатием на кнопку. В активном режиме панели деактивируются CancelButton и NextButton.
MusicButton и VolPB не интересуют.

Николай_Николаич@vk 18-05-2015 22:43 2508856

Здравствуйте.
Подскажите, как такое реализовать.
Путь установки C:\Prog
в папке Prog есть папка Prog1
И в этой папке куча папок.
Так вот, как сделать чтобы один файл file.hof раскидать по папкам которые находятся в папке Prog1

ekspoint 20-05-2015 04:57 2509236

Цитата:

Цитата Николай_Николаич@vk
как сделать чтобы один файл file.hof раскидать по папкам которые находятся в папке Prog1 »

Код:

FileCopy(ExpandConstant('{app}\Prog\Prog1\file.hof'), ExpandConstant('{app}\Prog\Prog1\Prog1_1\file.hof'),false);
FileCopy(ExpandConstant('{app}\Prog\Prog1\file.hof'), ExpandConstant('{app}\Prog\Prog1\Prog1_2\file.hof'),false);


kotyarko@fb 20-05-2015 21:12 2509544

ekspoint, для индусов такой вариант в самый раз подходит (это я про тот случай, если вложенных папок, например, 30). И не факт, что имеющиеся папки имеют не уникальные имена.

Цитата:

Цитата Николай_Николаич@vk
Путь установки C:\Prog
в папке Prog есть папка Prog1
И в этой папке куча папок.
Так вот, как сделать чтобы один файл file.hof раскидать по папкам которые находятся в папке Prog1 »

Например так:
Код:

var
 TFR: TFindRec;
begin
 if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
  try
  repeat
    if (TFR.Name <> '.') and (TFR.Name <> '..') then
    if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
      FileCopy(ExpandConstant('{app}\file.hof'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name + '\file.hof', False);
  until not FindNext(TFR);
  finally
  FindClose(TFR);
  end;
end;


Dodakaedr 21-05-2015 00:11 2509619

Цитата:

Цитата Николай_Николаич@vk
Так вот, как сделать чтобы один файл file.hof раскидать по папкам которые находятся в папке Prog1 »

Наглядный пример использования))
Скрытый текст
Код:

[setup]
appname=test
appvername=test 1.0
defaultdirname={sd}\test

[files]
source: file.hof; destdir: {app};

[dirs]
name: {app}\Prog\Prog1\1;
name: {app}\Prog\Prog1\2g;
name: {app}\Prog\Prog1\3k;
name: {app}\Prog\Prog1\4i;

[code]
procedure SendFileToSubFolders;
var
 TFR: TFindRec;
begin
 if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
  try
  repeat
    if (TFR.Name <> '.') and (TFR.Name <> '..') then
    if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
      FileCopy(ExpandConstant('{app}\file.hof'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name + '\file.hof', False);
  until not FindNext(TFR);
  finally
  FindClose(TFR);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then SendFileToSubFolders;
end;


Николай_Николаич@vk 23-05-2015 00:28 2510448

Цитата:

Цитата Dodakaedr
Наглядный пример использования))
Скрытый текст
Код:
[setup]
appname=test
appvername=test 1.0
defaultdirname={sd}\test
[files]
source: file.hof; destdir: {app};
[dirs]
name: {app}\Prog\Prog1\1;
name: {app}\Prog\Prog1\2g;
name: {app}\Prog\Prog1\3k;
name: {app}\Prog\Prog1\4i;
[code]
procedure SendFileToSubFolders;
var
TFR: TFindRec;
begin
if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
FileCopy(ExpandConstant('{app}\file.hof'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name + '\file.hof', False);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then SendFileToSubFolders;
end;
»

Спасибо, а не подскажете, как по такому же принципу раскидать папку

kotyarko@fb 23-05-2015 01:16 2510450

Цитата:

Цитата Николай_Николаич@vk
Спасибо, а не подскажете, как по такому же принципу раскидать папку »

Используйте SHFileOperation, в нём есть функция CopyDir.

Николай_Николаич@vk 23-05-2015 02:13 2510453

Цитата:

Цитата kotyarko@fb
Используйте SHFileOperation, в нём есть функция CopyDir. »

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

kotyarko@fb 23-05-2015 02:21 2510456

Цитата:

Цитата Николай_Николаич@vk
А вы не могли бы привести пример копирования в папки, как с файлом.
а то кроме как просто копировать, ничего не получается. »

Код:

#include "SHFileOperation.iss"
.....
var
 TFR: TFindRec;
begin
 if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
  try
  repeat
    if (TFR.Name <> '.') and (TFR.Name <> '..') then
    if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
      CopyDir(ExpandConstant('{app}\Folder'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name);     
  until not FindNext(TFR);
  finally
  FindClose(TFR);
  end;
end;

Сам SHFileOperation можете спокойно найти в сети.

Николай_Николаич@vk 23-05-2015 12:41 2510528

Цитата:

Код:
#include "SHFileOperation.iss"
.....
var
TFR: TFindRec;
begin
if FindFirst(ExpandConstant('{app}\Prog\Prog1\') + '*', TFR) then
try
repeat
if (TFR.Name <> '.') and (TFR.Name <> '..') then
if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
CopyDir(ExpandConstant('{app}\Folder'), ExpandConstant('{app}\Prog\Prog1\') + TFR.Name);
until not FindNext(TFR);
finally
FindClose(TFR);
end;
end;
Сам SHFileOperation можете спокойно найти в сети.
Спасибо огромное, но есть одна проблема, в папки у которых в имени есть _ не копируется.

kotyarko@fb 23-05-2015 13:38 2510538

Вложений: 1
Цитата:

Цитата Николай_Николаич@vk
но есть одна проблема, в папки у которых в имени есть _ не копируется. »

Код, по идеи, не должен игнорировать такие папки. У меня не игнорирует (пруф в прикреплённом скрине).
Не знаю, почему у тебя так.

Николай_Николаич@vk 23-05-2015 20:43 2510672

Цитата:

Цитата kotyarko@fb
Код, по идеи, не должен игнорировать такие папки. У меня не игнорирует (пруф в прикреплённом скрине).
Не знаю, почему у тебя так. »

Если внести папку в секцию [dirs] то все хорошо.
Еще случай, один раз инсталл пропустил папку с названием "1", при повторной попытке всетаки скопировал.

kotyarko@fb 23-05-2015 20:48 2510673

Цитата:

Цитата Николай_Николаич@vk
Еще случай, один раз инсталл пропустил папку с названием "1", при повторной попытке всетаки скопировал. »

Папки создаются при этой же инсталляции?

Николай_Николаич@vk 23-05-2015 21:04 2510679

Цитата:

Цитата kotyarko@fb
Папки создаются при этой же инсталляции? »

Нет, они уже были.

kotyarko@fb 23-05-2015 21:23 2510685

Цитата:

Цитата Николай_Николаич@vk
Нет, они уже были. »

Тогда хз.

Snoopak96 23-05-2015 22:03 2510701

Николай_Николаич@vk,
код
Код:

[setup]
appname=test
appvername=test 1.0
defaultdirname={sd}\test

[code]
type
  TSHFileOpStruct =  record
    Wnd: HWND;
    wFunc: UINT;
    pFrom: PAnsiChar;
    pTo: PAnsiChar;
    fFlags: Word;
    fAnyOperationsAborted: BOOL;
    hNameMappings: HWND;
    lpszProgressTitle: PAnsiChar;
  end;

const
  FO_MOVE                    = $0001;
  FO_COPY                    = $0002;
  FOF_SILENT                = $0004;
  FOF_NOCONFIRMATION        = $0010;
  FOF_FILESONLY              = $0080;
  FOF_NOCONFIRMMKDIR        = $0200;

function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer; external 'SHFileOperation@shell32.dll stdcall';

function BackupDir(const fromDir, toDir: AnsiString; IsMove: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: AnsiString;
  SR: TFindRec;
  res: Boolean;
begin
    ForceDirectories(toDir);
  if IsMove then
    fos.wFunc  := FO_MOVE else
    fos.wFunc  := FO_COPY;
    fos.fFlags := FOF_FILESONLY or FOF_SILENT or
              FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
    _fromDir:= AddBackslash(fromDir);
    _toDir  := AddBackslash(toDir);
  if (Length(fromDir) = Length(_fromDir)) then
    begin
        res:= FindFirst(_fromDir + '*', SR);
      try
        while res do
        begin
          if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
          begin
            if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir + #0#0;
                fos.pFrom  := PAnsiChar(_fromDir);
                fos.pTo    := PAnsiChar(_toDir);
              end else
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir  + SR.Name + #0#0;
                fos.pFrom  := PAnsiChar(_fromDir);
                fos.pTo    := PAnsiChar(_toDir);
              end;
                Result := (0 = ShFileOperation(fos));
                _fromDir:= ExtractFilePath(_fromDir);
                _toDir:= ExtractFilePath(_toDir);
          end;
          res := FindNext(SR);
        end;
      finally
        FindClose(SR);
      end;
    end else
    begin
      _fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0;
      _toDir  := RemoveBackslashUnlessRoot(_toDir)  + #0#0;
      fos.pFrom  := PAnsiChar(_fromDir);
      fos.pTo    := PAnsiChar(_toDir);
      Result := (0 = ShFileOperation(fos));
    end;
end;

procedure SendFileToSubFolders(ScanDir, InFile: string);
var
 TFR: TFindRec;
begin
 if FindFirst(AddBackslash(RemoveBackslash(ScanDir)) + '*', TFR) then
  try
  repeat
    if (TFR.Name <> '.') and (TFR.Name <> '..') then
    if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then begin
        FileCopy(InFile, AddBackslash(RemoveBackslash(ScanDir)) + TFR.Name + '\' + ExtractFileName(InFile), False);
      end;
  until not FindNext(TFR);
  finally
  FindClose(TFR);
  end;
end;

procedure SendDirToSubFolders(ScanDir, InDir: string);
var
 TFR: TFindRec;
begin
 if FindFirst(AddBackslash(RemoveBackslash(ScanDir)) + '*', TFR) then
  try
  repeat
    if (TFR.Name <> '.') and (TFR.Name <> '..') then
    if (TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
        BackupDir(AddBackslash(RemoveBackslash(InDir)), AddBackslash(RemoveBackslash(ScanDir)) + TFR.Name + '\' + ExtractFileName(InDir), false);
  until not FindNext(TFR);
  finally
  FindClose(TFR);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  //Для файла
//  if CurStep = ssPostInstall then SendFileToSubFolders(ExpandConstant('{app}\1'), ExpandConstant('{sd}\spyhunter.log'));
  //Для папки
  if CurStep = ssPostInstall then SendDirToSubFolders(ExpandConstant('{app}\1'), ExpandConstant('{sd}\sh4ldr'));
end;


svs23 23-05-2015 22:35 2510710

сори что не в тему!!!
kotyarko@fb ящик ЛС полный! новые сообщения не уходят...

Николай_Николаич@vk 23-05-2015 23:20 2510723

Кстати, не подскажете, давно искал пример двойного прогресс бара (Один по файловый, второй - общий прогресс), но никак не мог найти.
Есть ли таковой?

Okta_333 24-05-2015 02:06 2510762

Цитата:

Цитата Николай_Николаич@vk
Кстати, не подскажете, давно искал пример двойного прогресс бара (Один по файловый, второй - общий прогресс), но никак не мог найти.
Есть ли таковой? »

В ISDone 06final есть пример SecondProgressBar

Николай_Николаич@vk 24-05-2015 21:48 2510964

Цитата:

Цитата Okta_333
В ISDone 06final есть пример SecondProgressBar »

Он без Isdone работает?

OldGamer 25-05-2015 18:47 2511234

Всем привет!

Подскажите, пожалуйста, как изменить стандартное окно выбора языков установки?
Нужно точно так, как на скриншоте

1. В шапке - название программы;
2. "Выберите язык установщика" по-английски и по-русски в 2 строки;
3. Названия языков чтоб отображались через "/".

vint56 26-05-2015 15:33 2511590

OldGamer, вот пример автор sergey3695 я его не много подправил под твой скрин http://rghost.ru/8tQSLWRVD
вот мой скрин

sergey3695 26-05-2015 19:22 2511703

vint56, (Unicode)
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[LangOptions]
english.LanguageName=English / Английский
russian.LanguageName=Russian / Русский


Dodakaedr 26-05-2015 23:15 2511779

OldGamer, Еще один вариант, чисто средствами inno
Скрытый текст
Код:

[Setup]
AppName=app
AppVersion=1.5
DefaultDirName={sd}\app

[Files]
Source: compiler:WizModernSmallImage-IS.bmp; DestName: "1.bmp"; Flags: dontcopy

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[LangOptions]
english.LanguageName=English / Английский
russian.LanguageName=Russian / Русский

[Messages]
SelectLanguageLabel=Please select a language.%nВыберите язык установщика.
SelectLanguageTitle=Ashampoo® Burning Studio 15

[Code]
function InitializeLanguageDialog(): Boolean;
begin
  with SelectLanguageForm do
    begin
      ExtractTemporaryFile('1.bmp');
      IconBitmapImage.SetBounds(ScaleX(IconBitmapImage.Left), ScaleY(IconBitmapImage.Top), ScaleX(55), ScaleY(55));
      IconBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
      SelectLabel.Left := ScaleX(SelectLanguageForm.SelectLabel.Left + 25);
      LangCombo.SetBounds(ScaleX(LangCombo.Left + 25), ScaleY(LangCombo.Top), ScaleX(LangCombo.Width - 60), ScaleY(LangCombo.Height));
    end;
  result := true;
end;


OldGamer 27-05-2015 00:58 2511802

Всем большое спасибо за примеры выше - всё работает :up

habib2302 27-05-2015 13:53 2511965

Цитата:

Цитата OldGamer
как изменить стандартное окно выбора языков установки? »

А как просто заменить bmp на png?

Dodakaedr 27-05-2015 14:27 2511972

Цитата:

Цитата habib2302
А как просто заменить bmp на png? »

Через ботву.

habib2302 27-05-2015 14:28 2511974

Dodakaedr, ну понятно, что через ботву. я что-то сделал, но не работает
Код:

#include "botva2.iss"
[Setup]
AppName=DrawImageExample by South.Tver
AppVerName=DrawImageExample by South.Tver
DefaultDirName={pf}\ImageExample
OutputBaseFilename=setup
RawDataResource=Botva:botva2.dll|Lang.png

[Code]
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
    lResStream: TResourceStream;
begin
    lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
    try
        lResStream.SaveToFile(ExpandConstant('{tmp}\') + SaveFileName);
    finally
        lResStream.Free;
        Result := FileExists(ExpandConstant('{tmp}\') + SaveFileName);
    end;
end;


procedure InitializeWizard;
var
    IPLang: THandle;
begin
    with WizardForm do
    begin
        if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_LANG', 'Lang.png') then
        begin
            IPLang := ImgLoad(SelectLanguageForm.Handle, ExpandConstant('{tmp}\Lang.png'), 5, 5, 40, 40, True, True);
            ImgSetVisibility(IPLang, True);
            ImgApplyChanges(SelectLanguageForm.Handle);
        end;
    end;
end;

procedure DeinitializeSetup();
begin
    if FileExists(ExpandConstant('{tmp}\') + 'botva2.dll') then gdipShutDown();
end;

/////////////////////////////////////////////////////////////////////


Dodakaedr 27-05-2015 14:43 2511981

habib2302, здесь реализовано http://forum.oszone.net/post-2511590-643.html

habib2302 27-05-2015 15:08 2511990

Dodakaedr, там много лишнего
вот скомпилировал скрипт и вот что получилось

Т.е. изображение выделенное красным должно быть совершенно в другом месте (в SelectLanguageForm)

Dodakaedr 27-05-2015 15:46 2512005

Цитата:

Цитата habib2302
Т.е. изображение выделенное красным должно быть совершенно в другом месте (в SelectLanguageForm) »

Ну так поместите его туда.

vint56 27-05-2015 15:52 2512010

habib2302,
Цитата:

там много лишнего
читать дальше »
#define MyAppName "Ashampoo® Burning Studio 15"
#define MyAppVersion "15.0.4.4"
#define InstallFiles "InstallFiles"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
RawDataResource=Botva:{#InstallFiles}\botva2.dll|b2p:{#InstallFiles}\b2p.dll|Icon:{#InstallFiles}\Ic on.png

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[LangOptions]
english.LanguageName=English / Английский
russian.LanguageName=Russian / Русский

[Files]
Source: "InstallFiles\*"; Flags: dontcopy;

[code]
const
RT_RCDATA = 10;

type
#ifdef UNICODE
PChar = PAnsiChar;
#endif

var
IconPanel : TPanel;

function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean):Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisibility(img :Longint; Visible :boolean); external 'ImgSetVisibility@{tmp}\b2p.dll stdcall delayload';
procedure ImgApplyChanges(h: HWND); external'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external'gdipShutdown@{tmp}\botva2.dll stdcall delayload';

function ExtractResource(var ResourceList: TStringList): Boolean;
var
ResStreams: array of TResourceStream;
ResName, ResFile: String;
i: Integer;
begin
if ResourceList = nil then Exit;
Result := ResourceList.Count > 0;
SetArrayLength(ResStreams, ResourceList.Count);
try
for i := 0 to ResourceList.Count-1 do
try
ResName := Trim( Copy(ResourceList.Strings[i], 1, Pos(',', ResourceList.Strings[i])-1) );
ResFile := Trim( Copy(ResourceList.Strings[i], Pos(',', ResourceList.Strings[i])+1, Length(ResourceList.Strings[i])-Pos(',', ResourceList.Strings[i])) );
ResStreams[i] := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
ResStreams[i].SaveToFile(ExpandConstant('{tmp}\') + ResFile);
Result := Result and FileExists(ExpandConstant('{tmp}\') + ResFile);
finally
ResStreams[i].Free;
end;
finally
ResourceList.Free;
end;
end;

function InitializeLanguageDialog(): Boolean;
var
IconHandle: THandle;
ResList: TStringList;
begin
ResList := TStringList.Create;
ResList.Add('_IS_b2p, b2p.dll');
ResList.Add('_IS_BOTVA, botva2.dll');
ResList.Add('_IS_Icon, Icon.png');

IconPanel := TPanel.Create(SelectLanguageForm);
with IconPanel do
begin
Parent := SelectLanguageForm;
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(100);
Height := ScaleY(100);
BevelOuter := bvNone;
end;

with SelectLanguageForm do
begin
if ExtractResource(ResList) then
begin
Width := ScaleX(315);
Height := ScaleY(155);
IconHandle := ImgLoad(IconPanel.Handle, ExpandConstant('{tmp}\Icon.png'), 0, 0, 100,100, True, True);
IconBitmapImage.Hide;
ImgApplyChanges(IconPanel.Handle);
SelectLabel.Left := ScaleX(SelectLanguageForm.SelectLabel.Left + 65);
LangCombo.SetBounds(ScaleX(LangCombo.Left + 65), ScaleY(LangCombo.Top), ScaleX(LangCombo.Width - 60), ScaleY(LangCombo.Height));
SelectLabel.Caption:='Please select a language.'#13'Выберите язык установщика.';
end;
result := true;
end;
end;

procedure DeinitializeSetup;
begin
if FileExists(ExpandConstant('{tmp}\') + 'botva2.dll') then gdipShutDown;
end;

habib2302 27-05-2015 18:52 2512068

Не получается
https://yadi.sk/d/6zebFSKAguVwA
и как убрать это

Shift85 28-05-2015 20:46 2512503

Цитата:

Цитата habib2302
и как убрать это »

Код:

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:=False;
end;


vint56 28-05-2015 21:00 2512510

habib2302, http://rghost.ru/7s2pJXVgj

habib2302 28-05-2015 21:40 2512527

не отображается


vint56 28-05-2015 22:23 2512543

habib2302, uinocode

TrueMage 30-05-2015 11:56 2513047

Господа, пожалуйста, помогите или хотя бы сориентируйте куда копать. :)

Задача следующая: нужно установить мод в определенную папку на жестком диске, исходя из следующих условий, размещенных в порядке важности

Вариант 1 (чистая установка)
а) Если есть ключ реестра "reg:HKCU\SOFTWARE\Blizzard Entertainment\Diablo II", то оттуда как "InstallPath\BFE",
б) Если на жестких дисках есть файл, скажем, patch_d2.mpq, то в каталог, который содержит этот файл плюс, опять же, "\BFE"
в) если нет ни того ни того, то в {pf}\BFE.

Вариант 2 (установка обновления)
а) просто в папку, куда была установлена предыдущая версия.

Возможно ли это вообще? Заранее очень благодарен.

kotyarko@fb 30-05-2015 12:55 2513064

TrueMage, в принципе, ничего особенного. Но в этом варианте:
Цитата:

Цитата TrueMage
б) Если на жестких дисках есть файл, скажем, patch_d2.mpq, то в каталог, который содержит этот файл плюс, опять же, "\BFE" »

поиск будет не самый быстрый. Будет напрямую зависеть от забитости хардов.

TrueMage 30-05-2015 14:46 2513087

Цитата:

Цитата kotyarko@fb
поиск будет не самый быстрый. Будет напрямую зависеть от забитости хардов. »

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

kotyarko@fb 30-05-2015 18:01 2513155

Цитата:

Цитата TrueMage
Я это понимаю. Но я не вижу другого варианта для российских пользователей, которые не озабачиваются лицензионностью игр и, соответственно, игра может быть просто скопирована, при этом ключ в реестре будет отсутствовать. »

Поверьте мне, так лучше не делать.
А если нужный файл будет располагаться, например, где-то на системном диске? На его поиски могут уйти часы (в зависимости от имеющегося железа).
Было бы легче, раз в 10, если бы нужно было найти определённую папку.. А тут файл, будет не поиск, а безудержное веселье)

TrueMage 30-05-2015 19:18 2513183

К сожалению не существует какого-то определенного имени папки, которое можно было бы поискать. Но вы правы, я, пожалуй, откажусь от этой идеи. Буду ставить банально либо по InstallPath из реестра, либо, если такого ключа нет, то в PF. Спасибо за помощь. :)

habib2302 31-05-2015 17:06 2513454

как заменить последнюю страницу на msgbox о завершении установки

kotyarko@fb 31-05-2015 18:49 2513495

Цитата:

Цитата habib2302
как заменить последнюю страницу на msgbox о завершении установки »

Как-то так (написал по-быстрому, не проверил):
Код:

[Setup]
DisableFinishedPage=yes

[*Code]
Procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = ssDone then
  MsgBox('Установка завершена!', mbInformation, MB_OK);
end;


AlekseyPopovv 04-06-2015 20:02 2515039

Всем привет. Вопрос:
Мне через реестр нужно найти папку:
[HKEY_CURRENT_USER\Software\AlekseyPopovv]
"CaptureFolder"="C:\\Foto"
Эта папка может быть в любом другом месте и называться по другому.
Потом нужно проверить существует ли папка и выдать запрос на удаление.
Как это сделать?

kotyarko@fb 04-06-2015 20:40 2515046

AlekseyPopovv, так?
Код:

var
 Path: String;
begin
 if RegQueryStringValue(HKCU, 'Software\AlekseyPopovv', 'CaptureFolder', Path) and (Path <> '') then
  if DirExists(ExpandConstant(Path)) then
  if MsgBox('Обнаружена существующая папка ' + Path + #13#10 + 'Удалить её?', mbConfirmation, MB_YESNO) = IDYES then
    DelTree(ExpandConstant(Path), True, True, True);
end;


habib2302 04-06-2015 21:59 2515080

Как добавить checkbox в деинсталлятор для удаления сохранок\настроек

Dodakaedr 04-06-2015 22:06 2515081

habib2302, через msgbox проще.

habib2302 04-06-2015 22:20 2515086

Dodakaedr, подскажите скрипт

kotyarko@fb 04-06-2015 23:37 2515103

habib2302, типа такого:
Код:

Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if CurUninstallStep = usUninstall then
  if MsgBox('Сохранить настройки?', mb_Confirmation, MB_YESNO) = IDYES then
  ...
end;

И прописываете ваш код сохранения.

TryRooM 04-06-2015 23:40 2515105

habib2302, Пробуйте
Скрытый текст
[code]
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
 begin
 if (CurUninstallStep = usUninstall) and DirExists(ExpandConstant('{userappdata}\Proga')) then
 begin
  if MsgBoxEx(UninstallProgressForm.Handle, 'Вы хотите удалить настройки?', 'Удаление настроек', MB_YESNO or MB_ICONQUESTION, 0, 0) = IDYES then
  DelTree(ExpandConstant('{userappdata}\Proga'), True, True, True);
  end;
  if (CurUninstallStep = usPostUninstall)  then
    if MsgBox('Вы хотите удалить ключ активации?', mbInformation, MB_YESNO) = idYes then
    RegDeleteKeyIncludingSubkeys(HKCU, 'SOFTWARE\Progasoft\key');
  // RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Progasoft\key');
  // RegDeleteKeyIncludingSubkeys(HKLM64, 'SOFTWARE\Progasoft\key');
end;


AlekseyPopovv 05-06-2015 02:49 2515116

kotyarko@fb, Да, всё получилось.

AlekseyPopovv 06-06-2015 14:26 2515502

Как создать файл .txt через procedure CurStepChanged(CurStep: TSetupStep);?

TryRooM 06-06-2015 15:35 2515512

AlekseyPopovv, Примерно так
Скрытый текст
Код:

procedure CurStepChanged(CurStep: TSetupStep);
  begin
  if  CurStep=ssPostInstall then
    begin
    SaveStringToFile(ExpandConstant('{userdesktop}\Registration.txt'), #13#10 + 'твой номер' + #13#10, True);
    end
  end;


PlanktoN 07-06-2015 23:18 2515814

Помогите! Как поставить фоновое изображение в инсталлятор как у механиков на всех страницах.Чтоб слова и тд были видны. SOS

PlanktoN 08-06-2015 22:25 2516287

И еще! Игра пиратка. В нем есть файл rev.ini. Как изменить ник через инсталлер.(Создать страницу для смены ника)

AlekseyPopovv 09-06-2015 09:29 2516416

Мне через файл ini нужно найти папку:
[Splash]
CaptureFolder=C:\Foto
Эта папка может быть в любом другом месте и называться по другому.
Потом нужно проверить существует ли папка и выдать запрос на удаление.
Как это сделать?

El Sanchez 09-06-2015 11:58 2516484

Цитата:

Цитата AlekseyPopovv
Мне через файл ini нужно найти папку:
[Splash]
CaptureFolder=C:\Foto
Эта папка может быть в любом другом месте и называться по другому.
Потом нужно проверить существует ли папка и выдать запрос на удаление.
Как это сделать? »

AlekseyPopovv,
Скрытый текст

Код:

procedure DeleteCaptureFolder;
var
   
CaptureFolder: String;
begin
   
CaptureFolder := GetIniString('Splash', 'CaptureFolder', '', 'где-то там\file.ini');
    if DirExists(CaptureFolder) and (MsgBox('Удалить папку?', mbConfirmation, MB_YESNO) = IDYES) then
       
DelTree(CaptureFolder, True, True, True);
end;


AlekseyPopovv 09-06-2015 13:05 2516511

El Sanchez, А через procedure CurUninstallStepChanged как? Или не получится?

El Sanchez 09-06-2015 13:26 2516522

Цитата:

Цитата AlekseyPopovv
А через procedure CurUninstallStepChanged как? »

AlekseyPopovv,
Скрытый текст

Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
   
CaptureFolder: String;
begin
    case
CurUninstallStep of
       
usPostUninstall:
            begin
               
CaptureFolder := GetIniString('Splash', 'CaptureFolder', '', 'где-то там\file.ini');
                if DirExists(CaptureFolder) and (MsgBox('Удалить папку?', mbConfirmation, MB_YESNO) = IDYES) then
                   
DelTree(CaptureFolder, True, True, True);
            end;
    end;
end;


habib2302 09-06-2015 21:50 2516759

Доброе время суток. как вам объяснить!? Короче. Как сделать проверку на использование команды /DIR?
Т.е инсталл запущенный с командой /DIR, то приложение указанное в разделе [Run] должно запускаться с командой (Filename: {tmp}\nsis.exe; Parameters: /D={app};)
если инсталл запущенный без команды /DIR, то приложение должно запускаться без команды (Filename: {tmp}\nsis.exe;)

kotyarko@fb 09-06-2015 23:05 2516783

habib2302, по идеи, должно работать..:
Код:

[Run]
Filename: {tmp}\nsis.exe; Parameters: "/D={app}"; Check: DIRParamExists();
Filename: {tmp}\nsis.exe; Check: not DIRParamExists();

[*Code]
Function DIRParamExists(): Boolean;
var
 I: Integer;
begin
 for I := 1 to ParamCount do
  case (Uppercase(ParamStr(I)) = '/DIR') of
  True: Result := True
  False: Result := False;
  end;
end;

Но можно сделать и красивее, если в параметре "Parameters" (тавтология она такая:)) использовать команду {code:..} (если её там можно использовать вообще, точно не знаю).

El Sanchez 10-06-2015 09:32 2516885

Цитата:

Цитата kotyarko@fb
по идеи, должно работать »

kotyarko@fb, не будет. Если /DIR не последний параметр, то DIRParamExists вернет False. Надо так:
Скрытый текст

Код:

[Run]
Filename: {tmp}\nsis.exe; Parameters: "{code:GetDIRParam|/D=""{app}""}"

[code]
//////////////////////////////////////////////////
function GetDIRParam(const Param: String): String;
begin
    if
ExpandConstant('{param:DIR|}') <> '' then
       
Result := Param;
end;


Okta_333 10-06-2015 18:40 2517123

Парни, такая ситация. Хочу сделать чтобы у пользователя был выбор, устанавливать ли мод, или нет, вроде чекбокса. Мод в архиве. Если чекбокс нажат, то после основной установки пойдет установка мода, если нет, то и суда нет.
Как такое можно реализовать?

PlanktoN 12-06-2015 00:03 2517663

Парни, проблема. Загрузил Фоновое изображение на инсталлятор через ботву. Сделал WizardForm.Innernotebook.hide и WizardForm.OuterNotebook.hide, чтобы изображение было видным, но эти параметры скрывают слова. Что надо сделать чтоб были слова и фоновая картинка одновременно. Плиз ответьте.

sergey3695 12-06-2015 23:33 2517997

Okta_333, if Чекбокс.Checked then (а дальше распаковка архива. если используешь isdone, то читай справку)
PlanktoN, Parent:= WizardForm; и CurPageChanges (посм как правильно пишется) скрытие и показ элементов реализовывать.

kotyarko@fb 13-06-2015 00:16 2518004

А можно имеющееся в программе изображение (загруженное через [Files]) открыть в стандартном виндовом "средстве просмотра фотографий"?

upd: разобрался.

AlekseyPopovv 13-06-2015 09:57 2518056

Мне нужно узнать версию программы из реестра:
[HKEY_LOCAL_MACHINE\SOFTWARE\MyPrograms\Program]
"Version"="13.06.2015"

И сделать чтобы было сообщение в окошке "Версия такая такая". Или если этого параметра нет в реестре то тогда сообщение "Версия не установлена".
procedure ProgramButtonClick(Sender: TObject);
var
Hislo: String;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\MyPrograms\Program', 'Version', Hislo) and (Hislo <> '') then
if MsgBox('Версия Hislo.',mbInformation, mb_ok) = IDok then
end;

kotyarko@fb 13-06-2015 11:50 2518117

AlekseyPopovv,
Код:

procedure ProgramButtonClick(Sender: TObject);
var
 Hislo: String;
begin
 if RegQueryStringValue(HKLM, 'SOFTWARE\MyPrograms\Program', 'Version', Hislo) and (Hislo <> '') then
  MsgBox('Версия: ' + Hislo + '.', mbInformation, mb_ok)
 else
  MsgBox('Версия не установлена.', mbInformation, mb_ok);
end;


PlanktoN 14-06-2015 02:03 2518356

Sergey3695, Я не понял как это сделать. Скрипт отправь пжл.

AlekseyPopovv 14-06-2015 09:48 2518383

Как сделать, что бы файл *.exe копировался во временную папку вместе с например "iswin7logo.dll", "botva2.dll" и т.д?

Dodakaedr 14-06-2015 10:10 2518390

AlekseyPopovv, по тому же самому принципу что и dll-ки.

AlekseyPopovv 14-06-2015 10:16 2518393

Dodakaedr, понял.

sergey3695 14-06-2015 12:45 2518441

PlanktoN,
Код:

var
  Label: TLabel;

procedure InitializeWizard;
begin
  with WizardForm do begin
    InnerNotebook.Hide;
    OuterNotebook.Hide;
  end;
  with TLabel.Create(WizardForm) do // Будет на всех страницах надпись
  begin
  Caption:= 'Установка';
  SetBounds(ScaleX(10),ScaleY(5),ScaleX(750),ScaleY(14));
  Parent:= WizardForm;
  end;
  Label := TLabel.Create(WizardForm); // Можно обратиться к Label и скрыть
  with Label do begin
    SetBounds(ScaleX(50), ScaleY(29), ScaleX(265), ScaleY(30));
    Caption := 'Description';
    Parent := WizardForm;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  Label.Hide;

  case CurPageID of
    wpWelcome:
    begin
      Label.Show;
    end;
    end;
end;


AlekseyPopovv 14-06-2015 13:02 2518447

Помогите пожалуйста:
Часть кода:
procedure FullButtonClick(Sender: TObject);
var
ResultCode: Integer;
begin
// Если нет данных в реестре, то вылазит окошко "Adobe Flash Player не установлен! Всё равно запустить?" "Да" или "Нет"
if not RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPepper') then
if not RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPlugin') then
if not RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerActiveX') then
if MsgBox('Adobe Flash Player не установлен! Всё равно запустить?', mbError, mb_yesno) = IDYES then
if Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
else
// До сюда всё работает, а если данные есть в реестре, то деинсталлятор не запускается!
begin
if RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPepper') then
if RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPlugin') then
if RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerActiveX') then
if Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
end;
end;
// Чего не хватает?

kotyarko@fb 14-06-2015 13:08 2518448

AlekseyPopovv, а так:
Код:

procedure FullButtonClick(Sender: TObject);
var
 ResultCode: Integer;
begin
 if not (RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPepper') and RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPlugin') and RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerActiveX')) then
 begin
  if MsgBox('Adobe Flash Player не установлен! Всё равно запустить?', mbError, mb_yesno) = IDYES then
  Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
 end else
 begin
  if (RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPepper') and RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPlugin') and RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerActiveX')) then
  Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
 end;
end;

з.ы. подучите основы языка, т.к. вы уже не первый раз используете такую неправильную конструкцию:
Код:

...
if Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
else
...
...
if Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
end;
...


AlekseyPopovv 14-06-2015 13:32 2518454

kotyarko@fb, вот так работает:
Код:

procedure FullButtonClick(Sender: TObject);
var
ResultCode: Integer;
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPepper') then
begin
if MsgBox('Adobe Flash Player не установлен! Всё равно запустить?', mbError, mb_yesno) = IDYES then
Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end else
begin
if RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPepper') then
Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
end;

Как тогда остальной реестр проверить?

sergey3695 14-06-2015 15:13 2518480

AlekseyPopovv,
Код:

procedure FullButtonClick(Sender: TObject);
var
  ResultCode: Integer;
begin
if (RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPepper')) and (RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerPlugin')) and (RegKeyExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayerActiveX')) then
  Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
else begin
if MsgBox('Adobe Flash Player не установлен! Всё равно запустить?', mbError, mb_yesno) = IDYES then
  Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
end;

ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}') :mellow:
Цитата:

Цитата kotyarko@fb
з.ы. подучите основы языка, т.к. вы уже не первый раз используете такую неправильную конструкцию: »

Цитата:

Цитата kotyarko@fb
if Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then else »

так можно
Цитата:

Цитата kotyarko@fb
if Exec(ExpandConstant('{tmp}\{#MyAppUninstallerNameExe}'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then end; »

в этом нет смысла
:laugh:
урок закончен.

AlekseyPopovv 14-06-2015 18:08 2518515

sergey3695, Если Вы такой умный, это не даёт Вам повода смеяться над другими! Для этого и существует форум... Участник kotyarko@fb был прав, его код подошёл, но с поправками... Ему и спасибо от души, а Вы не в ту степь пошли, либо не поняли меня! Но тем не менее спасибо всем!

sergey3695 14-06-2015 18:28 2518517

Если кого-то оскорбил данным сообщением извините. мне просто понравилось if - then end, я ни в коем случае не пытался тут умничать, да и умным я себя назвать не могу... так среднестатистический юзер. И да, т.к. я не участвовал в начале обсуждения, я мог ни до конца понять требуемое условие.

AlekseyPopovv 14-06-2015 19:29 2518536

sergey3695,
Цитата:

Цитата sergey3695
if - then end »

и такое бывает :cool: Всё приходит с опытом! Вам спасибо за помощь.

PlanktoN 14-06-2015 20:53 2518562

AlekseyPopovv, а так?
Procedure TempFile;
begin
ExtractTemporaryFile ('***.exe');
ExtractTemporaryFile ('botva2.dll')
ExtractTemporaryFile ('ISWin7logo.dll')
end;

Procedure InitializeWizard();
Begin
TempFile;
end;

sergey3695 14-06-2015 23:18 2518591

Код:

function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\ISWin7logo.dll')) then ExtractTemporaryFile('ISWin7logo.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  Result:= True;
end;

procedure InitializeWizard();
Begin
  if not FileExists(ExpandConstant('{tmp}\***.exe')) then ExtractTemporaryFile('***.exe');
end;


AlekseyPopovv 15-06-2015 17:01 2518893

PlanktoN, sergey3695, спасибо, я разобрался.

Valera90 16-06-2015 13:30 2519115

Всем привет, не работает прокрутка колесиком мышки, работает если тока нажать на компонент тогда в низ спускает, как решить данную проблему?

habib2302 16-06-2015 19:11 2519231

Доброе время суток. Возможно ли сделать так чтобы создавалась папка с название раздела из реестра?

TryRooM 16-06-2015 19:46 2519238

habib2302, Примерно так.
Скрытый текст
Код:

procedure CurStepChanged(CurStep: TSetupStep);
  begin
  if CurStep = ssInstall then
  begin
    ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001\test2')); //создаем папки
  end;
  end;


habib2302 16-06-2015 20:05 2519245

TryRooM, вы поняли что мне за код дали?
название этого раздела в реестре бывает разным в зависимости от системы и т.д. и т.п.

TryRooM 16-06-2015 20:18 2519249

habib2302, Вопрос был в чем. Создать папку с название раздела из реестра, что я и сделал.
А то, что название этого раздела в реестре бывает разным в зависимости от системы и т.д. и т.п. и так понятно.

habib2302 16-06-2015 20:27 2519251

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

TryRooM 16-06-2015 20:53 2519260

habib2302, Можно добавить проверку на систему, и создавать папку исходя из этого.
Скрытый текст
Код:


function ForWindows8One(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  // Windows 8.1 version is 6.3 (workstation)
  if (Version.Major = 6)  and
    (Version.Minor = 3) and
    (Version.ProductType = VER_NT_WORKSTATION)
  then
    Result := True
  else
    Result := False;
end;
 
  function ForWindows7(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  // Windows 7 version is 6.1 (workstation)
  if (Version.Major = 6)  and
    (Version.Minor = 1) and
    (Version.ProductType = VER_NT_WORKSTATION)
  then
    Result := True
  else
    Result := False;
end;

function ForWindowsVistaAndWindows2008(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  // Anything with major version 6 where we won't use Windows 7 driver
  if (Version.Major = 6) and
    (not ForWindows7)
  then
    Result := True
  else
    Result := False;
end;

function ForWindows2003(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  // Windows 2003 version is 5.2 (server)
  if (Version.Major = 5)  and
    (Version.Minor = 2)  and
    (Version.ProductType <> VER_NT_WORKSTATION)
  then
    Result := True
  else
    Result := False;
end;

 function ForWindowsXP(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  // Anything with major version 5 where we won't use Windows 2003 driver
  if (Version.Major = 5) and
    (not ForWindows2003)
  then
    Result := True
  else
    Result := False;
end;

procedure CurStepChanged(CurStep: TSetupStep);
  begin
  if CurStep = ssInstall then
  begin
    If ForWindowsXP then
    ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001-XP\test2')); //создаем папки
    If ForWindowsVistaAndWindows2008 then
    ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001-Vista\test2')); //создаем папки
    If ForWindows7 then
    ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001-7\test2')); //создаем папки
    If ForWindows8One then
    ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001-8\test2')); //создаем папки
  end;
  end;


habib2302 16-06-2015 22:10 2519288

TryRooM, я не умею предсказывать название этого раздела!

Dodakaedr 16-06-2015 22:32 2519294

habib2302, для этой цели есть библа getsid. В поиске по теме найдешь.

Iska 17-06-2015 01:01 2519318

Цитата:

Цитата habib2302
Возможно ли сделать так чтобы создавалась папка с название раздела из реестра? »

Обычно, когда в код, вместо обращения к HKCU, пытаются затащить обращение напрямую к «HKU\SID текущего пользователя» или жёстко хардкодить с SID'ом — значит, явно что-то не так с самим кодом.

Вам сие для чего?

habib2302 17-06-2015 09:00 2519366

Iska, для создания папки с название раздела HKU\SID на скринах приведен пример
http://forum.oszone.net/post-2519231-707.html

PlanktoN 18-06-2015 02:17 2519677

Помогите чтоб был виден текст на Выборе задач,Выборе Группы для Ярлыков и Страница Установки FreeArc(Просто там не виден текст какой файл распаковывается сколько времени осталось)

Iska 18-06-2015 03:04 2519683

Цитата:

Цитата habib2302
Iska, для создания папки с название раздела HKU\SID на скринах приведен пример »

habib2302, это-то я видел. Не пойму — зачем?

El Sanchez 18-06-2015 11:02 2519766


Цитата:

Цитата Iska
это-то я видел. Не пойму — зачем? »

Iska, может для песочницы надо.

habib2302, пример:
Скрытый текст

Код:

#define A = (Defined UNICODE) ? "W" : "A"
const
   
TOKEN_READ = $00020008;
    TokenUser = 1;
    ERROR_INSUFFICIENT_BUFFER = 122;
    HEAP_ZERO_MEMORY = $8;
    MAX_PATH = 260;

type
   
SID_AND_ATTRIBUTES = record
       
Sid: Longint;
        Attributes: DWORD;
    end;

    TOKEN_USER = record
       
User: SID_AND_ATTRIBUTES;
    end;

function GetCurrentProcess: THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; out TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function GetTokenInformation(TokenHandle: THandle; TokenInformationClass: Integer; TokenInformation: Longint; TokenInformationLength: DWORD; out ReturnLength: DWORD): BOOL; external 'GetTokenInformation@advapi32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetProcessHeap: THandle; external 'GetProcessHeap@kernel32.dll stdcall';
function HeapAlloc(hHeap: THandle; dwFlags, dwBytes: DWORD): Longint; external 'HeapAlloc@kernel32.dll stdcall';
function HeapFree(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): BOOL; external 'HeapFree@kernel32.dll stdcall';
function RtlMoveMemoryTU(out Destination: TOKEN_USER; const Source: Longint; len: Integer): Integer; external 'RtlMoveMemory@kernel32.dll stdcall';
function ConvertSidToStringSid(Sid: Longint; out StringSid: Longint): BOOL; external 'ConvertSidToStringSid{#A}@advapi32.dll stdcall';
function LocalFree(hMem: THandle): THandle; external 'LocalFree@kernel32.dll stdcall';

///////////////////////////////////////////
function GetCurrentProcessOwnerSID: String;
var
   
hProcessToken, hHeap: THandle;
    tuTokenUser: TOKEN_USER;
    lpTokenUser, lpStringSid: Longint;
    dwReturnLength: DWORD;
begin
    if not
OpenProcessToken(GetCurrentProcess, TOKEN_READ, hProcessToken) then Exit;
    if not GetTokenInformation(hProcessToken, TokenUser, 0, 0, dwReturnLength) and BOOL(DLLGetLastError = ERROR_INSUFFICIENT_BUFFER) then
    begin
       
hHeap := GetProcessHeap;
        if hHeap = 0 then Exit;
        lpTokenUser := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, dwReturnLength);
        if lpTokenUser <> 0 then
        begin
            if
GetTokenInformation(hProcessToken, TokenUser, lpTokenUser, dwReturnLength, dwReturnLength) then
            begin
               
RtlMoveMemoryTU(tuTokenUser, lpTokenUser, SizeOf(tuTokenUser));
                if ConvertSidToStringSid(tuTokenUser.User.Sid, lpStringSid) then
                begin
                   
Result := CastIntegerToString(lpStringSid);
                    LocalFree(lpStringSid);
                end;
            end;
            HeapFree(hHeap, 0, lpTokenUser);
        end;
    end;
    CloseHandle(hProcessToken);
end;

//////////////////////////
procedure InitializeWizard;
begin
   
CreateDir(ExpandConstant('{src}\') + GetCurrentProcessOwnerSID);
end;


studentvnau@vk 18-06-2015 23:54 2520040

Всем привет, уважаемые знатоки! Внимание, вопрос:
1) Есть 7 разных изображений, одинакового формата .bmp, одинакового размера в пикселях, но различных по смысловому наполнению.
2) Их обязательно нужно отобразить ТОЛЬКО по 1 согласно 7 страницам установщика - 1 картинку на стр 1, вторую - на стр 2 и тд. при этом остальных не должно быть видно.
3) Картинки должны розмещаться на Parent:= Wizardform; (смысл вы поняли).
4) Картинки имеют такой же отступ сверху, как и кнопки назад, далее и отмена по стандарту.
Поиск по разделам не помог, решение ранее у меня было, но так как утеряны файлы с готовым вариантом, прошу помощи тут.
Заранее спасибо за ответ.

AlekseyPopovv 19-06-2015 12:56 2520154

Как сделать, что бы при нажатии на кнопку "Установить" появлялось окошко (с одной функцией OK) "Закройте программы и нажмите кнопку OK" после чего установка продолжалась?

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

PlanktoN 19-06-2015 20:31 2520297

AlekseyPopovv, насчет перезагрузить. Покопайся в секции [setup]. Или справку почитай про [setup]. Там было. Забыл.

habib2302 19-06-2015 20:43 2520301

AlekseyPopovv, для того чтобы отключить radiobuttone с предложениями перезагрузить или нет, то вот пропиши это
Код:

[Setup]
RestartIfNeededByRun=false

для отключения последней страницы
Код:

[Setup]
DisableFinishedPage=true

можно заменить последнюю страницу на диалог
Код:

[Setup]
DisableFinishedPage=yes

[Code]
Procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = ssDone then
  MsgBox('Установка завершена!', mbInformation, MB_OK);
end;

но учти, что если ты используешь код для закрепления ярлыков, то от работать не будет!

AlekseyPopovv 19-06-2015 21:00 2520308

habib2302,
Код:

[Setup]
RestartIfNeededByRun=false

помогло. Осталось с первым разобраться:
Как сделать, что бы при нажатии на кнопку "Установить" появлялось окошко (с одной функцией OK) "Закройте программы и нажмите кнопку OK" после чего установка продолжалась?
Был у меня раньше этот код...

habib2302 19-06-2015 21:07 2520310

AlekseyPopovv, т.е. перед распаковкой файлов завершить процесс?
Код:

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

[Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

//**************************************************//
function InitializeSetup(): Boolean;
begin
  If RunTask('winamp.exe', false) then
    begin
      if MsgBox('Программа Winamp используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
          KillTask('winamp.exe');
          Result:= True;
        end else
          Exit;
    end;
Result:=True;
end;


AlekseyPopovv 19-06-2015 21:16 2520313

habib2302, Так конечно лучше, но я не знаю всех этих запущенных процессов. Поэтому просто предупреждение будет лучше:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssInstall) then
MsgBox('Закройте программы и нажмите кнопку OK!', mbinformation, mb_ok);
end;

habib2302, Как к секции Run прикрутить ключи тихой установки?

habib2302 19-06-2015 22:06 2520332

AlekseyPopovv,
Parameters
Дополнительные параметры командной строки, которые могут содержать константы.
Цитата:

Цитата Например:
Код:

[Run]
Filename: {sys}\msiexec.exe; Parameters: "/i {tmp}\Setup.msi /qb"


или
Цитата:

Цитата Например:
Код:

[Run]
Filename: {tmp}\nsis.exe; Parameters: "/S"



AlekseyPopovv 20-06-2015 04:03 2520388

У кого ни будь есть примеры "goto"?
Разобрался.

PlanktoN 20-06-2015 07:51 2520398

С GroupPage разобрался, а с Выборами задач нет. Как сделать? (TasksList)

AlexM22204 21-06-2015 01:02 2520607

Небольшой вопрос(если где было - ткните носом) : :)
Нужно скопировать файлы в созданную временную папку в TEMP-е, запустить исполняемый файл с параметрами и после выполнения удалить временную папку в TEMP-е, как это прописать в скрипте...
В файле конфигурации 7z SFX это сделано так:
для примера

;!@Install@!UTF-8!
InstallPath="%TEMP%\\vmware"
Title="Установка VMware Workstation"
BeginPrompt="Сейчас будет установлен VMware Workstation"
ExtractTitle="Распаковка файлов..."
ExtractDialogText="Подождите, пожалуйста..."
RunProgram="\"%TEMP%\\vmware\\uninstall.exe\" /T \"%TEMP%\\vmware\\install\" /v /S \"%TEMP%\\vmware\""
RunProgram="hidcon:cmd /c REG DELETE HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v vmware-tray.exe /f"
RunProgram="hidcon:cmd /c REG DELETE HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run /v vmware-tray.exe /f"
RunProgram="hidcon:cmd /c REG ADD \"HKCU\\Software\\VMware, Inc.\\VMware Tray\" /v TrayBehavior /t REG_DWORD /d 00000002 /f"
GUIFlags="2+4+8+16+32+2048+4096"
GUIMode="1"
Delete="%%T"
MiscFlags="4"
;!@InstallEnd@!

habib2302 21-06-2015 08:52 2520625

AlexM22204, в inno setup файлы распакованные в temp они сами удаляются после завершения процесса исполняемого файла

PlanktoN 21-06-2015 18:44 2520817

Alex22204, не уверен, но может быть:
[Files]
Source: *.*; DestDir: {tmp}\InstallFile; Flags: сами напишите;

[Run]
Дальше сами...

ROMKA-1977 22-06-2015 11:25 2521026

Подскажите пож. в локализованной винде папка Documents отображается под названием Мои документы.
Возможно ли средствами Inno Setup выполнить переименование папки Мои документы в Documents?

PlanktoN 23-06-2015 06:26 2521353

ROMKA-1997, на Inno Setup не знаю. Батник (.bat) напиши и в секции [Run] пропиши путь к батнику с флагом /s или -silent, -verysilent.

ROMKA-1977 23-06-2015 15:51 2521514

Цитата:

Цитата PlanktoN
Батник (.bat) напиши »

в Inno Setup знания базовые а в написании .bat ещё не практиковался.

icetanker 23-06-2015 16:33 2521538

подскажите как вывести табличку,что библиотека зарегистрировалась после ее регистрации
вот мой код



[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{9C5632CB-B15E-4487-ADBB-C1DEB12423F5}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
CreateAppDir=yes
DefaultDirName={pf}\RegOCX
OutputBaseFilename=RegOCX
Compression=lzma
SolidCompression=yes
DisableDirPage=yes
DisableStartupPrompt=yes
DisableWelcomePage=yes
DisableReadyPage=yes

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl
[Files]
Source: "C:\Windows\test.ocx"; DestDir:"{sys}"; Flags:regserver;Check: Checker
[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
INTERNET_OPEN_TYPE_PRECONFIG = 0;
INTERNET_FLAG_NO_CACHE_WRITE = $4000000;
INTERNET_FLAG_PRAGMA_NOCACHE = $100;
INTERNET_FLAG_RELOAD = $80000000;
INTERNET_FLAG_NEED_FILE = $10;
INTERNET_FLAG_NO_AUTO_REDIRECT = $200000;
HTTP_QUERY_FLAG_NUMBER = $20000000;
HTTP_QUERY_LOCATION = 33;
HTTP_QUERY_CONTENT_LENGTH = 5;
HTTP_QUERY_STATUS_CODE = 19;
ERROR_INSUFFICIENT_BUFFER = 122;
HTTP_STATUS_OK = 200;
HTTP_STATUS_REDIRECT = 302;
GENERIC_READ = $80000000;
GENERIC_WRITE = $40000000;
CREATE_ALWAYS = 2;
HEAP_ZERO_MEMORY = $8;
IRF_SYNC = $4;

type
INTERNET_BUFFERS = record
dwStructSize: DWORD;
Next: Longint;
lpcszHeader: String;
dwHeadersLength: DWORD;
dwHeadersTotal: DWORD;
lpvBuffer: Longint;
dwBufferLength: DWORD;
dwBufferTotal: DWORD;
dwOffsetLow: DWORD;
dwOffsetHigh: DWORD;
end;

var
g_DownloadPage: TOutputProgressWizardPage;

function InternetOpen(lpszAgent: String; dwAccessType: DWORD; lpszProxyName, lpszProxyBypass: String; dwFlags: DWORD): Integer; external 'InternetOpen{#A}@wininet.dll stdcall';
function InternetOpenUrl(hInternet: Longint; lpszUrl, lpszHeaders: String; dwHeadersLength, dwFlags: DWORD; dwContext: DWORD_PTR): Integer; external 'InternetOpenUrl{#A}@wininet.dll stdcall';
function InternetReadFileEx(hFile: Longint; var lpBuffersOut: INTERNET_BUFFERS; dwFlags: DWORD; dwContext: DWORD_PTR): BOOL; external 'InternetReadFileEx{#A}@wininet.dll stdcall';
function InternetCloseHandle(hInternet: Longint): BOOL; external 'InternetCloseHandle@wininet.dll stdcall';
function HttpQueryInfo(hRequest: Longint; dwInfoLevel: DWORD; var lpvBuffer: Longint; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function _HttpQueryInfo(hRequest: Longint; dwInfoLevel: DWORD; lpvBuffer: String; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function StrFormatByteSize64(qdw: Currency; pszBuf: AnsiString; cchBuf: UINT): Longint; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function StrFromTimeInterval(pszOut: String; cchMax: UINT; dwTimeMS: DWORD; digits: Byte): Integer; external 'StrFromTimeInterval{#A}@shlwapi.dll stdcall';
function CreateFile(lpFileName: String; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: Longint; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; external 'CreateFile{#A}@kernel32.dll stdcall';
function WriteFile(hFile: THandle; lpBuffer: Longint; nNumberOfBytesToWrite: DWORD; var lpNumberOfBytesWritten: DWORD; lpOverlapped: Longint): BOOL; external 'WriteFile@kernel32.dll stdcall';
function GetProcessHeap(): THandle; external 'GetProcessHeap@kernel32.dll stdcall';
function HeapAlloc(hHeap: THandle; dwFlags, dwBytes: DWORD): Longint; external 'HeapAlloc@kernel32.dll stdcall';
function HeapFree(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): BOOL; external 'HeapFree@kernel32.dll stdcall';
function HeapSize(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): DWORD; external 'HeapSize@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

///////////////////////////////////////////////////
function TicksToTime(const dwTicks: DWORD): String;
begin
Result := StringOfChar(#0, StrFromTimeInterval(Result, 0, dwTicks, 8));
StrFromTimeInterval(Result, Length(Result)+1, dwTicks, 8);
end;

////////////////////////////////////////////////////////
function BytesToSize(const exBytes: Double): AnsiString;
begin
Result := StringOfChar(#0, 15);
if Abs(exBytes) > 9.223372036854775807E18 then exBytes := 0;
#ifdef UNICODE
Result := CastIntegerToAnsiString(StrFormatByteSize64(Abs(exBytes div 1E4), Result, Length(Result)));
#else
Result := CastIntegerToString(StrFormatByteSize64(Abs(exBytes div 1E4), Result, Length(Result)));
#endif
end;

////////////////////////////////////////////////////
function DownloadFile(const szURL: String): Boolean;
var
hConnect, hSession, hFile, hHeap: THandle;
szHeader, szFileName: String;
dwBufferLength, dwIndex, dwStartDownload, dwStart, dwElapsed, dwWritten: DWORD;
lpBuffer, lpStatus, lpSize: Longint;
ib: INTERNET_BUFFERS;
begin
try
hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, '', '', 0);
if hSession = 0 then Exit;

// additional header
szHeader := 'Referer: http://example.org/'#13#10;

// try direct link
repeat
hConnect := InternetOpenUrl(hSession, szURL, szHeader, Length(szHeader), INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_AUTO_REDIRECT, 0);
if hConnect = 0 then Exit;
dwBufferLength := SizeOf(lpBuffer);
dwIndex := 0;
lpStatus := 0;
if not HttpQueryInfo(hConnect, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, lpStatus, dwBufferLength, dwIndex) then Exit;
lpBuffer := 0;
HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, lpBuffer, dwBufferLength, dwIndex);
if DLLGetLastError = ERROR_INSUFFICIENT_BUFFER then
begin
szURL := StringOfChar(#0, dwBufferLength-1);
if not _HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, szURL, dwBufferLength, dwIndex) then Exit;
if lpStatus = HTTP_STATUS_REDIRECT then InternetCloseHandle(hConnect);
end;
until lpStatus = HTTP_STATUS_OK;

// get file size
dwBufferLength := 4;
dwIndex := 0;
if not HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, lpSize, dwBufferLength, dwIndex) then Exit;

// save dialog
szFileName := ExpandConstant('C:\Windows\' + ExtractFileName(szURL));
if szFileName <> '' then
try
hFile := CreateFile(szFileName, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); //create file
if hFile = 0 then Exit;
hHeap := GetProcessHeap();
lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024); // buffer size must be >= 512Kb
ib.dwStructSize := SizeOf(ib);
ib.lpvBuffer := lpBuffer;
ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);

// show page
g_DownloadPage.Show;
g_DownloadPage.ProgressBar.Show;
g_DownloadPage.SetProgress(0, lpSize);

// try download
try
// initial labels
g_DownloadPage.Msg1Label.Caption := Format(
'Файл:'#9#9'%s'#13#10 +
'Загружено:'#9'%s из %s', [ExtractFileName(szFileName), BytesToSize(0), BytesToSize(lpSize)]
);
g_DownloadPage.Msg2Label.Caption := Format(
'Прогресс:'#9'%s'#13#10 +
'Скорость:'#9'%s/сек'#13#10 +
'Прошло:'#9'0 сек'#13#10 +
'Осталось:'#9'%d сек', [FormatFloat('0.#0 %', MulDiv(g_DownloadPage.ProgressBar.Position, 100, lpSize)), BytesToSize(0), MaxInt]
);

// download
dwStartDownload := GetTickCount;
while ib.dwBufferLength > 0 do
begin
dwStart := GetTickCount;
dwElapsed := 0;
while dwElapsed < 1000 do
begin
// read file
InternetReadFileEx(hConnect, ib, IRF_SYNC, 0);

// write file
WriteFile(hFile, ib.lpvBuffer, ib.dwBufferLength, dwWritten, 0);
ib.dwBufferTotal := ib.dwBufferTotal + dwWritten;

// update progressbar
g_DownloadPage.ProgressBar.Position := ib.dwBufferTotal;

// process messages
Application.ProcessMessages;
dwElapsed := GetTickCount - dwStart;
end;

// update labels
dwElapsed := GetTickCount-dwStartDownload;
g_DownloadPage.Msg1Label.Caption := Format(
'Файл:'#9#9'%s'#13#10 +
'Загружено:'#9'%s из %s', [ExtractFileName(szFileName), BytesToSize(ib.dwBufferTotal), BytesToSize(lpSize)]
);
g_DownloadPage.Msg2Label.Caption := Format(
'Прогресс:'#9'%d %%'#13#10 +
'Скорость:'#9'%s/сек'#13#10 +
'Прошло:'#9'%s'#13#10 +
'Осталось:'#9'%d сек', [MulDiv(ib.dwBufferTotal, 100, lpSize), BytesToSize(MulDiv(ib.dwBufferTotal, 1000, dwElapsed)), TicksToTime(dwElapsed), MulDiv(lpSize-ib.dwBufferTotal, dwElapsed, 1000)/(ib.dwBufferTotal + 1)]
);
end;
except
Result := False; // error
finally
end;
finally
CloseHandle(hFile);
HeapFree(hHeap, 0, lpBuffer);
Result := ib.dwBufferTotal = lpSize; // success
end;
except
Result := False; // error
finally
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
g_DownloadPage.Hide;
end;
end;

/////////////////////////////////////
procedure CreateDownloadProgressPage;
begin
g_DownloadPage := CreateOutputProgressPage('Загрузка файла', '');
with g_DownloadPage do
begin
Msg1Label.Height := Msg1Label.Height shl 1;
Msg2Label.Height := Msg2Label.Height shl 2;
Msg2Label.Top := ProgressBar.Top + ProgressBar.Height + ScaleY(5);
end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
CreateDownloadProgressPage();
end;

//////////////////////////////////////////////////////
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpWelcome: DownloadFile('http://test.ru/test.ocx');
end;
end;
//check
Function Checker(): Boolean;
begin
Result := IsComponentSelected('aa');
end;


Dodakaedr 23-06-2015 17:11 2521554

Цитата:

Цитата icetanker
подскажите как вывести табличку »

В смысле табличку? Типа такого?
Код:

[setup]
appname=app
appvername=app v1.0
DefaultDirName={sd}\app

[Files]
Source: compiler:license.txt; DestDir: {app}; AfterInstall: ShowMsg;

[code]
procedure ShowMsg;
begin
 MsgBox('Файл установлен.', mbInformation, MB_OK);
end;


icetanker 23-06-2015 17:28 2521563

Dodakaedr,не такую,нужно всплывающее сообщение,чтобы понимать зарегистрировалась она или нет.

PlanktoN 23-06-2015 17:41 2521569

Romka-1997, команда help в помощь.

habib2302 25-06-2015 18:46 2522467

Доброе время суток.
Скрытый текст
Заменить команду /LANG на /L
Заменить команду /DIR на /D
Заменить команду /COMPONENTS на /C

AlekseyPopovv 26-06-2015 09:49 2522656

habib2302, Заменить команду /DIR на /D
Код:

function GetDirFromCMD(kWord: string): string;
var
i, lStr: integer;
begin
Result := WizardDirValue;
lStr := Length(kWord);
for i := 0 to ParamCount do begin
if Pos(LowerCase(kWord), LowerCase(ParamStr(i))) > 0 then begin
Result := Copy(ParamStr(i), Pos(LowerCase(kWord), LowerCase(ParamStr(i))) + lStr,
Length(ParamStr(i)) - lStr);

while (Result[1] = '"') and (Result[Length(Result)] = '"') do
begin
Delete(Result, Length(Result), 1);
Delete(Result, 1, 1);
end;
end;
if Result <> WizardDirValue then
Break;
end;
end;

procedure InitializeWizard();
begin
WizardForm.DirEdit.Text := GetDirFromCMD('/D='); // можно поменять на любую букву
end;

Как Заменить команду /LANG на /L и Заменить команду /COMPONENTS на /C не знаю.

PlanktoN 27-06-2015 17:19 2523124

как показать TasksList через CurPageChanged; (Как в скрипте от Serega.)

AlekseyPopovv 28-06-2015 19:17 2523446

Цитата:

Цитата PlanktoN
Помогите чтоб был виден текст на Выборе задач,Выборе Группы для Ярлыков и Страница Установки FreeArc(Просто там не виден текст какой файл распаковывается сколько времени осталось) »

Пока не понятно что вы хотите? Почему там текст не виден?... Пишите скрипт.

Как перед запуском инсталлятора проверить подключен ли компьютер к интернет? Если интернет подключен, то выдать сообщение "Имеется активное подключение к интернет! Отключите интернет и попробуйте снова!" (mb_ok), если нет то продолжить установку.

kotyarko@fb 28-06-2015 19:48 2523458

Цитата:

Цитата AlekseyPopovv
Как перед запуском инсталлятора проверить подключен ли компьютер к интернет? »

Например, так:
Код:

Function InternetGetConnectedState(var lpdwFlags: DWORD; dwReserved: DWORD): Boolean;
 external 'InternetGetConnectedState@wininet.dll stdcall';

Function InitializeSetup(): Boolean;
begin
 if not InternetGetConnectedState(ConnectionState, 0) then
  Result := True
 else
 begin 
  MsgBox('Имеется активное подключение к интернет! Отключите интернет и попробуйте снова!', mbError, MB_OK);
  Result := False;
 end;
end;

Есть и такой вариант.

AlekseyPopovv 28-06-2015 20:31 2523469

kotyarko@fb, В первом варианте вообще не собирается скрипт, во втором варианте всё собирается, но всегда пишет что интернета нет и продолжает установку!

Dodakaedr 29-06-2015 00:07 2523547

Цитата:

Цитата AlekseyPopovv
В первом варианте вообще не собирается скрипт »

Попробуйте так:
Код:

[setup]
appname=app
appversion=1.0
defaultdirname={sd}\app

[Code]
var
  ConnectionState: DWORD;
 
Function InternetGetConnectedState(var lpdwFlags: DWORD; dwReserved: DWORD): Boolean;
 external 'InternetGetConnectedState@wininet.dll stdcall';

Function InitializeSetup(): Boolean;
begin
 if not InternetGetConnectedState(ConnectionState, 0) then
  Result := True
 else
 begin
  MsgBox('Имеется активное подключение к интернет! Отключите интернет и попробуйте снова!', mbError, MB_OK);
  Result := False;
 end;
end;


AlekseyPopovv 29-06-2015 04:40 2523584

Dodakaedr, Ваш код работает. Но у меня вылазит ошибка сразу после нажатия "ок". Это мешает:
Код:

procedure DeinitializeSetup();
begin
ISWin7DeInit;
end;

Как с ней быть?

Dodakaedr 29-06-2015 07:12 2523598

Цитата:

Цитата AlekseyPopovv
Как с ней быть? »

Скрытый текст
Код:

[setup]
appname=app
appversion=1.0
defaultdirname={sd}\app

[Code]
var
  ConnectionState: DWORD;
  Int: boolean;

Function InternetGetConnectedState(var lpdwFlags: DWORD; dwReserved: DWORD): Boolean;
 external 'InternetGetConnectedState@wininet.dll stdcall';

Function InitializeSetup(): Boolean;
begin
 if not InternetGetConnectedState(ConnectionState, 0) then
  Result := True
 else
 begin
  MsgBox('Имеется активное подключение к интернет! Отключите интернет и попробуйте снова!', mbError, MB_OK);
  Result := False;
 end;
end;

procedure InitializeWizard();
begin
  Int := True;
end;

procedure DeinitializeSetup();
begin
    if Int <> False then
      begin
          ISWin7DeInit;
      end;
end;


habib2302 29-06-2015 10:28 2523656

доброе время суток. подскажите пожалуйста код для ansi на проверку на наличие файла перед распаковкой файлов
у меня есть один код, но при компиляции выдает ошибку
Код:

[code]
var found: boolean;

procedure NextButtonClick (CurPageID: integer): boolean;
begin
 if CurPageID=wpSelectDir then
 begin
  if not FileExists(AddBackslash(WizardForm.DirEdit.text) + 'CaptureDotNetRes.dll') then
  begin
    found:=false;
    result:=false;
    MsgBox('Отсутствуют некоторые файлы. Установка будет прервана!', MBinformation, mb_OK)
    WizardForm.Close;
  end
  else
    begin
    found:=true;
    result:=true;
    end;
 end
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if ((CurPageID= wpSelectDir )and (not found)) then
  begin
  cancel:=true;
  confirm:=false;
  end;
end;


TryRooM 29-06-2015 14:09 2523768

habib2302, Так пойдет. На любой версии.
Скрытый текст
Код:

var
  error : Boolean;
 function NextButtonClick(CurPageID: Integer): Boolean;
 begin
  Result := true;
  error := false;
  if CurPageID=wpSelectDir then begin
    Result := FileExists(ExpandConstant('{src}\file.test'))
    if not Result then begin
    MsgBox('Отсутствуют некоторые файлы. Установка будет прервана!', mbError, MB_OK);
    error := true;
    WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
    end;
    end;
  end;

 procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
 begin
  Confirm:=False;
 end;


PlanktoN 29-06-2015 18:31 2523922

Я про фоновое изображение. При накладывании изображения текст становится не виден. Как показать? Имено через CurPageChanged и именно TasksList

icetanker 01-07-2015 08:50 2524499

как добавить в инсталлятор поддержку Windows 8,8.1 и 10?(не обновляя программу)

PlanktoN 01-07-2015 11:48 2524556

Думаю без кода должен поддерживаться на всех ОС. На крайняк: Режим Совместимости Windows.

icetanker 01-07-2015 13:30 2524599

Цитата:

Цитата PlanktoN
Думаю без кода должен поддерживаться на всех ОС. На крайняк: Режим Совместимости Windows. »

хотелось бы красиво,чтобы было,не нашел в справке как указать

Dodakaedr 01-07-2015 16:43 2524710

Цитата:

Цитата icetanker
хотелось бы красиво,чтобы было »

В смысле?

PlanktoN 01-07-2015 22:56 2524860

Ты про Metro стиль?? Типа на Windows 7 такая тема, на Win 8, 8.1, 10 был Metro?? Два стиля в одном инсталле.Слмневаюсь что такое может быть. Если есть то код будет длинным думаю.

ekspoint 02-07-2015 05:59 2524914

Цитата:

Цитата PlanktoN
Я про фоновое изображение. При накладывании изображения текст становится не виден. Как показать? Имено через CurPageChanged и именно TasksList »

тоесть ты хочешь фон на таск лист?

icetanker 02-07-2015 08:57 2524941

Dodakaedr, мне нужно добавить в манифест инсталлятора совместимость с Win 8/2012/8.1/2012 R2/10,сейчас если ничего не прописываю манифест Win XP/2003/Vista/2008/7/2008 R2

El Sanchez 02-07-2015 10:49 2524984

Цитата:

Цитата icetanker
мне нужно добавить в манифест инсталлятора совместимость с Win 8/2012/8.1/2012 R2/10,сейчас если ничего не прописываю манифест Win XP/2003/Vista/2008/7/2008 R2 »

icetanker, это потому что китайской версией пользуетесь, собранной на устаревшей версии 5.5.1. На данный момент в последней (5.5.5) официальной версии в манифесте декларирована совместимость с ОС до Win 10. Win 10 будет в будущей 5.5.6. Если очень хочется на китайской версии, то приводить supportedOS в манифесте готового инсталлятора редактором ресурсов к такому виду.

Irenis 02-07-2015 15:30 2525104

Всем привет :) Помогите пожалуйста. Нужно создать установщик, который бы распаковывал две папки, одну туда куда укажет пользователь, на любой диск, в любую папку, а вторая чтоб принудительно распаковалась просто на диск без всяких подпапок (но именно на тот диск, куда укажет пользователь в целом для приложения).Например, устанавливает пользователь приложение, указывает путь Е/Games/Игра, и вот какая то часть туда и установилась, а другая часть просто по пути Е/Приложение. Возможно ли так сделать? Спасибо, буду надеяться на ответы))

El Sanchez 02-07-2015 16:30 2525126

Цитата:

Цитата Irenis
а другая часть просто по пути Е/Приложение »

Irenis, ну и напишите для второй папки в секции Files в директиве DestDir:
Код:

DestDir: {drive:{app}}\Приложение


habib2302 02-07-2015 21:12 2525224

как сделать в случае отмены установки исполняемого файла
Код:

[Run]
Filename: {sys}\msiexec.exe; Parameters: "/i {tmp}\SkypeSetup_7.6.0.103.msi /qb ALL_USERS=1 INSTALLDIR={app}";

не запускался следующий исполняемый файл по списку
Код:

[Run]
Filename: {win}\regedit.exe; Parameters: /s {tmp}\Reg-file.reg;

и как сделать проверку сумм файлов

Я как понимаю никому до меня нет дела!?

nik1967 03-07-2015 16:07 2525521

Цитата:

Цитата habib2302
и как сделать проверку сумм файлов »

Пример

И не стоит писать жирным шрифтом - кто в состоянии помочь - поможет. Не стоит думать, что кроме твоих проблем ни у кого нет других дел.

El Sanchez 03-07-2015 16:15 2525523

Цитата:

Цитата habib2302
как сделать в случае отмены установки исполняемого файла
не запускался следующий исполняемый файл по списку
»

habib2302,
  • Да никак, нужно проверять код возврата и по результатам проверки действовать дальше. Во время отработки секции Run код возврата не получить, он лишь пишется в Debug Output. А вот если запускать из секции Code при помощи Exec, то код возврата доступен.
  • Про закавычивание путей в Parameters не забываем, {tmp} и {app} еще как могут содержать whitespace-символы.
  • Зачем вообще отмену производить во время установки? Выбор ставить/не ставить нужно раньше делать, до нажатия на Установить, а не когда уже поздно.

habib2302 03-07-2015 16:26 2525526

El Sanchez, просто в случае отмены установки допустим msi'шного инсталлятора (который запакован в мой инстал) из-за ошибки, то мой инстал продолжит установку

AlexM22204 08-07-2015 20:57 2527006

Здравствуйте! Решил перепаковать для себя VMware Workstation 11.1.2
Вот скрипт
[Setup]
AppName=VMware Workstation
AppVersion=11.1.2
AppPublisher=(сборка)
VersionInfoVersion=11.1.2
CreateAppDir=no
OutputBaseFilename=Setup_VMware_11
SetupIconFile={app}\ws.ico
SolidCompression=yes
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
Uninstallable=no

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

[Files]
Source: "{app}\*"; DestDir: "{tmp}\vmware"; Flags: ignoreversion recursesubdirs createallsubdirs

[Tasks]
Name: "rus"; Description: "{cm:SetupLangPack}"; GroupDescription: "{cm:OtherOptions}"; Flags: checkablealone; MinVersion: 0.0,5.0
Name: "trayicon"; Description: "{cm:DelTrayIcon}"; GroupDescription: "{cm:OtherOptions}"; Flags: checkablealone; MinVersion: 0.0,5.0

[Run]
Filename: "{tmp}\vmware\uninstall.exe"; Parameters: "/T ""{tmp}\vmware\install"" /v /s /S ""{tmp}\vmware"""
Filename: "TASKKILL"; Parameters: "/F /IM ""vmware-tray.exe"""; Flags: runhidden; MinVersion: 0.0,5.0; Tasks: trayicon
Filename: "{tmp}\vmware\VMware-ru-ru.exe"; Parameters: "/s"; MinVersion: 0.0,5.0; Tasks: rus

[Registry]
Root: "HKCU"; Subkey: "Software\VMware, Inc.\VMware Tray"; ValueType: dword; ValueName: "TrayBehavior"; ValueData: "$00000002"; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: trayicon

[CustomMessages]
russian.DelTrayIcon=Отключить отображение иконки в трее
russian.SetupLangPack=Установить русский языковой пакет
russian.OtherOptions=Дополнительные параметры:

[code]
///Удалить кнопки свернуть, развернуть из окна инсталлятора
const
GWL_STYLE = -16;
WS_MINIMIZEBOX = $20000;
WS_MAXIMIZEBOX = $10000;

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

procedure initializeWizard();
begin
SetWindowLong(WizardForm.handle, GWL_STYLE, GetWindowLong(WizardForm.handle, GWL_STYLE)and(not WS_MINIMIZEBOX)and(not WS_MAXIMIZEBOX));
end;

Но одно но... Программа только для 64-bit систем, как организовать перед запуском инсталятора проверку, если система 64-bit - то продолжается установка, если система 32-bit - появляется окно с сообщением о несоответствии системы и предложение прекратить установку. :(

Dodakaedr 09-07-2015 13:20 2527178

AlexM22204, в справке про секцию [setup] прочтите, там есть ответ на ваш вопрос. По поводу битности системы.

kotyarko@fb 09-07-2015 22:20 2527311

Цитата:

Цитата AlexM22204
Программа только для 64-bit систем, как организовать перед запуском инсталятора проверку »

Самый простой способ:
Код:

[Setup]
ArchitecturesAllowed=x64


Sotonisto 09-07-2015 23:09 2527323

Доброго времени суток.
Есть инсталлятор (с использованием ботвы), у которого два "фоновых" изображения:
Код:

img1:=ImgLoad(WizardForm.Handle, ExpandConstant('img1.jpg'), ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.ClientHeight, True, True);
img2:=ImgLoad(WizardForm.Handle, ExpandConstant('img2.jpg'), ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.ClientHeight, True, True);

Я решил добавить кнопку, после нажатия на которую должен появиться определенный текст, а один из фонов - исчезнуть.
Попытался реализовать так:
Код:

procedure TestBtnHide(hBtn:HWND);
begin
  TestLabel.Show;
  TestLabel.Caption:= ExpandConstant('{cm:TestLabel2}');
  ImgSetVisibility(img2, false);
end;

procedure TestBtnShow(hBtn:HWND);
begin
  TestLabel.Show;
  TestLabel.Caption:= ExpandConstant('{cm:TestLabel1}');
  ImgSetVisibility(img2, true);
end;

В итоге: с текстом всё отлично, но вот изображение никак не реагирует. В чем ошибка, или нужно использовать другую функцию?

kotyarko@fb 10-07-2015 08:57 2527375

Цитата:

Цитата Sotonisto
В итоге: с текстом всё отлично, но вот изображение никак не реагирует. »

Пробуйте так:
Код:

procedure TestBtnHide(hBtn:HWND);
begin
  TestLabel.Show;
  TestLabel.Caption:= ExpandConstant('{cm:TestLabel2}');
  ImgSetVisibility(img2, false);
  ImgApplyChanges(WizardForm.Handle);
end;

procedure TestBtnShow(hBtn:HWND);
begin
  TestLabel.Show;
  TestLabel.Caption:= ExpandConstant('{cm:TestLabel1}');
  ImgSetVisibility(img2, true);
  ImgApplyChanges(WizardForm.Handle);
end;


Sotonisto 10-07-2015 10:38 2527411

kotyarko@fb, спасибо вам большое. Теперь все работает как надо.

habib2302 10-07-2015 20:20 2527556

Доброе время суток. Как сделать допустим разрегистрацию dll'ки через Exec перед установкой

Dodakaedr 10-07-2015 20:28 2527558

Цитата:

Цитата habib2302
Как сделать допустим разрегистрацию dll'ки через Exec перед установкой »

Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
 RC: integer;
begin
  if CurStep = ssInstall {или ssPreInstall} then
  Exec(ExpandConstant('{sys}\regsvr32.exe'), ' /u /s ' + 'test.dll', ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, RC)
end;


habib2302 10-07-2015 22:13 2527586

Dodakaedr, а как сделать разрегистрацию перед распаковкой файлов в зависимости от компонента

TryRooM 11-07-2015 00:06 2527609

habib2302, в зависимости от компонента
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
 RC: integer;
begin
//  if CurStep = ssInstall {или ssPreInstall} then
  case CurStep of ssInstall: {или ssPreInstall}
  if IsComponentSelected('r\b') {или if Installer.Checked} then
  Exec(ExpandConstant('{sys}\regsvr32.exe'), ' /u /s ' + 'test.dll', ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, RC)
end;
end;

Если вариантов всего два, то можно обойтись и оператором IF. Но если их, например, десять? В этом случае оптимален оператор варианта CASE.

habib2302 11-07-2015 08:52 2527655

Dodakaedr,


kotyarko@fb 11-07-2015 08:54 2527656

habib2302,
Код:

if CurStep = ssInstall then

Uragan66 11-07-2015 14:25 2527719

Всем доброго времени суток ! Может кто поможет реализовать такую идею : Нужно до страницы выбора папки назначения вставить страницу с выбором типа установки :
"Установка" или "Распаковка" (они должны быть взаимоисключающими т.е. с флагом exclusive ).
Если выбрана "Установка" то дальше установка должна идти как обычно (выбор папки, выбор компонентов и т.д. )
При выборе "Распаковка" должна быть страница выбора папки назначения и дальше просто распаковка в указанную пользователем папку. Можно это решить ?

palsn2000 12-07-2015 19:35 2528108

Доброе время суток. У меня возникли трудности с закрытием процесса. Нашел пример и на его основе попытался изобразить для своего случая:
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  begin
    if CurUninstallStep=usUninstall then
      begin
      Exec('taskkil','/f /im FmsProxy.exe', '', SW_Hide, ewWaitUntilTerminated, ErrorCode);
      end;
  end;

В итоге ничего не происходит - процесс как работал, так и продолжает работать.

На всякий случай:
скриншот


Что у меня в записи с taskkil не так?
Заранее спасибо.
________
P.S. И кстати ещё один момент - как видно на скриншоте этих процессов FmsProxy.exe может быть несколько - может из-за этого не работает, и тогда как убить их все разом?

habib2302 12-07-2015 19:52 2528111

palsn2000,
На этапе установки убить процесс

Код:

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

[Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

//**************************************************//
function InitializeSetup(): Boolean;
begin
  If RunTask('winamp.exe', false) then
    begin
      if MsgBox('Программа Winamp используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
          KillTask('winamp.exe');
          Result:= True;
        end else
          Exit;
    end;
Result:=True;
end;


На этапе деинсталляции убить процесс

Код:

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion

[Code]
// функции используемые при деинсталляции
// RunTask@{app}\ISTask.dll - название функции (в данном случае, если программа работает)
// и путь dll'ки где она расположена...

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('winamp.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Программа winamp.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask('winamp.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу winamp.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    end;
end;


Dodakaedr 12-07-2015 20:17 2528119

Цитата:

Цитата palsn2000
Что у меня в записи с taskkil не так? »

Нет такой программы. Попробуйте так:
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
errorcode: integer;
  begin
    if CurUninstallStep=usUninstall then
      begin
      Exec('taskkill',' /f /im FmsProxy.exe', '', SW_Hide, ewWaitUntilTerminated, ErrorCode);
      end;
  end;


palsn2000 12-07-2015 21:10 2528134

Dodakaedr, Большое спасибо, а то я всю голову изломал, что не так. Всё из-за моей невнимательности - всю жизнь мне мешает: пропущу какую-нибудь мелочь, а потом сам над собой смеюсь.

nik1967 13-07-2015 20:06 2528455

Цитата:

Цитата Uragan66
Можно это решить ? »

Можно
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon 
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon
[Files]
; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице                         
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;
       
function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
  Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
  case Sender of
    MyRadioBtn_1: begin
      WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
    MyRadioBtn_2: begin
      WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
  end;
end;

procedure GetInstTypePage();
begin
  MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

  try
    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
    // Можно использовать обычные .ico
    AIconFileName:= ExpandConstant('{sys}\shell32.dll');
    //

    Rect.Left:= 0;
    Rect.Top:= 0;
    Rect.Right:= 32;
    Rect.Bottom:= 32;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(138);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);                                               
        Top:= ScaleY(68);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Width:= WizardForm.InnerNotebook.Width;
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:PageTextHeader}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do begin
    Top:= ScaleY(120);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(138);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_1}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do begin
    Top:= ScaleY(50);
    Width:= ScaleX(150); 
    Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
    Checked:= True;
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(68);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_2}');
    Parent:= MyNewPage.Surface;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
    Result:= True;
end;

procedure InitializeWizard();
begin
  GetInstTypePage();
  WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if not IsChecked then begin
    case CurPageID of
      wpSelectDir: begin
        WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
      wpInstalling: begin
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
      wpFinished: begin
        WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
    end;
  end;
end;


Uragan66 13-07-2015 21:32 2528483

nik1967, спасибо большое ! Ваш скрипт отлично подходит. А как можно сделать чтобы конечные папки DestDir у распаковки и установки были разные ? Просто для установки вложенность папок большая и для распаковки это в конечном итоге не совсем удобно. Спасибо за помощь.

Dodakaedr 13-07-2015 22:24 2528501

Цитата:

Цитата Uragan66
чтобы конечные папки DestDir у распаковки и установки были разные »

Скрытый текст
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon; Check: not IsChecked
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon; Check: IsChecked

[Files]
; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
  Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
  case Sender of
    MyRadioBtn_1: begin
      WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
    MyRadioBtn_2: begin
      WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
  end;
end;

procedure GetInstTypePage();
begin
  MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

  try
    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
    // Можно использовать обычные .ico
    AIconFileName:= ExpandConstant('{sys}\shell32.dll');
    //

    Rect.Left:= 0;
    Rect.Top:= 0;
    Rect.Right:= 32;
    Rect.Bottom:= 32;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(68);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(138);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Width:= WizardForm.InnerNotebook.Width;
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:PageTextHeader}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do begin
    Top:= ScaleY(50);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(68);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_1}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do begin
    Top:= ScaleY(120);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
    Checked:= True;
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(138);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_2}');
    Parent:= MyNewPage.Surface;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
    Result:= True;
end;

procedure InitializeWizard();
begin
  GetInstTypePage();
  WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if not IsChecked then begin
    case CurPageID of
      wpSelectDir: begin
        WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
  if IsChecked then
    WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
    WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );

      end;
      wpInstalling: begin
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
      wpFinished: begin
        WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
    end;
  end;
end;


Uragan66 14-07-2015 01:53 2528530

Dodakaedr, Спасибо за помощь. Но я наверно неправильно объяснил суть
Мой скрипт
Код:

;InnoSetupVersion=5.3.10
[Setup]
AppName=ParticleIllusion Emitter Libraries
AppVerName=ParticleIllusion all version Emitter Libraries
AppPublisher=GenArts, Inc.
DefaultDirName={sd}\Portable Soft
OutputBaseFilename=Emitter Libraries
AlwaysShowComponentsList=yes
ShowComponentSizes=yes
ComponentsListTVStyle=yes
ComponentsListBtnImageFile=btnimage.bmp
AppendDefaultDirName=no
DirExistsWarning=no
AlwaysShowDirOnReadyPage=yes
DisableProgramGroupPage=yes
SetupIconFile=particleIllusion.ico
Compression=lzma
Uninstallable=no

//====={ Выбор языка }=====\\
[Languages]
Name: "rus"; MessagesFile: "compiler:Default.isl"
Name: "eng"; MessagesFile: "compiler:Languages\English.isl"

[Types]
Name: "full"; Description: "Полная установка"
Name: "custom"; Description: "Выборочная установка"; Flags: iscustom
Name: "compact"; Description: "Распаковка";

[Components]
Name: "Installation"; Description: "Установка"; Types: full; Flags: exclusive collapsed
Name: "Installation\Libraries"; Description: "Вся библиотека"; Types: full custom;
Name: "Installation\Libraries\allemiters"; Description: "Стандартные эмитеры"; Types: full custom;
Name: "Installation\Libraries\allemiters\Jear"; Description: "По годам выпуска"; Types: full custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2013"; Description: "Emitter of 2013"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2012"; Description: "Emitter of 2012"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2011"; Description: "Emitter of 2011"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2010"; Description: "Emitter of 2010"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2009"; Description: "Emitter of 2009"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2008"; Description: "Emitter of 2008"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2007"; Description: "Emitter of 2007"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2006"; Description: "Emitter of 2006"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2005"; Description: "Emitter of 2005"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2004"; Description: "Emitter of 2004"; Types: full  custom;
Name: "Installation\Libraries\allemiters\Jear\Emitter2003"; Description: "Emitter of 2003"; Types: full  custom;
Name: "Installation\Libraries\customemiters"; Description: "Пользовательские эмитеры"; Types: full custom;
Name: "Installation\Libraries\customemiters\On_type"; Description: "По типу (Абстракция, мульт и т.д.)"; Types: full custom;
Name: "Installation\Libraries\customemiters\Alan"; Description: "Эмитеры Alan"; Types: full custom;
Name: "Installation\Libraries\customemiters\Butterflies"; Description: "Эмитеры Butterflies-бабочки"; Types: full custom;
Name: "Installation\Libraries\customemiters\Flower"; Description: "Эмитеры Flower-цветы"; Types: full custom;
Name: "Installation\Libraries\customemiters\LCP"; Description: "Эмитеры LCP"; Types: full custom;
Name: "Installation\Libraries\customemiters\PE"; Description: "Эмитеры PE"; Types: full custom;
Name: "Installation\Libraries\customemiters\Misc"; Description: "Эмитеры разные"; Types: full custom;
Name: "Extracted"; Description: "Распаковка"; Types: compact; Flags: exclusive

[Files]
;Source: "{app}\Emitter Libraries\allemiters\2003\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2003"; Components: Installation\Libraries\allemiters\Jear\Emitter2003; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2004\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2004"; Components: Installation\Libraries\allemiters\Jear\Emitter2004; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2005\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2005"; Components: Installation\Libraries\allemiters\Jear\Emitter2005; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2006\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2006"; Components: Installation\Libraries\allemiters\Jear\Emitter2006; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2007\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2007"; Components: Installation\Libraries\allemiters\Jear\Emitter2007; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2008\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2008"; Components: Installation\Libraries\allemiters\Jear\Emitter2008; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2009\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2009"; Components: Installation\Libraries\allemiters\Jear\Emitter2009; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2010\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2010"; Components: Installation\Libraries\allemiters\Jear\Emitter2010; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2011\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2011"; Components: Installation\Libraries\allemiters\Jear\Emitter2011; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2012\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2012"; Components: Installation\Libraries\allemiters\Jear\Emitter2012; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2013\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\2013"; Components: Installation\Libraries\allemiters\Jear\Emitter2013; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\On_type\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\On_type"; Components: Installation\Libraries\customemiters\On_type; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\Alan\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\Alan"; Components: Installation\Libraries\customemiters\Alan; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\Butterflies\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\Butterflies"; Components: Installation\Libraries\customemiters\Butterflies; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\Flower\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\Flower"; Components: Installation\Libraries\customemiters\Flower; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\LCP\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\LCP"; Components: Installation\Libraries\customemiters\LCP; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\PE\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\PE"; Components: Installation\Libraries\customemiters\PE; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\Misc\*"; DestDir: "{app}\PortableApps\ParticleIllusion 3.0.9\App\particleIllusion 3.0\Emitter Libraries\Misc"; Components: Installation\Libraries\customemiters\Misc; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2003\*"; DestDir: "{app}\Emitter Libraries\2003"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2004\*"; DestDir: "{app}\Emitter Libraries\2004"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2005\*"; DestDir: "{app}\Emitter Libraries\2005"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2006\*"; DestDir: "{app}\Emitter Libraries\2006"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2007\*"; DestDir: "{app}\Emitter Libraries\2007"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2008\*"; DestDir: "{app}\Emitter Libraries\2008"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2009\*"; DestDir: "{app}\Emitter Libraries\2009"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2010\*"; DestDir: "{app}\Emitter Libraries\2010"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2011\*"; DestDir: "{app}\Emitter Libraries\2011"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2012\*"; DestDir: "{app}\Emitter Libraries\2012"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\allemiters\2013\*"; DestDir: "{app}\Emitter Libraries\2013"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\On_type\*"; DestDir: "{app}\Emitter Libraries\On_type"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\Alan\*"; DestDir: "{app}\Emitter Libraries\Alan"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\Butterflies\*"; DestDir: "{app}\Emitter Libraries\Butterflies"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\Flower\*"; DestDir: "{app}\Emitter Libraries\Flower"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\LCP\*"; DestDir: "{app}\Emitter Libraries\LCP"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\PE\*"; DestDir: "{app}\Emitter Libraries\PE"; Components: Extracted; Flags: ignoreversion
;Source: "{app}\Emitter Libraries\customemiters\Misc\*"; DestDir: "{app}\Emitter Libraries\Misc"; Components: Extracted; Flags: ignoreversion


у меня "Распаковка" идет как компонент , но так не совсем удобно и некрасиво. Как совместить скрипт который написал nik1967 с моим, но чтобы при выборе "Распаковка" все распаковывалось так как в моем скрипте при выборе компонента "Распаковка" ?

nik1967 14-07-2015 07:18 2528551

Uragan66, вместо "Components: Extracted" используй "Check: not IsChecked". То есть, вместо
Код:

Source: "{app}\Emitter Libraries\customemiters\Misc\*"; DestDir: "{app}\Emitter Libraries\Misc"; Components: Extracted; Flags: ignoreversion
пропиши
Код:

Source: "{app}\Emitter Libraries\customemiters\Misc\*"; DestDir: "{app}\Emitter Libraries\Misc"; Check: not IsChecked; Flags: ignoreversion
И да, если быть честным, то скрипт написал не я. Я просто нашёл его у себя в загашнике, и немного подправил. Мне неудобно, но автора я не знаю/не помню.

Uragan66 14-07-2015 08:51 2528582

nik1967, спасибо большое ! Все как надо. А поменять местами " Распаковка" и " Установка" на первой странице получится ? Извини что надоедаю.

nik1967 14-07-2015 09:50 2528612

Цитата:

Цитата Uragan66
получится ? »

Чего же не получится? Получится. Изменил предыдущий скрипт.

Uragan66 14-07-2015 11:01 2528656

nik1967, отлично ! Еще раз огромный респект за помощь !

Sotonisto 15-07-2015 02:21 2528966

Еще раз здравствуйте.
Вот наткнулся на такой инсталлятор:

Если флажок напротив "Я ознакомлен..." отсутствует - кнопка "Далее" будет неактивна (в любом случае).

Я попытался сделать нечто похожее (за основу инсталлятора взят ЭТОТ скрипт).
Сначала использовал стандартный пример: создал чекбокс
Код:

function Read: Boolean;
begin
  Result:= BtnGetEnabled(hNextBtn);
end;

procedure ReadClick(hBtn:HWND);
var
  Check: Boolean;
begin
  Check:=BtnGetChecked(hBtn);
  BtnSetEnabled(hNextBtn, Check);
end;

и добавил в wpSelectDir
Код:

if BtnGetChecked(ReadCheck)=true then BtnSetEnabled(hNextBtn, true) else BtnSetEnabled(hNextBtn, false);
if BtnGetChecked(ReadCheck)=true then WizardForm.NextButton.Enabled:= true else WizardForm.NextButton.Enabled:= false;

Но, столкнулся с двумя проблемами:
1. Обычно, если на диске недостаточно места, кнопка "Далее" будет неактивной. У меня же после установки флажка она становилась активной (независимо от свободного места).
2. Также "Далее" могла стать активной после выбора диска, на котором было достаточно места, независимо от того, был установлен флажок ("Я...") или нет.

После этого решил в GetFreeSpaceCaption заменить
Код:

BtnSetEnabled(hNextBtn,not (GetArrayLength(ADisk)>0));
WizardForm.NextButton.Enabled:=not (GetArrayLength(ADisk)>0);

на
Код:

if BtnGetChecked(ReadCheck)=true then BtnSetEnabled(hNextBtn,not (GetArrayLength(ADisk)>0)) else BtnSetEnabled(hNextBtn, false);
if BtnGetChecked(ReadCheck)=true then WizardForm.NextButton.Enabled:=not (GetArrayLength(ADisk)>0) else WizardForm.NextButton.Enabled:= false;

Вторая проблема решилась, но первая так и осталась.
Прошу помощи у всех, кто в этом разбирается.

Uragan66 15-07-2015 09:09 2528995

nik1967, извини, еще один небольшой вопрос : в твоем скрипте (ну или не совсем твоем, но автора мы то не знаем, хотя спасибо ему большое) создается новая страница. Я изучал код, но так и не понял где найти идентификатор этой страницы страницы чтобы предположим добавить на нее картинку или включить ее в панель ну и т.д. Для конкретного инсталятора оно может и не надо, просто изучить хочу. Конкретного руководства по по паскалю для Inno Setup найти не могу, а изучать весь паскаль нет времени. Если не трудно подсажи , пожалуйста.

Dodakaedr 15-07-2015 10:22 2529008

Uragan66, Parent:= MyNewPage.Surface

nik1967 15-07-2015 11:18 2529028

Uragan66, если в качестве родителя, то да, как и написал Dodakaedr: Parent:= MyNewPage.Surface;. А если нужно именно id, то MyNewPage.id

Uragan66 15-07-2015 12:37 2529054

Вложений: 1
Dodakaedr, nik1967, Спасибо большое, но ничего у меня не получается, не воспринимает ее компилятор как MyNewPage , ошибка как не в одном то в другом месте, например в этом
коде
HTML код:

; --- Generated by InnoSetup Script Joiner version 3.0, Jul 22 2009, (c) Bulat Ziganshin <Bulat.Ziganshin@gmail.com>. More info at http://issjoiner.codeplex.com/

; --- Source: exstracted.iss ------------------------------------------------------------
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon
[Files]
; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
  Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
  case Sender of
    MyRadioBtn_1: begin
      WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
    MyRadioBtn_2: begin
      WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
  end;
end;

procedure GetInstTypePage();
begin
  MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

  try
    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
    // Можно использовать обычные .ico
    AIconFileName:= ExpandConstant('{sys}\shell32.dll');
    //

    Rect.Left:= 0;
    Rect.Top:= 0;
    Rect.Right:= 32;
    Rect.Bottom:= 32;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(138);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(68);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Width:= WizardForm.InnerNotebook.Width;
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:PageTextHeader}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do begin
    Top:= ScaleY(120);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(138);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_1}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do begin
    Top:= ScaleY(50);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
    Checked:= True;
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(68);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_2}');
    Parent:= MyNewPage.Surface;
  end;
end;

function ShouldSkipPage1(PageID: Integer): Boolean;
begin
  if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
    Result:= True;
end;

procedure InitializeWizard1();
begin
  GetInstTypePage();
  WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
  if not IsChecked then begin
    case CurPageID of
      wpSelectDir: begin
    WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
    WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
      wpInstalling: begin
    WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
    WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
      wpFinished: begin
    WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
    end;
  end;
end;
[Setup]


; --- Source: MUI_InstallShield.iss ------------------------------------------------------------


//====={ Выбор языка }=====\\
[Languages]
Name: "rus"; MessagesFile: "compiler:Default.isl"
Name: "eng"; MessagesFile: "compiler:Languages\English.isl"

[Files]
Source: "bottom.bmp"; Flags: dontcopy
Source: "topline.bmp"; Flags: dontcopy

[code]
const
  SM_CXSCREEN = 0;
  SM_CYSCREEN = 1;

function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';

procedure Set_MUI_InstallShield;
var
  MyNewPage, ScreenWidth, ScreenHeight: Integer;
begin
  WizardForm.BEVEL1.Hide;
  ExtractTemporaryFile('bottom.bmp');
  WizardForm.WizardSmallBitmapImage.SetBounds(0, 418, 690, 41);
  WizardForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\bottom.bmp'));
  WizardForm.WizardSmallBitmapImage.Parent := WizardForm;
  ExtractTemporaryFile('topline.bmp');
  WizardForm.WizardBitmapImage2.SetBounds(0, 53, 690, 2);
  WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\topline.bmp'));
  WizardForm.WizardBitmapImage2.Parent := WizardForm;
  WizardForm.SelectDirBitmapImage.Hide;
  WizardForm.SelectGroupBitmapImage.Hide;
  WizardForm.Height := 483;
  WizardForm.Width := 696;
  ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
  ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
  WizardForm.SetBounds((ScreenWidth - WizardForm.Width) div 2, (ScreenHeight - WizardForm.Height) div 2,
      WizardForm.Width, WizardForm.Height);
  WizardForm.BACKBUTTON.SetBounds(296, 427, 77, 22);
  WizardForm.NEXTBUTTON.SetBounds(378, 427, 77, 22);
  WizardForm.CANCELBUTTON.SetBounds(600, 427, 77, 22);
  WizardForm.WizardBitmapImage.SetBounds(0, 55, 171, 363);
  WizardForm.WizardBitmapImage.Parent := WizardForm;
  WizardForm.WelcomePage.Parent.SetBounds(171,55,519,363);
  WizardForm.WelcomePage.Color := $00AB663D;
  WizardForm.FinishedPage.Color := $00AB663D;
  WizardForm.LicensePage.Color := $00AB663D;
  WizardForm.PasswordPage.Color := $00AB663D;
  WizardForm.InfoBeforePage.Color := $00AB663D;
  WizardForm.UserInfoPage.Color := $00AB663D;
  WizardForm.SelectDirPage.Color := $00AB663D;
  WizardForm.SelectDirPage.Parent.Align := alClient;
  WizardForm.SelectComponentsPage.Color := $00AB663D;
  WizardForm.SelectProgramGroupPage.Color := $00AB663D;
  WizardForm.SelectTasksPage.Color := $00AB663D;
  WizardForm.ReadyPage.Color := $00AB663D;
  WizardForm.PreparingPage.Color := $00AB663D;
  WizardForm.InstallingPage.Color := $00AB663D;
  WizardForm.InfoAfterPage.Color := $00AB663D;
  WizardForm.MAINPANEL.Parent := WizardForm;
  WizardForm.MAINPANEL.Color := $00663300;
  WizardForm.MAINPANEL.SetBounds(0, 0, 690, 53);
  WizardForm.WELCOMELABEL1.SetBounds(45, 119, 437, 42);
  WizardForm.WELCOMELABEL1.Font.Height := -12;
  WizardForm.WELCOMELABEL1.Font.Color := clWhite;
  WizardForm.WELCOMELABEL2.SetBounds(85, 167, 378, 160);
  WizardForm.WELCOMELABEL2.Font.Color := clWhite;
  WizardForm.PAGENAMELABEL.SetBounds(17, 5, 380, 12);
  WizardForm.PAGENAMELABEL.Font.Color := clWhite;
  WizardForm.PAGEDESCRIPTIONLABEL.SetBounds(30, 24, 366, 29);
  WizardForm.PAGEDESCRIPTIONLABEL.Font.Color := clWhite;
  WizardForm.LICENSELABEL1.SetBounds(64, 20, 437, 300);
  WizardForm.LICENSELABEL1.Font.Color := clWhite;
  WizardForm.LICENSEMEMO.SetBounds(64, 56, 437, 227);
  WizardForm.LICENSEMEMO.BringToFront;
  WizardForm.LICENSEACCEPTEDRADIO.Font.Color := clWhite;
  WizardForm.LICENSEACCEPTEDRADIO.SetBounds(64, 332, 150, 16);
  WizardForm.LICENSENOTACCEPTEDRADIO.Font.Color := clWhite;
  WizardForm.LICENSENOTACCEPTEDRADIO.SetBounds(230, 332, 150, 16);
  WizardForm.INFOBEFORECLICKLABEL.SetBounds(64, 20, 437, 24);
  WizardForm.INFOBEFORECLICKLABEL.Font.Color := clWhite;
  WizardForm.INFOBEFOREMEMO.SetBounds(64, 56, 437, 227);
  WizardForm.INFOAFTERCLICKLABEL.SetBounds(64, 20, 437, 24);
  WizardForm.INFOAFTERCLICKLABEL.Font.Color := clWhite;
  WizardForm.INFOAFTERMEMO.SetBounds(64, 56, 437, 227);
  WizardForm.USERINFONAMELABEL.SetBounds(64, 60, 128, 14);
  WizardForm.USERINFONAMELABEL.Font.Color := clWhite;
  WizardForm.USERINFONAMEEDIT.SetBounds(64, 79, 435, 20);
  WizardForm.USERINFOORGLABEL.SetBounds(64, 112, 128, 14);
  WizardForm.USERINFOORGLABEL.Font.Color := clWhite;
  WizardForm.USERINFOORGEDIT.SetBounds(64, 131, 435, 20);
  WizardForm.USERINFOSERIALLABEL.SetBounds(64, 164, 128, 14);
  WizardForm.USERINFOSERIALLABEL.Font.Color := clWhite;
  WizardForm.USERINFOSERIALEDIT.SetBounds(64, 183, 435, 20);
  WizardForm.SELECTDIRLABEL.SetBounds(64, 20, 437, 24);
  WizardForm.SELECTDIRLABEL.Font.Color := clWhite;
  WizardForm.SelectDirBrowseLabel.SetBounds(64, 44, 435, 24);
  WizardForm.SelectDirBrowseLabel.Font.Color := clWhite;
  WizardForm.DISKSPACELABEL.SetBounds(72, 277, 60, 14);
  WizardForm.DISKSPACELABEL.Font.Color := clWhite;
  WizardForm.BEVEL.SHAPE := bsFrame;
  WizardForm.BEVEL.SetBounds(64, 283, 437, 45);
  WizardForm.BEVEL.Parent := WizardForm.SelectDirPage;
  WizardForm.DIREDIT.SetBounds(72, 301, 345, 12);
  WizardForm.DIREDIT.BorderStyle := bsNone;
  WizardForm.DIREDIT.Color := $00AB663D;
  WizardForm.DIREDIT.Font.Color := clWhite;
  WizardForm.DIREDIT.AUTOSELECT := False;
  WizardForm.DirBrowseButton.SetBounds(420, 296, 77, 23);
  WizardForm.SELECTCOMPONENTSLABEL.SetBounds(64, 20, 437, 24);
  WizardForm.SELECTCOMPONENTSLABEL.Font.Color := clWhite;
  WizardForm.TYPESCOMBO.SetBounds(64, 56, 437, 20);
  WizardForm.COMPONENTSLIST.SetBounds(64, 80, 437, 227);
  WizardForm.COMPONENTSDISKSPACELABEL.SetBounds(64, 320, 437, 24);
  WizardForm.COMPONENTSDISKSPACELABEL.Font.Color := clWhite;
  WizardForm.SELECTSTARTMENUFOLDERLABEL.SetBounds(64, 20, 437, 36);
  WizardForm.SELECTSTARTMENUFOLDERLABEL.Font.Color := clWhite;
  WizardForm.SelectStartMenuFolderBrowseLabel.SetBounds(64, 100, 437, 14);
  WizardForm.SelectStartMenuFolderBrowseLabel.Font.Color := clWhite;
  WizardForm.GROUPEDIT.SetBounds(64, 120, 343, 20);
  WizardForm.GroupBrowseButton.SetBounds(414, 119, 77, 23);
  WizardForm.READYLABEL.SetBounds(64, 20, 437, 24);
  WizardForm.READYLABEL.Font.Color := clWhite;
  WizardForm.READYMEMO.SetBounds(64, 53, 437, 280);
  WizardForm.FINISHEDHEADINGLABEL.SetBounds(64, 20, 437, 24);
  WizardForm.FINISHEDHEADINGLABEL.Font.Height := -12;
  WizardForm.FINISHEDHEADINGLABEL.Font.Color := clWhite;
  WizardForm.FINISHEDLABEL.SetBounds(64, 60, 437, 14);
  WizardForm.FINISHEDLABEL.Font.Color := clWhite;
  WizardForm.RUNLIST.SetBounds(64, 146, 437, 190);
  WizardForm.RUNLIST.Font.Color := clWhite;
  WizardForm.STATUSLABEL.SetBounds(64, 20, 437, 14);
  WizardForm.STATUSLABEL.Font.Color := clWhite;
  WizardForm.FILENAMELABEL.SetBounds(64, 60, 437, 14);
  WizardForm.FILENAMELABEL.Font.Color := clWhite;
  WizardForm.PROGRESSGAUGE.SetBounds(64, 90, 430, 20);
  WizardForm.PASSWORDLABEL.SetBounds(64, 60, 437, 14);
  WizardForm.PASSWORDLABEL.Font.Color := clWhite;
  WizardForm.PASSWORDEDITLABEL.SetBounds(64, 90, 437, 14);
  WizardForm.PASSWORDEDITLABEL.Font.Color := clWhite;
  WizardForm.PASSWORDEDIT.SetBounds(64, 110, 400, 20);
  WizardForm.SELECTTASKSLABEL.SetBounds(64, 20, 437, 14);
  WizardForm.SELECTTASKSLABEL.Font.Color := clWhite;
  WizardForm.TASKSLIST.SetBounds(64, 45, 430, 300);
  WizardForm.TASKSLIST.Color := $00AB663D;
  WizardForm.TASKSLIST.Font.Color := clWhite;
  WizardForm.MyNewPage.Font.Color := clWhite;
end;

function CheckSerial(Serial: String): Boolean;
begin
  Result := Serial = '123456';
end;

procedure InitializeWizard2();
begin
  Set_MUI_InstallShield;
end;

[Setup]


; --- Dispatching code ------------------------------------------------------------

[code]

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := ShouldSkipPage1(PageID); if not Result then exit;
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  InitializeWizard2();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
end;

ругается что нет такого идентификатора (хотел цвет страницы поменять)

nik1967 15-07-2015 12:57 2529059

Uragan66, страница кастомная, создана пользователем, и к WizardForm отношения не имеет. То есть вместо WizardForm.MyNewPage.Color := $00AB663D; нужно MyNewPage.Surface.Color := $00AB663D;

Uragan66 15-07-2015 16:28 2529123

nik1967, спасибо !

Uragan66 16-07-2015 21:00 2529537

Всем доброго времени суток ! Может кто подскажет как в этом
коде
[code]
Код:


procedure iswin7_add_glass(Handle:HWND; Left, Top, Right, Bottom : Integer; GDIPLoadMode: boolean);external 'iswin7_add_glass@files:iswin7.dll stdcall';
procedure iswin7_add_button(Handle:HWND);external 'iswin7_add_button@files:iswin7.dll stdcall';
procedure iswin7_free;external 'iswin7_free@files:iswin7.dll stdcall';

// функция проверки того, сработает iswin7, или нет
function GlassEnabled:Boolean;external 'GlassEnabled@files:dwmEnabled.dll stdcall';


// Сделал отдельную процедуру создания лого,чтоб удобно было - вызываем и указываем размеры
procedure LogoImage(ImgLeft,ImgTop,ImgWidth,ImgHeight:Integer);
var BtnPanel:TPanel;
begin
ExtractTemporaryFile('gnom.bmp');
//-----------start----------LOGO-----------//
    BtnPanel:=TPanel.Create(WizardForm)
    BtnPanel.SetBounds(ImgLeft,ImgTop,ImgWidth,ImgHeight);
    BtnPanel.Cursor:=crHand
    BtnPanel.ParentColor := True;
    //BtnPanel.OnClick:=@logoOnClick
    BtnPanel.Parent:=WizardForm

 with TBitmapImage.Create(WizardForm) do
  begin
    Parent := BtnPanel;
    SetBounds(0,0,BtnPanel.Width,BtnPanel.Height);
    // Собственно, применение
    if GlassEnabled then BackColor := BtnPanel.Color else BackColor := clNone;
   
    ReplaceColor := clBlack; // это обязательно
    ReplaceWithColor := clNone;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\gnom.bmp'));
  end;
end;
procedure InitializeWizard16();
begin
    if GlassEnabled then WizardForm.WelcomeLabel2.Caption:='Включено' else  WizardForm.WelcomeLabel2.Caption:='Выключено';
  // Необходимо добавлять каждую кнопку расположенную на стекле
  // до инициализации стекла для того что бы не было дыр ))
  iswin7_add_button(WizardForm.BackButton.Handle);
  iswin7_add_button(WizardForm.NextButton.Handle);
  iswin7_add_button(WizardForm.CancelButton.Handle);
  // Параметр True не трогать он для htuos ))
  iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);

// Вызываем лого, и говорим ему координаты.
 LogoImage(ScaleX(618),ScaleY(0),ScaleX(69),ScaleY(50));
end;

procedure DeinitializeSetup11();
begin
  iswin7_free;
end;

на лого прикрепить кликабельную ссылку ? Заранее благодарен за помощь

Sotonisto 17-07-2015 05:55 2529610

Uragan66, попробуйте так:
Код:

procedure LogoOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://www.google.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;


Uragan66 17-07-2015 08:03 2529622

Sotonisto, так уже пробовал
Скрытый текст
[code]
Код:


procedure iswin7_add_glass(Handle:HWND; Left, Top, Right, Bottom : Integer; GDIPLoadMode: boolean);external 'iswin7_add_glass@files:iswin7.dll stdcall';
procedure iswin7_add_button(Handle:HWND);external 'iswin7_add_button@files:iswin7.dll stdcall';
procedure iswin7_free;external 'iswin7_free@files:iswin7.dll stdcall';

// функция проверки того, сработает iswin7, или нет
function GlassEnabled:Boolean;external 'GlassEnabled@files:dwmEnabled.dll stdcall';


// Сделал отдельную процедуру создания лого,чтоб удобно было - вызываем и указываем размеры
procedure LogoImage(ImgLeft,ImgTop,ImgWidth,ImgHeight:Integer);
var BtnPanel:TPanel;
begin
ExtractTemporaryFile('gnom.bmp');
//-----------start----------LOGO-----------//
    BtnPanel:=TPanel.Create(WizardForm)
    BtnPanel.SetBounds(ImgLeft,ImgTop,ImgWidth,ImgHeight);
    BtnPanel.Cursor:=crHand
    BtnPanel.ParentColor := True;
    //BtnPanel.OnClick:=@logoOnClick
    BtnPanel.Parent:=WizardForm



 with TBitmapImage.Create(WizardForm) do
  begin
    Parent := BtnPanel;
    SetBounds(0,0,BtnPanel.Width,BtnPanel.Height);
    // Собственно, применение
    if GlassEnabled then BackColor := BtnPanel.Color else BackColor := clNone;
   
    ReplaceColor := clBlack; // это обязательно
    ReplaceWithColor := clNone;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\gnom.bmp'));
  end;
end;

procedure LogoOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://www.google.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard16();
begin
    if GlassEnabled then WizardForm.WelcomeLabel2.Caption:='Включено' else  WizardForm.WelcomeLabel2.Caption:='Выключено';
  // Необходимо добавлять каждую кнопку расположенную на стекле
  // до инициализации стекла для того что бы не было дыр ))
  iswin7_add_button(WizardForm.BackButton.Handle);
  iswin7_add_button(WizardForm.NextButton.Handle);
  iswin7_add_button(WizardForm.CancelButton.Handle);
  // Параметр True не трогать он для htuos ))
  iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);

// Вызываем лого, и говорим ему координаты.
 LogoImage(ScaleX(618),ScaleY(0),ScaleX(69),ScaleY(50));
end;

procedure DeinitializeSetup11();
begin
  iswin7_free;
end;

, не работает, может не в том месте кода вставляю ?

Sotonisto 17-07-2015 09:08 2529641

Uragan66, вы забыли раскомментировать строку BtnPanel.OnClick:=@logoOnClick в процедуре создания лого.

Uragan66 17-07-2015 15:25 2529740

Sotonisto, Спасибо большое за помощь, но когда раскомментирую эту строку компилятор не находит идентификатора logoOnClick.

Sotonisto 17-07-2015 15:45 2529746

Цитата:

Цитата Uragan66
не находит идентификатора »

Извините, я не сразу заметил, что у вас процедура LogoOnClick расположена после процедуры LogoImage, хотя должна находится перед ней.
Скрипт
Код:

procedure iswin7_add_glass(Handle:HWND; Left, Top, Right, Bottom : Integer; GDIPLoadMode: boolean);external 'iswin7_add_glass@files:iswin7.dll stdcall';
procedure iswin7_add_button(Handle:HWND);external 'iswin7_add_button@files:iswin7.dll stdcall';
procedure iswin7_free;external 'iswin7_free@files:iswin7.dll stdcall';

// функция проверки того, сработает iswin7, или нет
function GlassEnabled:Boolean;external 'GlassEnabled@files:dwmEnabled.dll stdcall';

procedure LogoOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://www.google.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

// Сделал отдельную процедуру создания лого,чтоб удобно было - вызываем и указываем размеры
procedure LogoImage(ImgLeft,ImgTop,ImgWidth,ImgHeight:Integer);
var BtnPanel:TPanel;
begin
ExtractTemporaryFile('gnom.bmp');
//-----------start----------LOGO-----------//
    BtnPanel:=TPanel.Create(WizardForm)
    BtnPanel.SetBounds(ImgLeft,ImgTop,ImgWidth,ImgHeight);
    BtnPanel.Cursor:=crHand
    BtnPanel.ParentColor := True;
    BtnPanel.OnClick:=@LogoOnClick
    BtnPanel.Parent:=WizardForm

 with TBitmapImage.Create(WizardForm) do
  begin
    Parent := BtnPanel;
    SetBounds(0,0,BtnPanel.Width,BtnPanel.Height);
    // Собственно, применение
    if GlassEnabled then BackColor := BtnPanel.Color else BackColor := clNone;
   
    ReplaceColor := clBlack; // это обязательно
    ReplaceWithColor := clNone;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\gnom.bmp'));
  end;
end;

procedure InitializeWizard16();
begin
    if GlassEnabled then WizardForm.WelcomeLabel2.Caption:='Включено' else  WizardForm.WelcomeLabel2.Caption:='Выключено';
  // Необходимо добавлять каждую кнопку расположенную на стекле
  // до инициализации стекла для того что бы не было дыр ))
  iswin7_add_button(WizardForm.BackButton.Handle);
  iswin7_add_button(WizardForm.NextButton.Handle);
  iswin7_add_button(WizardForm.CancelButton.Handle);
  // Параметр True не трогать он для htuos ))
  iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);

// Вызываем лого, и говорим ему координаты.
 LogoImage(ScaleX(618),ScaleY(0),ScaleX(69),ScaleY(50));
end;

procedure DeinitializeSetup11();
begin
  iswin7_free;
end;


Uragan66 17-07-2015 16:31 2529767

Sotonisto, спасибо. Но не хочет работать . Установщик компилируется нормально, но ссылки не работают, то есть клик на лого ничего не дает... Хотя вот
скрипт
Код:

procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
  ShellExec('', 'http://www.forum.ru-board.com', '' , '', SW_SHOW, ewNoWait, ResCode)
end;

procedure InitializeWizard();
var
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
begin
  ExtractTemporaryFile('Button.bmp')
 
  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=320
    Top:=100
    Width:=132
    Height:=27
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm
    end;
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
    Parent:=BtnPanel
  end;
 end;

с такой же функцией и в нем все работает... Но в нем нет прозрачности

Sotonisto 17-07-2015 17:43 2529790

Uragan66, в каком смысле нет прозрачности?
К слову, желательно увидеть весь скрипт, а еще лучше - архив со всеми файлами (для полноты картины). Исправлять ошибки вслепую - напрасная трата времени :)

Uragan66 17-07-2015 18:20 2529805

Sotonisto, в том скрипте нельзя поставить лого на MAINPANEL. Прикрепил архив, но еще не полностью сделано, много недоработок, посмотрите, пожалуйста, если есть время...

habib2302 17-07-2015 20:06 2529822

как убрать PreparingPage перед распаковкой портативной версии

ekspoint 18-07-2015 03:21 2529911

Цитата:

Цитата habib2302
как убрать PreparingPage перед распаковкой портативной версии »

не?
Код:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if PageID = wpPreparing then Result:= True;
end;

или
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID= wpPreparing then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;


habib2302 18-07-2015 08:55 2529934

ekspoint, не помогло

Sotonisto 18-07-2015 09:40 2529947

Uragan66, мне не удалось проверить скрипт на работоспособность т.к. использую ANSI версию IS.
Пробежался глазами по коду и признаюсь, такой мешанины из скриптов я еще ни разу не видел (не в обиду). Я понимаю, что вы сами их писали и прекрасно знаете что и где, но 9 секций [Setup], 5 [Files] и 2 [Languages] (дублирующие друг друга) в одном скрипте - как по мне, так это перебор :) Для меня уже странно то, что они вообще у вас работают :)
Сейчас попытаюсь его пересобрать "под себя", потом отпишусь получилось или нет.

habib2302 18-07-2015 10:09 2529953

Цитата:

Цитата Sotonisto
такой мешанины из скриптов я еще ни разу не видел »

согласен.
Uragan66, лучше разбить каждую секцию на скрипты, а потом поудалять дублирующие строки софтиной Beyond Compare 4 или через сайт (пример прикрепил)

Uragan66 18-07-2015 10:18 2529955

Sotonisto, согласен, смесь еще та... Но я первый раз работаю с Inno Setup, так что не судите строго :) А секций дублирующих почему много ? отдельные скрипты собирал Join Skripts, вот так и получилось. У меня компилируется нормально и работает тоже, но "сижу" в основном на ХР -ке, а потом проверил на 8.1 x-64 там вообще нет картинок, задействованных в секции MUI_InstallShield и в скине кнопки обычные, непонятно почему. Если у вас получиться проверить и исправить ошибки буду премного благодарен

habib2302, спасибо , попробую...

Цитата:

Цитата habib2302
или через сайт (пример прикрепил) »

Не могу зайти на него, нет соединения... Попробую Beyond Compare 4

habib2302 18-07-2015 15:59 2530009

Цитата:

Цитата El Sanchez
А вот если запускать из секции Code »

и как?

ekspoint 18-07-2015 17:55 2530041

как сделать так что бы инсталлятор запускался от админа, в setup поставил PrivilegesRequired=admin но не помогает

kotyarko@fb 18-07-2015 17:55 2530042

Цитата:

Цитата habib2302
и как? »

Цитата:

Цитата El Sanchez
А вот если запускать из секции Code при помощи Exec »


ekspoint 18-07-2015 17:56 2530043

Цитата:

Цитата habib2302
не помогло »

ну тогда вроде больше никак, я тоже раньше писал про это, сказали что нет

habib2302 22-07-2015 09:57 2531255

kotyarko@fb, и как?

Uragan66 22-07-2015 10:27 2531274

Всем привет ! Возник вопрос как на страницу выбора компонентов добавить кнопку с запуском программы ( это каталог html, но сделанный в формате exe ) Буду благодарен за помощь.

kotyarko@fb 22-07-2015 11:48 2531320

Цитата:

Цитата habib2302
и как? »

Ну блин, ну я же всё нужное процитировал.. Используй Exec.

Цитата:

Цитата Uragan66
Возник вопрос как на страницу выбора компонентов добавить кнопку с запуском программы ( это каталог html, но сделанный в формате exe ) »

Примерно так:
Код:

Var
 ExecButton: TNewButton;

Procedure ExecButtonOnClick(Sender: TObject);
var
 ResCode: Integer;
begin
 Exec(ExpandConstant('ПУТЬ_К_ФАЙЛУ'), '', '', SW_SHOW, ewNoWait, ResCode);
end;

Procedure InitializeWizard();
begin
 ExecButton := TNewButton.Create(WizardForm);
 with ExecButton do
 begin
  Parent := WizardForm;
  SetBounds(ScaleX(50), ScaleY(WizardForm.ComponentsList.Height + 20), ScaleX(30), ScaleY(15));
  Caption := 'Запуск';
  OnClick := @ExecButtonOnClick;
 end;
end;

Procedure CurPageChanged(CurPageID: Integer);
begin
 ExecButton.Hide;
 case CurPageID of
  wpSelectComponents: ExecButton.Show;
 end;
end;


Uragan66 22-07-2015 16:04 2531459

Вложений: 1
kotyarko@fb, Спасибо большое за код , но на дефолтной странице Inno он работает, а когда добавляю на свою страницу нажатие на кнопку ничего не дает
код
[code]
Код:

type
  TComponentDesc = record
    Description: String;
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescPanel, CompDescImgPanel: TPanel;
  CompDescText: array[1..2] of TLabel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;
  ExecButton: TNewButton;

Procedure ExecButtonOnClick(Sender: TObject);
var
 ResCode: Integer;
begin
 Exec(ExpandConstant('Catalog.exe'), '', '', SW_SHOW, ewNoWait, ResCode);
end;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    CompDescImg.Show;

    CompDescText[2].Caption := CompDescs[CompIndex].Description;
    CompDescText[2].Enabled := True;
  end else
  begin
    CompDescText[2].Caption := CustomMessage('ComponentsInfo');
    CompDescText[2].Enabled := False;
    CompDescImg.Hide;
  end;
  LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescImg.Hide;
  CompDescText[2].Caption := CustomMessage('ComponentsInfo');
  CompDescText[2].Enabled := False;
  LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
 ExecButton := TNewButton.Create(WizardForm);
 with ExecButton do
 begin
  Parent := WizardForm;
  SetBounds(ScaleX(89), ScaleY(WizardForm.ComponentsList.Height + 105), ScaleX(60), ScaleY(22));
  Caption := 'Каталог';
  OnClick := @ExecButtonOnClick;
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(160), ScaleY(185));
  WizardForm.ComponentsList.Color := $00ffffff;
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(180), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
  end;
  end;
end;
  CompDescText[1] := TLabel.Create(WizardForm);
  with CompDescText[1] do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsImgInfo');
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Hide;
  end;

  CompDescPanel := TPanel.Create(WizardForm);
  with CompDescPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(180), ScaleY(125), ScaleX(225), ScaleY(80));
    BevelInner := bvLowered;
  end;

  CompDescText[2] := TLabel.Create(WizardForm);
  with CompDescText[2] do
  begin
    Parent := CompDescPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsInfo');
    Font.Color := clActiveCaption;
  end;

  AddCompDescription(1, CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
  AddCompDescription(2, CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
  end;
Procedure CurPageChanged(CurPageID: Integer);
begin
 ExecButton.Hide;
 case CurPageID of
  wpSelectComponents: ExecButton.Show;
 end;
end;


Dodakaedr 22-07-2015 16:08 2531462

Uragan66, укажите путь к Catalog.exe

При условии что Catalog.exe находится рядом с инсталятором:
Код:

Procedure ExecButtonOnClick(Sender: TObject);
var
 ResCode: Integer;
begin
 Exec(ExpandConstant('{src}\Catalog.exe'), '', '', SW_SHOW, ewNoWait, ResCode);
end;


kotyarko@fb 22-07-2015 16:09 2531465

Цитата:

Цитата Uragan66
нажатие на кнопку ничего не дает »

Код:

[Files]
Source: "Catalog.exe"; Flags: dontcopy

[*Code]
Procedure ExecButtonOnClick(Sender: TObject);
var
 ResCode: Integer;
begin
 ExtractTemporaryFile('Catalog.exe');
 Exec(ExpandConstant('{tmp}\Catalog.exe'), '', '', SW_SHOW, ewNoWait, ResCode);
end;


Uragan66 22-07-2015 18:08 2531529

Dodakaedr, спасибо, путь пробовал по - разному указывать , не работало.
kotyarko@fb, Еще раз спасибо, извлечение в темп помогло, все нормально работает !

Shkutu 28-07-2015 16:54 2533415

Всем доброго времени суток!
А подскажите плиз, можно ли как-то на окно выбора языка установки добавить свои компоненты? И если можно, то как? А то просмотрела всю "Support Classes Reference", но соответствующих описаний не нашла:(

kotyarko@fb 28-07-2015 22:00 2533508

Цитата:

Цитата Shkutu
А подскажите плиз, можно ли как-то на окно выбора языка установки добавить свои компоненты? И если можно, то как? »

Только создавать кастомную форму. Пример есть тут.

Dodakaedr 28-07-2015 22:52 2533538

Цитата:

Цитата Shkutu
можно ли как-то на окно выбора языка установки добавить свои компоненты? И если можно, то как? »

Можно. Как-то так:
Код:

[Setup]
AppName=Example
AppVerName=Example
DefaultDirName={pf}\Example
DefaultGroupName=Example
OutputDir=.

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Code]
function InitializeLanguageDialog(): Boolean;
var
  txt: TLabel;
begin
  with SelectLanguageForm do begin
  txt:= TLabel.Create(SelectLanguageForm);
  txt.Caption := 'Example';
  txt.SetBounds(IconBitmapImage.Left,IconBitmapImage.Top +70,10,15);
  txt.Parent:= SelectLanguageForm;
  end;
 Result := True;
end;


Edzan 29-07-2015 09:08 2533632

Прошу помощи, потому как слегка заблудился во всей этой информации. С инсталляцией вроде бы всё понятно, но меня интересует деинсталляция, а именинно то как её костамизировать.
В идеале, мне нужно, что бы при запуске деинсталлятора выводилось окно где пользователь может выбрать компоненты для удаления(желательно через чекбокс) далее сам процесс удаление и в конце информация, что всё прошло хорошо или всё прошло плохо.
Буду благодарен всем кто направит меня на путь истинный.

Shkutu 30-07-2015 12:39 2534200

Dodakaedr, ругается на SelectLanguageForm, пишет, что неизвестный идентификатор. (

TryRooM 30-07-2015 14:12 2534253

Shkutu, Пример, который вам дали для расширенной версии компилятора.

vadjliss 30-07-2015 18:57 2534463


ребята помогите
надо скрипт
что бы после установки автоматически переходила на сайт программы

habib2302 30-07-2015 19:26 2534479

vadjliss,
Код:

[Run]
Filename: "http://forum.oszone.net"; Flags: shellexec nowait


ekspoint 30-07-2015 23:33 2534629

Цитата:

Цитата vadjliss
что бы после установки автоматически переходила на сайт программы »

Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
  If CurStep = ssDone then
begin
  ShellExec('open', 'http://....', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
end;


vadjliss 01-08-2015 14:18 2535376

спасибо вы как всегда на высоте

ещё вопрос создаю инсталятор что бы распаковывал на рабочий стол
но он создаёт ветку в реестре и файлы unins000.exe
помогите со скриптом чтобы чисто распаковывал на рабочий стол без лишних файлов

habib2302 01-08-2015 14:50 2535390

vadjliss,
Код:

[Setup]
// без компонентов
Uninstallable=false
CreateUninstallRegKey=false

// в зависимости от компонента
Uninstallable=not IsComponentSelected('GPUZ\P')
CreateUninstallRegKey=not IsComponentSelected('GPUZ\P')


vadjliss 01-08-2015 17:31 2535473

ребята а скриптом помочь можете чтобы был инстолятор и распаковка portable в одном

nik1967 01-08-2015 18:38 2535508

vadjliss, http://forum.oszone.net/post-2528455.html#post2528455

vadjliss 01-08-2015 20:21 2535545

спасибо nik1967

vadjliss 01-08-2015 21:01 2535570

ребята у меня инстолятор и распаковка portable в одном
как сделать чтобы в portable распаковывалась другая папка
Скрытый текст
#define MyAppName "Icecream PDF Converter"
#define MyAppExeName "pdfconverter.exe"
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
SetupIconFile=C:\Users\111\Desktop\скрипт\image\1.ico
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
[Files]
Source: C:\Users\111\Desktop\Новая папка\ProgramFilesFolder\Icecream PDF Converter\pdfconverter.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Users\111\Desktop\Новая папка\WindowsFolder\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
const
DI_NORMAL = 3;

var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
case Sender of
MyRadioBtn_1: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
MyRadioBtn_2: begin
WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;

procedure GetInstTypePage();
begin
MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

try
// в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
// Можно использовать обычные .ico
AIconFileName:= ExpandConstant('{sys}\shell32.dll');
//

Rect.Left:= 0;
Rect.Top:= 0;
Rect.Right:= 32;
Rect.Bottom:= 32;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(68);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(138);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;
except
end;

with TNewStaticText.Create(WizardForm) do begin
Width:= WizardForm.InnerNotebook.Width;
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:PageTextHeader}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do begin
Top:= ScaleY(50);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(68);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_1}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do begin
Top:= ScaleY(120);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
Checked:= True;
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(138);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_2}');
Parent:= MyNewPage.Surface;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
Result:= True;
end;

procedure InitializeWizard();
begin
GetInstTypePage();
WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if not IsChecked then begin
case CurPageID of
wpSelectDir: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
if IsChecked then
WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
end;
wpInstalling: begin
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
wpFinished: begin
WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
end;

Dodakaedr 01-08-2015 23:35 2535653

vadjliss,
Пример
Код:

[Files]
Source: "ваша папка\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs


vadjliss 02-08-2015 06:01 2535689

спасибо Dodakaedr
но мне нужно чтобы portable распаковывала свою папку которая будет в инстоляторе
а здесь
Код:

[Files]
Source: "ваша папка\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs

она распаковывает другую папку и инстолятора в одну
короче надо что бы portable не трогала папку инстолятора
вот мой код
скрипт
[code]#define MyAppName "Icecream PDF Converter"
#define MyAppExeName "pdfconverter.exe"
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
SetupIconFile=C:\Users\111\Desktop\скрипт\image\1.ico
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
[Files]
Source: C:\Users\111\Desktop\Новая папка\ProgramFilesFolder\Icecream PDF Converter\pdfconverter.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Users\111\Desktop\Новая папка\WindowsFolder\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\Users\111\Desktop\Новая папка\DesktopFolder\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs

[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
const
DI_NORMAL = 3;

var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
case Sender of
MyRadioBtn_1: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
MyRadioBtn_2: begin
WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;

procedure GetInstTypePage();
begin
MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

try
// в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
// Можно использовать обычные .ico
AIconFileName:= ExpandConstant('{sys}\shell32.dll');
//

Rect.Left:= 0;
Rect.Top:= 0;
Rect.Right:= 32;
Rect.Bottom:= 32;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(68);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(138);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;
except
end;

with TNewStaticText.Create(WizardForm) do begin
Width:= WizardForm.InnerNotebook.Width;
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:PageTextHeader}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do begin
Top:= ScaleY(50);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(68);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_1}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do begin
Top:= ScaleY(120);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
Checked:= True;
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(138);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_2}');
Parent:= MyNewPage.Surface;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
Result:= True;
end;

procedure InitializeWizard();
begin
GetInstTypePage();
WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if not IsChecked then begin
case CurPageID of
wpSelectDir: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
if IsChecked then
WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
end;
wpInstalling: begin
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
wpFinished: begin
WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
end;

извините но очень нужно

Dodakaedr 02-08-2015 22:24 2535972

vadjliss, Сделайте вот так и все поймете.
Код:

[Files]
Source: "ваша папка портабл\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: "ваша папка не портабл\*"; DestDir: "{app}"; Check: "IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs

И как понять?
Цитата:

Цитата vadjliss
короче надо что бы portable не трогала папку инстолятора »

что за папка инсталлятора?

vadjliss 03-08-2015 05:58 2536032

спасибо всё как надо

vadjliss 03-08-2015 07:57 2536060

да и ещё не могу понять как поменять иконки на свой
Скрытый текст
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon; Check: not IsChecked
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon; Check: IsChecked

[Files]
; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
const
DI_NORMAL = 3;

var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
case Sender of
MyRadioBtn_1: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
MyRadioBtn_2: begin
WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;

procedure GetInstTypePage();
begin
MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

try
// в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
// Можно использовать обычные .ico
AIconFileName:= ExpandConstant('{sys}\shell32.dll');
//

Rect.Left:= 0;
Rect.Top:= 0;
Rect.Right:= 32;
Rect.Bottom:= 32;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(68);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(138);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;
except
end;

with TNewStaticText.Create(WizardForm) do begin
Width:= WizardForm.InnerNotebook.Width;
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:PageTextHeader}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do begin
Top:= ScaleY(50);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(68);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_1}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do begin
Top:= ScaleY(120);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
Checked:= True;
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(138);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_2}');
Parent:= MyNewPage.Surface;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
Result:= True;
end;

procedure InitializeWizard();
begin
GetInstTypePage();
WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if not IsChecked then begin
case CurPageID of
wpSelectDir: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
if IsChecked then
WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
end;
wpInstalling: begin
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
wpFinished: begin
WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
end;

TryRooM 03-08-2015 11:44 2536165

vadjliss, Пробуйте
http://rghost.ru/7VmP5Z6Yk

us_ov 05-08-2015 14:18 2537309

пожалуйста подскажите как реализовать на странице выбора папки - выбор дисков
имеется в виду чтобы выбор был ТОЛЬКО корень дисков доступных в системе

habib2302 05-08-2015 15:38 2537355

Доброе время суток. Возможно ли задать кодировку создаваемого ini файла например на utf-8

Nordek 05-08-2015 18:23 2537454

Цитата:

Цитата vadjliss
как исправить инсталятор создаётся не там где надо »

В [Setup]:
Код:

OutputDir=Папка инсталлятора
если хотите рядом со скриптом, то:
Код:

OutputDir=.

vadjliss 05-08-2015 18:45 2537466

извиняюсь я не правильно выразился
при распаковки создаётся 2 исполняемых файла один надо убрать как это можно сделать
вот скрин

Код:

#define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "Amakrits.vsf"

[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
UninstallFilesDir={app}\Новая папка\Новая папка

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"; Tasks: desktopicon


Nordek 05-08-2015 20:21 2537515

Здесь:
Код:

[Files]
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\*; DestDir: """{app}"

удалите это:
Код:

Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe; DestDir: {app}; Flags: ignoreversion

vadjliss 05-08-2015 20:29 2537520

спасибо Nordek
а, я голову сломал

Nordek 05-08-2015 20:39 2537522

vadjliss, Зачем удаляете сообщения? На заметку: Такое действие считается дурным тоном.

Если при вопросе получилось описать не совсем то что имели ввиду, то: могли предыдущее сообщение оставить как есть, а следующим сообщением уточнить.

vadjliss 06-08-2015 06:24 2537667

ещё один вопрос
вот скрин

Nordek 06-08-2015 07:29 2537676

vadjliss, В [Setup] добавьте VersionInfoDescription.
Пример:
Код:

VersionInfoDescription=Описание

vadjliss 06-08-2015 07:50 2537680

спасибо как всегда оперативно Nordek

нашёл вот этот скрипт
Код:

#define MainExe "{app}\Bin32\crysis.exe"
#define MainExe64 "{app}\Bin64\crysis.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)

[Icons]
Name: "{group}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Check: IsWin64
Name: "{group}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Check: not IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64
Name: "{group}\Удалить программу"; FileName: "{uninstallexe}"; IconFileName: "{sys}\shell32.dll"; IconIndex: 32

я так понял это чтобы устанавливалось на x32_x64
как его правильно вмонтировать сюда
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "BlurayConverterUltimate.exe"

[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
VersionInfoDescription=BlurayConverterUltimate
;UninstallFilesDir={app}\Новая папка\Новая папка

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
;Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"; Tasks: desktopicon

и как полностью удалить group

Nordek 06-08-2015 10:43 2537719

vadjliss, Пример:
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "{app}\Blu-ray Converter Ultimate\BlurayConverterUltimate.exe"
#define MyAppExeName64 "{app}\Blu-ray Converter Ultimate\BlurayConverterUltimate.exe"
#define MyAppExeNameDir Copy(MyAppExeName, 1, RPos("\", MyAppExeName)-1)
#define MyAppExeName64Dir Copy(MyAppExeName64, 1, RPos("\", MyAppExeName64)-1)


[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
VersionInfoDescription=BlurayConverterUltimate
;UninstallFilesDir={app}\Новая папка\Новая папка

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: C:\Users\Dilan\Desktop\Output\BlurayConverterUltimate32.exe; DestDir: {app}\Blu-ray Converter Ultimate; DestName: BlurayConverterUltimate.exe; Flags: ignoreversion; Check: not IsWin64
Source: C:\Users\Dilan\Desktop\Output\BlurayConverterUltimate64.exe; DestDir: {app}\Blu-ray Converter Ultimate; DestName: BlurayConverterUltimate.exe; Flags: ignoreversion; Check: IsWin64
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\{#MyAppName}; FileName: {#MyAppExeName}; WorkingDir: {#MyAppExeNameDir}; Check: not IsWin64
Name: {group}\{#MyAppName}; FileName: {#MyAppExeName64}; WorkingDir: {#MyAppExeName64Dir}; Check: IsWin64
Name: {userdesktop}\{#MyAppName}; FileName: {#MyAppExeName}; WorkingDir: {#MyAppExeNameDir}; Tasks: desktopicon; Check: not IsWin64
Name: {userdesktop}\{#MyAppName}; FileName: {#MyAppExeName64}; WorkingDir: {#MyAppExeName64Dir}; Tasks: desktopicon; Check: IsWin64
Name: {group}\Удалить программу; FileName: {uninstallexe}; IconFileName: {sys}\shell32.dll; IconIndex: 32


us_ov 06-08-2015 16:31 2537924

неужели никто не знает
Цитата:

Цитата us_ov
как реализовать на странице выбора папки - выбор дисков
имеется в виду чтобы выбор был ТОЛЬКО корень дисков доступных в системе »

скрипт для инсталлятора готов скомпилирован и работает, но на странице выбора места инсталляции есть возможность установить приложение в произвольные папки
а хотелось бы устанавливать приложение только в корень любого диска (включая съёмные носители)
на форуме и не только на этом нашёл много полезного, но не то что нужно,а вот квалификации написать скрипт самому не хватает
требуется квалифицированная помощь :help:

Nordek 06-08-2015 16:57 2537933

Цитата:

Цитата us_ov
пожалуйста подскажите как реализовать на странице выбора папки - выбор дисков »

#1311

vadjliss 07-08-2015 07:23 2538197

если такой

Код:

var
  DirTreeView: TFolderTreeView;

procedure DirFolderChange(Sender: TObject);
Begin
  WizardForm.DirEdit.Text:=AddBackslash(DirTreeView.Directory) + 'MyProg'
end;

Procedure InitializeWizard1;
begin
  DirTreeView:= TFolderTreeView.Create(WizardForm)
  DirTreeView.SetBounds(0,100,417,110)
  DirTreeView.OnChange:= @DirFolderChange
  DirTreeView.Parent:= WizardForm.SelectDirPage
//        DirTreeView.ChangeDirectory(ExpandConstant('{pf}'), True)
end;

procedure InitializeWizard();
begin
InitializeWizard1;
end;


us_ov 07-08-2015 07:53 2538212

Nordek, vadjliss, спасибо - буду пробовать

us_ov 07-08-2015 13:24 2538343

vadjliss, нет это не то, мне необходимо без возможности выбора папок

Nordek, в примерах по ссылкам ошибки компиляции, но зато я знаю чего искать в файлах примеров

vadjliss 07-08-2015 13:41 2538356

парни помогите с этим скриптом
мне нужно что бы было только портативная распаковка

[code]
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon; Check: not IsChecked
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon; Check: IsChecked

[Files]
//папка портабл
Source: "C:\Users\Desktop\Output\InstallFiles\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: "C:\Users\Desktop\Output\InstallFiles\*"; DestDir: "{app}"; Check: "IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!
;Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs


[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

Код:

const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
  Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
  case Sender of
    MyRadioBtn_1: begin
      WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
    MyRadioBtn_2: begin
      WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
  end;
end;

procedure GetInstTypePage();
begin
  MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

  try
    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
    // Можно использовать обычные .ico
    AIconFileName:= ExpandConstant('{sys}\shell32.dll');
    //

    Rect.Left:= 0;
    Rect.Top:= 0;
    Rect.Right:= 32;
    Rect.Bottom:= 32;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(68);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(138);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Width:= WizardForm.InnerNotebook.Width;
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:PageTextHeader}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do begin
    Top:= ScaleY(50);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(68);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_1}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do begin
    Top:= ScaleY(120);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
    Checked:= True;
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(138);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_2}');
    Parent:= MyNewPage.Surface;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
    Result:= True;
end;

procedure InitializeWizard();
begin
  GetInstTypePage();
  WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if not IsChecked then begin
    case CurPageID of
      wpSelectDir: begin
        WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
  if IsChecked then
    WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
    WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
      end;
      wpInstalling: begin
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
      wpFinished: begin
        WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
    end;
  end;
end;


us_ov 07-08-2015 15:44 2538408

знающие подскажите где правятся надписи в форме выбора папок
например: Если вы хотите выбрать другую папку, нажмите "Обзор"

vadjliss 07-08-2015 20:26 2538546

парни помогите с этим скриптом
мне нужно что бы было только портативная распаковка
Код:

const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
  Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
  case Sender of
    MyRadioBtn_1: begin
      WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
    MyRadioBtn_2: begin
      WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
  end;
end;

procedure GetInstTypePage();
begin
  MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

  try
    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
    // Можно использовать обычные .ico
    AIconFileName:= ExpandConstant('{sys}\shell32.dll');
    //

    Rect.Left:= 0;
    Rect.Top:= 0;
    Rect.Right:= 32;
    Rect.Bottom:= 32;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(68);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(138);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Width:= WizardForm.InnerNotebook.Width;
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:PageTextHeader}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do begin
    Top:= ScaleY(50);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(68);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_1}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do begin
    Top:= ScaleY(120);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
    Checked:= True;
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(138);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_2}');
    Parent:= MyNewPage.Surface;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
    Result:= True;
end;

procedure InitializeWizard();
begin
  GetInstTypePage();
  WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if not IsChecked then begin
    case CurPageID of
      wpSelectDir: begin
        WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
  if IsChecked then
    WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
    WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
      end;
      wpInstalling: begin
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
      wpFinished: begin
        WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
    end;
  end;
end;


ROMKA-1977 07-08-2015 21:42 2538593

Помогите пож. как исправить ошибку.
Код для добавления / удаления программ из правил брандмауэра Windows:
читать дальше »

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
OutputDir=.

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

[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}

[code]
// Вспомогательные функции для установки Inno
// Используется для добавления / удаления программ из правил брандмауэра Windows
// Код, родом из http://news.jrsoftware.org/news/innosetup/msg43799.html

const
NET_FW_SCOPE_ALL = 0;
NET_FW_IP_VERSION_ANY = 2;

procedure SetFirewallException(AppName,FileName:string);
var
FirewallObject: Variant;
FirewallManager: Variant;
FirewallProfile: Variant;
begin
try
FirewallObject := CreateOleObject('HNetCfg.FwAuthorizedApplication');
FirewallObject.ProcessImageFileName := FileName;
FirewallObject.Name := AppName;
FirewallObject.Scope := NET_FW_SCOPE_ALL;
FirewallObject.IpVersion := NET_FW_IP_VERSION_ANY;
FirewallObject.Enabled := True;
FirewallManager := CreateOleObject('HNetCfg.FwMgr');
FirewallProfile := FirewallManager.LocalPolicy.CurrentProfile;
FirewallProfile.AuthorizedApplications.Add(FirewallObject);
except
end;
end;

procedure RemoveFirewallException( FileName:string );
var
FirewallManager: Variant;
FirewallProfile: Variant;
begin
try
FirewallManager := CreateOleObject('HNetCfg.FwMgr');
FirewallProfile := FirewallManager.LocalPolicy.CurrentProfile;
FireWallProfile.AuthorizedApplications.Remove(FileName);
except
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then
SetFirewallException('My Server', ExpandConstant('{app}')+'\TCPServer.exe');
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usPostUninstall then
RemoveFirewallException(ExpandConstant('{app}')+'\TCPServer.exe');
end;

Компилируется норм но при установке вылетает ошибка:
http://rghost.ru/8sbhcHrMW/image.png

Компилирую стандартным Ansi

Nordek 07-08-2015 22:19 2538609

Цитата:

Цитата vadjliss
мне нужно что бы было только портативная распаковка »

Если вам нужно использовать инсталлятор только для распаковки, то зачем вам код?
В [Setup] добавьте
Код:

Uninstallable=false


Цитата:

Цитата us_ov
Если вы хотите выбрать другую папку, нажмите "Обзор" »

Вариант 1:
Код:

[Messages]
ButtonWizardBrowse=Кнопка &обзор...

Вариант 2:
Код:

[CustomMessages]
BrowseButton1=Обзор 1
BrowseButton2=Обзор 2

[Code]
procedure InitializeWizard();
begin
    WizardForm.DirBrowseButton.Caption := ExpandConstant('{cm:BrowseButton1}');
    WizardForm.GroupBrowseButton.Caption := ExpandConstant('{cm:BrowseButton2}');
end;


TryRooM 07-08-2015 23:20 2538624

ROMKA-1977, Пробуйте. Проверял на Ansi - Unicode, от Restools
Скрытый текст
Код:


const
  NET_FW_SCOPE_ALL = 0;
  NET_FW_IP_VERSION_ANY = 2;
  NET_FW_ACTION_ALLOW = 1;

procedure SetFirewallExceptionXP(AppName,FileName:string);
var
  FirewallObject: Variant;
  FirewallManager: Variant;
  FirewallProfile: Variant;
begin
  try
    FirewallObject := CreateOleObject('HNetCfg.FwAuthorizedApplication');
    FirewallObject.ProcessImageFileName := FileName;
    FirewallObject.Name := AppName;
    FirewallObject.Scope := NET_FW_SCOPE_ALL;
    FirewallObject.IpVersion := NET_FW_IP_VERSION_ANY;
    FirewallObject.Enabled := True;
    FirewallManager := CreateOleObject('HNetCfg.FwMgr');
    FirewallProfile := FirewallManager.LocalPolicy.CurrentProfile;
    FirewallProfile.AuthorizedApplications.Add(FirewallObject);
  except
  end;
end;

procedure SetFirewallExceptionVista(AppName,FileName:string);
var
  firewallRule: Variant;
  firewallPolicy: Variant;
begin
  try
    firewallRule := CreateOleObject('HNetCfg.FWRule');
    firewallRule.Action := NET_FW_ACTION_ALLOW;
    firewallRule.Description := AppName;
    firewallRule.ApplicationName := FileName;
    firewallRule.Enabled := True;
    firewallRule.InterfaceTypes := 'All';
    firewallRule.Name := AppName;

    firewallPolicy := CreateOleObject('HNetCfg.FwPolicy2');
    firewallPolicy.Rules.Add(firewallRule);
  except
  end;
end;

procedure SetFirewallException(AppName,FileName:string);
var
  WindVer: TWindowsVersion;
begin
  try
    GetWindowsVersionEx(WindVer);
    if WindVer.NTPlatform and (WindVer.Major >= 6) then
      SetFirewallExceptionVista(AppName,FileName)
    else
      SetFirewallExceptionXP(AppName,FileName);
  except
  end;
end;

procedure RemoveFirewallException( FileName:string );
var
  FirewallManager: Variant;
  FirewallProfile: Variant;
begin
  try
    FirewallManager := CreateOleObject('HNetCfg.FwMgr');
    FirewallProfile := FirewallManager.LocalPolicy.CurrentProfile;
    FireWallProfile.AuthorizedApplications.Remove(FileName);
  except
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssPostInstall then begin
    SetFirewallException('{#MyAppName}', ExpandConstant('{app}')+'\{#MyAppExeName}');
    end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usPostUninstall then begin
    RemoveFirewallException(ExpandConstant('{app}')+'\{#MyAppExeName}');
  end;
end;


AlexM22204 08-08-2015 08:44 2538687

Здравствуйте! Перепаковал для себя программу InnoExtractor , используя наработки с форума, но никак не пойму как добавить в скрипт ключи для тихой установки: стандартная и портативная. Например, ключ (/VERYSILENT /Standart) - обычная установка, а ключ (/VERYSILENT /Portable) - портативная установка.

Ещё чуть не забыл, как прописать чтобы при ручной установке при выборе портативной установки - путь распаковки был, например, (c:\Portable_Soft\InnoExtractor\).

скрипт
[Setup]
#define AppExe "{app}\InnoExtractor.exe"

#define AppVer GetFileVersion(AddBackslash(SourcePath) + AppExe)
#define AppName "InnoExtractor"
#define AppPub "(моя сборка)"
#define AppURL "http://www.havysoft.cl/"

AppName = {#AppName}
AppPublisher = {#AppPub}
AppPublisherURL = {#AppURL}
UninstallDisplayIcon = {#AppExe}

DefaultDirName = {pf}\{#AppName}
DefaultGroupName = {#AppName}

AppVersion = {#AppVer}
VersionInfoVersion = {#AppVer}

OutputBaseFilename = Setup_{#AppName}
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Check: IsChecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; Check: IsChecked

Name: context; Description: "Добавить {#AppName} в контекстное меню Проводника"; GroupDescription: {cm:AdditionalSetting}; Check: IsChecked

[Registry]
Root: HKCR; SubKey: exefile\shell\{#AppName}; ValueType: string; ValueData: "Открыть в {#AppName}"; Tasks: context; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCR; SubKey: exefile\shell\{#AppName}; ValueType: string; ValueName: Icon; ValueData: {#AppExe},0; Tasks: context; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCR; SubKey: exefile\shell\{#AppName}\command; ValueType: string; ValueData: """{#AppExe}"" ""%1"""; Tasks: context; Flags: uninsdeletevalue uninsdeletekeyifempty

[Icons]
Name: "{group}\{#AppName}"; Filename: "{#AppExe}"; Check: "IsChecked"; MinVersion: 0.0,5.0;
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"; Check: "IsChecked"; MinVersion: 0.0,5.0;
Name: "{commondesktop}\{#AppName}"; Filename: "{#AppExe}"; Check: "IsChecked"; MinVersion: 0.0,5.0;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#AppName}"; Filename: "{#AppExe}"; Check: "IsChecked"; MinVersion: 0.0,5.0; OnlyBelowVersion: 0.0,6.01;

[Files]
Source: "{app}\7z.dll"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\7z.e32"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\7zSD.e32"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Init.dat"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: restartreplace overwritereadonly ignoreversion uninsremovereadonly
Source: "{app}\InnoExtractor.exe"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Innounp.e32"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Rops.e32"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Idiomas\English.lng"; DestDir: "{app}\Idiomas"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Idiomas\Russian.lng"; DestDir: "{app}\Idiomas"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Idiomas\Spanish.lng"; DestDir: "{app}\Idiomas"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{userappdata}\InnoExtractor\Config.ini"; DestDir: "{userappdata}\InnoExtractor"; Check: "IsChecked"; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Config.ini"; DestDir: "{app}"; Check: "not IsChecked"; MinVersion: 0.0,5.0; Flags: ignoreversion

[CustomMessages]
AdditionalSetting=Дополнительные настройки:
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в папку, указанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
///
var
MyNewPage: TWizardPage;
BitmapImage1,BitmapImage2: TBitmapImage;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function IsChecked: Boolean;
begin
Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
case Sender of
MyRadioBtn_1: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
MyRadioBtn_2: begin
WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;

procedure GetInstTypePage();
begin
MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

with TNewStaticText.Create(WizardForm) do begin
Width:= WizardForm.InnerNotebook.Width;
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:PageTextHeader}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do begin
Top:= ScaleY(50);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Top:= ScaleY(68);
Width:= WizardForm.InnerNotebook;
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_1}');
Parent:= MyNewPage.Surface;
end;

MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do begin
Top:= ScaleY(100);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
Checked:= True;
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do begin
Top:= ScaleY(118);
Width:= WizardForm.InnerNotebook;
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_2}');
Parent:= MyNewPage.Surface;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
Result:= True;
end;

procedure InitializeWizard();
begin
GetInstTypePage();
WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if not IsChecked then begin
case CurPageID of
wpSelectDir: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
if IsChecked then
WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
WizardForm.DirEdit.Text := ExpandConstant( '{sd}\Portable_Soft\{#SetupSetting("AppName")}' );
end;
wpInstalling: begin
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
wpFinished: begin
WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
end;

habib2302 08-08-2015 09:12 2538693

AlexM22204, Вот изучайте мой скрипт
http://goo.gl/crKGe3

AlexM22204 08-08-2015 15:17 2538806

habib2302, спасибо за пример, кое-что подсмотрел :cool:
Цитата:

Цитата AlexM22204
Ещё чуть не забыл, как прописать чтобы при ручной установке при выборе портативной установки - путь распаковки был, например, (c:\Portable_Soft\InnoExtractor\). »

Но с выбором тихой установки: стандартная и портативная, у вас немного не так (у вас ключ выбирается через секцию [Components], а в моём варианте - через RadioButton) :sorry:

us_ov 08-08-2015 15:48 2538821

Вложений: 1
Файл 127825 в этой форме скрыта кнопка обзор
подскажите как удлинить поле ввода (по жирной стрелке)

[code]
Код:

var
cbDrive: TComboBox;
DrvLetters: array of string;
FreeSpaceLabel: TLabel;

function GetDriveType(lpDisk: string): integer;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetLogicalDriveStrings(nLenDrives: LongInt; lpDrives: string): integer;
external 'GetLogicalDriveStringsA@kernel32.dll stdcall';

const
DRIVE_UNKNOWN=0;
DRIVE_NO_ROOT_DIR=1;
DRIVE_REMOVABLE=2;
DRIVE_FIXED=3;
DRIVE_REMOTE=4;
DRIVE_CDROM=5;
DRIVE_RAMDISK=6;

function DriveTypeString(dtype: integer): string;
    begin
      case dtype of
      DRIVE_NO_ROOT_DIR: Result:='Неверный путь';
      DRIVE_REMOVABLE: Result:='Съемный';
      DRIVE_FIXED: Result:='Фиксированный';
      DRIVE_REMOTE: Result:='Сетевой';
      DRIVE_CDROM: Result:='CD-ROM';
      DRIVE_RAMDISK: Result:='Ram диск';
      else
      Result:='Неизвестный';
    end;
end;

procedure cbDriveOnClick(Sender: TObject);
  begin
    WizardForm.DirEdit.Text:=DrvLetters[cbDrive.ItemIndex]+'My Prog';
  end;

procedure FillCombo();
var
  n: integer;
  drivesletters: string; lenletters: integer;
  drive: string;
  disktype, posnull: integer;
  sd: string;
begin
  sd:=UpperCase(ExpandConstant('{sd}'));
  drivesletters:=StringOfChar(' ', 64);
  lenletters:=GetLogicalDriveStrings(63, drivesletters);
  SetLength(drivesletters, lenletters);
  drive:='';
  n:=0;
  while ((Length(drivesletters) > 0)) do
    begin
      posnull:=Pos(#0, drivesletters);
      if posnull > 0 then
        begin
          drive:=UpperCase(Copy(drivesletters, 1, posnull-1));
          disktype:=GetDriveType(drive);
          if ( not ( disktype = DRIVE_CDROM ) ) then
            begin
              cbDrive.Items.Add(drive+DriveTypeString(disktype))
              SetArrayLength(DrvLetters, N+1);
              DrvLetters[n]:=drive;
              if (Copy(drive, 1, 2)=sd) then cbDrive.ItemIndex:=n;
              n:=n+1;
            end
          drivesletters:=Copy(drivesletters, posnull+1, Length(drivesletters));
        end
    end;
  cbDriveOnClick(cbDrive);
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: string;
  FreeMB, TotalMB: cardinal;
    begin
      Path:=ExtractFileDrive(WizardForm.DirEdit.Text);
      GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
      if FreeMB > 1024 then
      FreeSpaceLabel.Caption:='Свободно на диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
      else
      FreeSpaceLabel.Caption:='Свободно на диске: ' + IntToStr(FreeMB) + ' MB'
    end;

procedure InitializeWizard();

begin
      cbDrive:=TComboBox.Create(WizardForm.SelectDirPage);
      FreeSpaceLabel:=TLabel.Create(WizardForm);
      with cbDrive do
        begin
          Parent:=WizardForm.DirEdit.Parent;
          Left:=WizardForm.DirEdit.Left;
          Top:=WizardForm.DirEdit.Top+WizardForm.DirEdit.Height*2-15;
          Width:=WizardForm.DirEdit.Width+82;
          Style:=csDropDownList;
        end
      with FreeSpaceLabel do
        begin
          Parent:=WizardForm.SelectDirPage;
          Left:=ScaleX(0);
          Top:=Scaley(195);
          Width:=ScaleX(209);
          Height:=ScaleY(13);
        end;
    WizardForm.DirBrowseButton.Visible:=False;
    WizardForm.DirEdit.Enabled:=true;
    WizardForm.DirEdit.OnChange:=@GetFreeSpaceCaption;
    WizardForm.DirEdit.Text:=WizardForm.DirEdit.Text+#0;
    FillCombo;
    cbDrive.OnClick:=@cbDriveOnClick;
end;


TryRooM 08-08-2015 16:40 2538848

us_ov, Примерно так
Скрытый текст
Код:

var
cbDrive: TComboBox;
DrvLetters: array of string;
FreeSpaceLabel: TLabel;

function GetDriveType(lpDisk: string): integer;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetLogicalDriveStrings(nLenDrives: LongInt; lpDrives: string): integer;
external 'GetLogicalDriveStringsA@kernel32.dll stdcall';

const
DRIVE_UNKNOWN=0;
DRIVE_NO_ROOT_DIR=1;
DRIVE_REMOVABLE=2;
DRIVE_FIXED=3;
DRIVE_REMOTE=4;
DRIVE_CDROM=5;
DRIVE_RAMDISK=6;

function DriveTypeString(dtype: integer): string;
    begin
      case dtype of
      DRIVE_NO_ROOT_DIR: Result:='Неверный путь';
      DRIVE_REMOVABLE: Result:='Съемный';
      DRIVE_FIXED: Result:='Фиксированный';
      DRIVE_REMOTE: Result:='Сетевой';
      DRIVE_CDROM: Result:='CD-ROM';
      DRIVE_RAMDISK: Result:='Ram диск';
      else
      Result:='Неизвестный';
    end;
end;

procedure cbDriveOnClick(Sender: TObject);
  begin
    WizardForm.DirEdit.Text:=DrvLetters[cbDrive.ItemIndex]+'!Po';
  end;

procedure FillCombo();
var
  n: integer;
  drivesletters: string; lenletters: integer;
  drive: string;
  disktype, posnull: integer;
  sd: string;
begin
  sd:=UpperCase(ExpandConstant('{sd}'));
  drivesletters:=StringOfChar(' ', 64);
  lenletters:=GetLogicalDriveStrings(63, drivesletters);
  SetLength(drivesletters, lenletters);
  drive:='';
  n:=0;
  while ((Length(drivesletters) > 0)) do
    begin
      posnull:=Pos(#0, drivesletters);
      if posnull > 0 then
        begin
          drive:=UpperCase(Copy(drivesletters, 1, posnull-1));
          disktype:=GetDriveType(drive);
          if ( not ( disktype = DRIVE_CDROM ) ) then
            begin
              cbDrive.Items.Add(drive+DriveTypeString(disktype))
              SetArrayLength(DrvLetters, N+1);
              DrvLetters[n]:=drive;
              if (Copy(drive, 1, 2)=sd) then cbDrive.ItemIndex:=n;
              n:=n+1;
            end
          drivesletters:=Copy(drivesletters, posnull+1, Length(drivesletters));
        end
    end;
  cbDriveOnClick(cbDrive);
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: string;
  FreeMB, TotalMB: cardinal;
    begin
      Path:=ExtractFileDrive(WizardForm.DirEdit.Text);
      GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
      if FreeMB > 1024 then
      FreeSpaceLabel.Caption:='Свободно на диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
      else
      FreeSpaceLabel.Caption:='Свободно на диске: ' + IntToStr(FreeMB) + ' MB'
    end;

procedure InitializeWizard();

begin
      cbDrive:=TComboBox.Create(WizardForm.SelectDirPage);
      FreeSpaceLabel:=TLabel.Create(WizardForm);
      with cbDrive do
        begin
          Parent:=WizardForm.DirEdit.Parent;
          Left := ScaleX(0);
        //  Left:=WizardForm.DirEdit.Left+41; //  41
          Top:=WizardForm.DirEdit.Top+WizardForm.DirEdit.Height*2-15; //2-15
        //  Width:=WizardForm.DirEdit.Width;
          Width := ScaleX(400); //размер
          Style:=csDropDownList;
        end
      with FreeSpaceLabel do
        begin
          Parent:=WizardForm.SelectDirPage;
          Left:=ScaleX(0);
          Top:=Scaley(195);
          Width:=ScaleX(209); //209
          Height:=ScaleY(13);
        end;
    WizardForm.DirBrowseButton.Visible:=false; // False
    WizardForm.DirEdit.Enabled:=true;
    WizardForm.DirEdit.OnChange:=@GetFreeSpaceCaption;
    WizardForm.DirEdit.Text:=WizardForm.DirEdit.Text+#0;
    FillCombo;
    cbDrive.OnClick:=@cbDriveOnClick;

  with WizardForm.DirEdit do
  begin
    Left := ScaleX(0);
    Top := ScaleY(80); //выше ниже
    Height := ScaleY(23);
    Width:=ScaleX(400); //209 размер
  end;
   
  with WizardForm.DirBrowseButton do// пришлось сдвинуть  обзор
  begin
    Left := ScaleX(0);
    Top := ScaleY(150);
    Height := ScaleY(30);
  end;
  end;


us_ov 08-08-2015 17:11 2538855

TryRooM, СПАСИБО!

vadjliss 08-08-2015 19:12 2538900

парни нужна помощь срочно на скрине думаю всё понятно

TryRooM 08-08-2015 20:58 2538969

vadjliss,
[Setup]
;AllowNoIcons=yes не создавать папку в меню пуск

Вы закомментировали?

Посмотрите, у вас в коде нет этого.
var
No_Icons_CheckBox: TNewCheckBox;

vadjliss 08-08-2015 21:32 2538980

TryRooM
[Setup]
;AllowNoIcons=yes не создавать папку в меню пуск
не отключает

Nordek 08-08-2015 21:52 2538984

vadjliss, Удалите:
Код:

AllowNoIcons=yes
или замените yes на no:
Код:

AllowNoIcons=no

palsn2000 09-08-2015 07:29 2539057

Здравствуйте.
Решил сделать слайдшоу, нашел пример с использованием isgsg.dll:
Фрагмент кода
Код:

[_Code]
.......
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssInstall then begin
    ExtractTemporaryFile('Screen (1).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (1).jpg');
    ExtractTemporaryFile('Screen (2).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (2).jpg');
    ExtractTemporaryFile('Screen (3).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (3).jpg');
    ExtractTemporaryFile('Screen (4).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (4).jpg');
    ExtractTemporaryFile('Screen (5).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (5).jpg');
    ExtractTemporaryFile('Screen (6).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (6).jpg');
    ExtractTemporaryFile('Screen (7).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (7).jpg');
    ExtractTemporaryFile('Screen (8).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (8).jpg');
    ExtractTemporaryFile('Screen (9).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (9).jpg');
    ExtractTemporaryFile('Screen (10).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (10).jpg');
    ExtractTemporaryFile('Screen (11).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (11).jpg');
    ExtractTemporaryFile('Screen (12).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (12).jpg');
    ExtractTemporaryFile('Screen (13).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (13).jpg');
    ExtractTemporaryFile('Screen (14).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (14).jpg');
    ExtractTemporaryFile('Screen (15).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (15).jpg');
    ExtractTemporaryFile('Screen (16).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (16).jpg');
    ssStartShow;
  end;
  if CurStep=ssPostInstall then ssStopShow;
end;
..........


А можно ли как нибудь прописать показ изображений с помощью цикла - чтобы Inno сам формировал себе список для слайдшоу из изображений, которые найдёт в папке {tmp} ?

vadjliss 11-08-2015 14:57 2540029

нужна помощь
как сделать
чтобы перед установкой удалило старую версию программы
потом установила новую версию

с меня плюсик

Sotonisto 12-08-2015 16:54 2540753

Цитата:

Цитата vadjliss
перед установкой удалило старую версию программы»

Как-то так:
Скрипт
Код:

#define gameid "{11110000-2222-3333-4444-555500000000}"
#define appname "My Program"
#define appversion "1.0"

[Setup]
AppId={{#gameid}
AppName={#appname}
AppVerName={#appname}
AppVersion={#appversion}
DefaultDirName={pf}\{#appname}
OutputDir=.
OutputBaseFilename=setup
Compression=lzma2/ultra64
SolidCompression=true
PrivilegesRequired=poweruser

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

[CustomMessages]
rus.DeleteInfo1=Перед установкой необходимо удалить предыдущую версию приложения. Удалить?
rus.DeleteInfo2=Удаление предыдущей версии  приложения завершилось неудачей.

[Code_]
function UninstallMyApp(): Boolean;
var
  Buff: String;
  i: Integer;
begin
  Result:= not RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#gameid}_is1', 'UninstallString', Buff);
  if not Result then Result:= not FileExists(RemoveQuotes(Buff));
  if not Result then
  if MsgBox(ExpandConstant('{cm:DeleteInfo1}'), mbError, MB_YESNO) = IDYES then
  try
  Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
  finally Result:= not RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#gameid}_is1', 'UninstallString', Buff );
  if not Result then MsgBox(ExpandConstant('{cm:DeleteInfo2}'), mbError, MB_OK);
  end;
end;

function InitializeSetup(): Boolean;
begin
  Result:= UninstallMyApp();
end;


vadjliss 12-08-2015 19:58 2540853

Цитата:

Цитата Sotonisto
#define gameid "{11110000-2222-3333-4444-555500000000}"
#define appname "My Program"
#define appversion "1.0"
[Setup]
AppId={{#gameid}
AppName={#appname}
AppVerName={#appname}
AppVersion={#appversion}
DefaultDirName={pf}\{#appname}
OutputDir=.
OutputBaseFilename=setup
Compression=lzma2/ultra64
SolidCompression=true
PrivilegesRequired=poweruser
[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl";
[CustomMessages]
rus.DeleteInfo1=Перед установкой необходимо удалить предыдущую версию приложения. Удалить?
rus.DeleteInfo2=Удаление предыдущей версии приложения завершилось неудачей.
[Code_]
function UninstallMyApp(): Boolean;
var
Buff: String;
i: Integer;
begin
Result:= not RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#gameid}_is1', 'UninstallString', Buff);
if not Result then Result:= not FileExists(RemoveQuotes(Buff));
if not Result then
if MsgBox(ExpandConstant('{cm:DeleteInfo1}'), mbError, MB_YESNO) = IDYES then
try
Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
finally Result:= not RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#gameid}_is1', 'UninstallString', Buff );
if not Result then MsgBox(ExpandConstant('{cm:DeleteInfo2}'), mbError, MB_OK);
end;
end;
function InitializeSetup(): Boolean;
begin
Result:= UninstallMyApp();
end; »

что то не выходит
не отображаются надписи
ред установкой необходимо удалить предыдущую версию приложения. Удалить?
Удаление предыдущей версии приложения завершилось неудачей.

Sotonisto 14-08-2015 12:24 2541529

Цитата:

Цитата vadjliss
не отображаются надписи»

В каком смысле? Я буквально только что проверил скрипт - всё работает. Возможно, вы забыли удалили нижнее подчеркивание в [Code_]?

Dodakaedr 16-08-2015 14:42 2542284

Цитата:

Цитата vadjliss
как сделать
чтобы перед установкой удалило старую версию программы
потом установила новую версию »

Пример почти как на скрине. Зачем вам такой велосипед?
Код:

#define MyAppName "Test"
#define MyAppVersion "1.0"

[setup]
appid=test1
appname={#MyAppName}
appvername={#MyAppVersion}
DefaultDirName={sd}\{#MyAppName}

[code]
var
  BtnDel, BtnNDel: TNewRadioButton;
 
function CheckChoose(): Boolean;
var
  ShowForm: TSetupForm;
begin
  ShowForm := CreateCustomForm;
  ShowForm.Position:=poScreenCenter;
  try
    ShowForm.ClientWidth := ScaleX(410);
    ShowForm.ClientHeight := ScaleY(170);
    ShowForm.BorderStyle := bsSingle;
    ShowForm.BorderIcons := [biSystemMenu];
    ShowForm.Caption := '{#MyAppName} {#MyAppVersion}';
   
    with TNewButton.Create(ShowForm) do
    begin
      Parent := ShowForm;
      SetBounds(ScaleX(110), ScaleY(120), ScaleX(90), ScaleY(25));
      ModalResult := mrYes;
      Caption := 'OK';
    end;
   
    with TNewStaticText.Create(ShowForm) do
    begin
      Parent:= ShowForm;
      Caption:='Мастер может выполнить поиск предыдущей версии {#MyAppName} {#MyAppVersion} и'+ #13#10 +
              'удалить её. Вы хотите удалить предыдущую версию?';
      Left:=ScaleX(20);
      Top:=ScaleY(20);
      Font.Name:= 'Tahoma';
      Font.Size:= 9;
      Font.Color:=clBlack;;
      end;
     
    BtnDel := TNewRadioButton.Create(ShowForm);
    with BtnDel do
    begin
    Parent := ShowForm;
    Left := ScaleX(20);
    Top := ScaleY(60);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Да, удалить предыдущую версию';
    Checked := True;
    end;
     
    BtnNDel := TNewRadioButton.Create(ShowForm);
    with BtnNDel do
    begin
    Parent := ShowForm;
    Left := ScaleX(20);
    Top := ScaleY(80);
    Width := ScaleX(272);
    Height := ScaleY(17);
    Caption := 'Нет, установить с заменой';
    end;
   
    with TNewButton.Create(ShowForm) do
    begin
      Parent := ShowForm;
      SetBounds(ScaleX(210), ScaleY(120), ScaleX(90), ScaleY(25));
      ModalResult := mrcancel;
      Caption := SetupMessage(msgButtonCancel);
    end;

  Result := (ShowForm.ShowModal = mrYes);
  finally
    ShowForm.Free;
  end;
end;

function TrueDel: boolean;
begin
    result := BtnDel.Checked;
end;
function FalseDel: boolean;
begin
    result := BtnNDel.Checked;
end;

function UninstallApp(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + ExpandConstant( '{#SetupSetting( "AppId" )}_is1' ), 'UninstallString', Buff );
    if not Result then
    begin
    Result := not FileExists(RemoveQuotes(Buff));
    if not Result then
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
        Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + ExpandConstant( '{#SetupSetting( "AppId" )}_is1' ), 'UninstallString', Buff );
        if not Result then result := false; end;
  end else MsgBox('Программа не найдена!', mbError, MB_OK);
end;

function InitializeSetup(): Boolean;
begin
if CheckChoose then
if TrueDel then result := UninstallApp else result := false;
if FalseDel then result := true;
end;


Так как на скрине не получится, потому что надо генерировать новый идентификатор программы(AppID).

habib2302 16-08-2015 15:01 2542288

vadjliss,
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
AppId=wwwwwwwwwwwwww

[code]

function UninstallMyApp(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
        Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
        if not Result then MsgBox('Удаление завершилось неудачей, бывай!', mbError, MB_OK);
    end;
end;

function InitializeSetup(): Boolean;
begin
    Result := UninstallMyApp();
end;


Sotonisto 16-08-2015 17:35 2542323

habib2302, я уже предлагал vadjliss использовать этот пример (на предыдущей странице), но он ответил, что скрипт у него не работает.
Надеюсь, что Dodakaedr ему поможет.

Nordek 16-08-2015 18:16 2542333

Цитата:

Цитата Sotonisto
я уже предлагал vadjliss использовать этот пример (на предыдущей странице), но он ответил, что скрипт у него не работает. »

Почему не работает?
У меня работает, у vadjliss не работает - Вопрос: Почему?
Может всё-таки проблема в этом [Code_] (Отметил красным), которое vadjliss не удалил?

Читайте.

habib2302 16-08-2015 18:18 2542336

Sotonisto, ну вы сами видите, что постоянно вопросы задает те, которые легко решаются поиском по темам в печатной версии особенно про портативну. я ему дал легки код и спасибо не сказал. может он appid не сменил или код не правильно вставил. хотя смотрю он пишет, что не отображается текст в msgbox. значит забыл сменить название языка в разделе [CustomMessages] и в [Languages] с rus на свой

boss911 21-08-2015 16:19 2544409

Цитата:

Цитата Lanirius
что-бы после установки программы запустился ещё 1 файл по запросу пользователя(есть галочка или нет) в зависимости от разрядности системы должен запускаться тот или другой файл »

Код:

[Run]
Filename: {app}\MyProg32.exe; WorkingDir: {app}; Description: {cm:LaunchProgram,MyProg}; Flags: nowait postinstall skipifsilent; Check: NOT IsWin64
Filename: {app}\MyProg64.exe; WorkingDir: {app}; Description: {cm:LaunchProgram,MyProg}; Flags: nowait postinstall skipifsilent; Check: IsWin64


Dodakaedr 21-08-2015 16:24 2544411

Lanirius, используйте IsWin64
Через секцию Code

Код:

if IsWin64 then
запуск x64 файла else
запуск x32 файла


Через секцию Run

Код:

[Run]
Filename: "{app}\x32.exe"; Description: "Запустить {#MyAppName}"; Check: "not IsWIn64"; Flags: postinstall nowait skipifsilent
Filename: "{app}\x64.exe"; Description: "Запустить {#MyAppName}"; Check: "IsWIn64"; Flags: postinstall nowait skipifsilent


Lanirius 21-08-2015 16:49 2544422

boss911, Спасибо, работает, однако мне надо что-бы тот файл запускался от администратора (иначе не запускает его). Ну или сам сетапник надо запускать от админа... не подскажите где это надо прописать?

Dodakaedr 21-08-2015 16:52 2544424

Цитата:

Цитата Lanirius
Ну или сам сетапник надо запускать от админа... не подскажите где это надо прописать? »

Код:

[Setup]
PrivilegesRequired=admin


Lanirius 21-08-2015 17:03 2544429

Dodakaedr, Спасибо

audiofeel 21-08-2015 20:13 2544515

поменял координаты почти всего в procedure InitializeWizard
добавил стекло ISWIN7, окно черное, только кнопки на стекле, подскажите что добавить или указать правильно
вот пример мой небольшой
Скрытый текст
Код:

procedure InitializeWizard;
begin
  with WizardForm do begin
  ClientWidth := ScaleX(529);
  ClientHeight := ScaleY(350);
  InnerNotebook.Hide;
  OuterNotebook.Hide;
  Bevel.Hide;
  Position := poDesktopCenter;
  WizardBitMapImage.Parent := WizardForm;
  WizardBitMapImage.SetBounds(ScaleX(6), ScaleY(6), ScaleX(518), ScaleY(191));
  NextButton.SetBounds(ScaleX(349), ScaleY(316), ScaleX(80), ScaleY(23));
  BackButton.SetBounds(ScaleX(269), ScaleY(316), ScaleX(80), ScaleY(23));
  CancelButton.SetBounds(ScaleX(438), ScaleY(316), ScaleX(80), ScaleY(23));
  DirBrowseButton.Parent := WizardForm;
  DirBrowseButton.SetBounds(ScaleX(428), ScaleY(244), ScaleX(80), ScaleY(23));
  DirEdit.Parent := WizardForm;
  DirEdit.SetBounds(ScaleX(22), ScaleY(245), ScaleX(390), ScaleY(21));
  DiskSpaceLabel.Parent := WizardForm;
  DiskSpaceLabel.SetBounds(ScaleX(20), ScaleY(279), ScaleX(450), ScaleY(16));
  GroupBrowseButton.Parent := WizardForm;
  GroupBrowseButton.SetBounds(ScaleX(428), ScaleY(244), ScaleX(80), ScaleY(23));
  GroupEdit.Parent := WizardForm;
  GroupEdit.SetBounds(ScaleX(22), ScaleY(245), ScaleX(390), ScaleY(21));
  NoIconsCheck.Parent := WizardForm
  NoIconsCheck.SetBounds(ScaleX(23), ScaleY(276), ScaleX(417), ScaleY(17));
  TasksList.Parent := WizardForm;
  TasksList.SetBounds(ScaleX(19), ScaleY(207), ScaleX(504), ScaleY(90));
  ReadyMemo.Parent := WizardForm;
  ReadyMemo.SetBounds(ScaleX(23), ScaleY(220), ScaleX(484), ScaleY(82));
  FilenameLabel.Parent := WizardForm;
  FilenameLabel.SetBounds(ScaleX(20), ScaleY(225), ScaleX(485), ScaleY(17));
  StatusLabel.Parent := WizardForm;
  StatusLabel.SetBounds(ScaleX(20), ScaleY(211), ScaleX(485), ScaleY(17));
  end;
  CreateControls;
end;


audiofeel 23-08-2015 14:57 2544985

кто сможет вот это выложить http://forum.oszone.net/post-2137995-275.html
решил опять заняться. все растерял
без всяких выкрутасов, все по дефолту

vadjliss 23-08-2015 20:02 2545088

парни что за папка APPDIR
и как её прописать
подскажите и покажите пожалуйста

TryRooM 23-08-2015 22:40 2545140

audiofeel, Комплект, упаковщики - распаковщики.
http://rghost.ru/85k69DsmC

vadjliss 24-08-2015 20:12 2545519

подскажите скрипт
что бы пользователь мог сам выбрать какую программу установить если в одном инстоляторе лежит скажем 3 и более программ
всё облазил что то не нашёл
ПОМОГИТЕ
примерно вот так

Sobol37 28-08-2015 12:30 2546873

Чем правильно заменить выделенную область что бы вносились данные в реестр под любым SID и на любом компьютере:

Root: HKU; SubKey: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXX\Software

habib2302 28-08-2015 12:49 2546887

Sobol37,
HKU и HKCU это одно и тоже

Sobol37 28-08-2015 13:07 2546893

Ага. Теперь я понял. Если его прописать в HKCU то те же данные появляются и в HKU. Мне просто нужно было что бы при удалении программы удалялись и данные с HKU. Причём эти данные появляются не при инсталляции самой программы, а при первом её запуске и появляются они только в HKU. В HKCU их нет. При деинсталляции программы данные в HKU просто оставались в реестре и мусорили его. Вот я решил их заблаговременно прописать дабы не мусорить лишний раз.

habib2302 28-08-2015 13:20 2546903

Sobol37, вот возьмите и сравните один раздел. допустим run



http://forum.oszone.net/post-2104385-1795.html

Sobol37 28-08-2015 13:47 2546913

Мне вот интересно каким образом программа вносит при первом запуске данные в раздел HKU минуя раздел HKCU.

habib2302 28-08-2015 14:01 2546922

Sobol37, Если для удаления мусора попробуйте этот код
http://forum.oszone.net/post-2519766-719.html

Sobol37 28-08-2015 14:15 2546929

Сделал проще. Просто внёс все те данные что программа создаёт при первом запуске в скрипт. Теперь при деинсталляции эти данные будут автоматически удалены из реестра. Там всё равно прописываются
стандартные режимы работы (разрешение экрана и т.п.), поэтому вряд ли будут конфликты если на другой машине её инсталлировать.

Большое спасибо за наводку, а то со вчерашнего дня мучался с кодом.

habib2302 28-08-2015 15:07 2546958

Sobol37, пож

vadjliss 28-08-2015 20:50 2547070

подскажите почему у меня не включаются программы в основной пакет
если кто знает исправьте

скрипт
Код:

[Setup]
AppName=KMSAuto Net 2015 1.3.8
AppVerName=KMSAuto
DefaultDirName={pf}\KMSAuto Net 2015 1.3.8
SetupIconFile=C:\Users\WWW\Desktop\скрипт\image\1.ico
VersionInfoDescription=KMSAuto Net 2015 1.3.8
OutputDir=C:\Users\WWW\Desktop\скрипт
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=image\portable.bmp
WizardSmallImageFile=image\portable2.bmp
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked



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

[Files]
;Source: "C:\Users\WWW\Desktop\скрипт\soft\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: dll\BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: Sound\sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: image\Splash.png; Flags: dontcopy
Source: dll\isgsg.dll; Flags: dontcopy
Source: dll\VclStylesinno.dll; DestDir: {app}; Flags: dontcopy
Source: CobaltXEMedia.vsf; DestDir: {app}; Flags: dontcopy
Source: image\portable.bmp; DestDir: {tmp}; Flags: dontcopy


[CustomMessages]
MyRadioCaption_1=Распаковка
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Tasks]
Name: soft; Description: Браузеры:
Name: soft\Opera; Description: Установить Opera 31.0.1889.174 Stable; Flags: unchecked
Name: soft\Chromodo; Description: Установить Chromodo Browser 44.5.7.268; Flags: unchecked
Name: soft\Chrome; Description: Установить Google Chrome 44.0.2403.157 Stable 64; Flags: unchecked
Name: soft\Chrome; Description: Установить Google Chrome 44.0.2403.157 Stable; Flags: unchecked
Name: soft\UCBrowser; Description: Установить UCBrowser 5.4.4237.1032; Flags: unchecked


[Run]
Filename: {src}\soft\Opera 31.0.1889.174 Stable.exe; Parameters: /q; StatusMsg: Установка Opera 31.0.1889.174 Stable;
Filename: {src}\soft\Chromodo Browser 44.5.7.268.exe; Parameters: /Q; Tasks: soft\Chromodo; Flags: waituntilterminated
Filename: {src}\soft\Google Chrome 44.0.2403.157 Stable 64.exe; Parameters: /Q; Tasks: soft\Chrome; Flags: waituntilterminated
Filename: {src}\soft\Google Chrome 44.0.2403.157 Stable.exe; Parameters: /Q; Tasks: soft\Chrome; Flags: waituntilterminated
Filename: {src}\soft\UCBrowser 5.4.4237.1032.exe; Parameters: /Q; Tasks: soft\UCBrowser; Flags: waituntilterminated


qwea234 29-08-2015 11:38 2547243

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

Вот пример моего кода:

Код:

[Languages]
Name: english; MessagesFile: compiler:Default.isl; LicenseFile: "F:\License\License_eng.txt"
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Types]
Name: custom; Description: {cm:CompProgram00}; Flags: iscustom

[Components]
; Select Languages Patch
Name: ALL01; Description: {cm:CompProgram01}; Types: custom; Flags: fixed
Name: RUS; Description: {cm:CompProgram02}; Flags: exclusive checkablealone
Name: ENG; Description: {cm:CompProgram03}; Flags: exclusive

Если выбираю английский, то компонент выбирается первый "RUS", если выбираю язык русский - то компонент тоже всегда "RUS".
а надо чтобы при выборе английского языка, компонент выбирался: "Name: ENG"

vadjliss 29-08-2015 12:04 2547247

нужен скрипт вот такой
может кто знает как его сделать
что бы пользователь мог сам выбирать какое приложение ему установить или все сразу

TryRooM 29-08-2015 13:05 2547266

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

[Components]
; Select Languages Patch
Name: ALL01; Description: {cm:CompProgram01}; Types: custom;  Flags: fixed
Name: RUS; Description: {cm:CompProgram02}; Languages: russian;  Flags: exclusive checkablealone
Name: ENG; Description: {cm:CompProgram03}; Languages: english;  Flags: exclusive


qwea234 29-08-2015 13:12 2547268

TryRooM, Хорошая идея и возьму на заметку, но немного другая задача была, видать не полностью расписал.

Смотрите нужно чтобы отображалось два пункта RUS, ENG в установке компонента, но если выбран русский, то активный компонент был RUS, а если выбран интерфейс инсталлятора английский то на странице компоненты было два выбора языка но активный был ENG.

Dodakaedr 29-08-2015 14:47 2547296

Цитата:

Цитата qwea234
Если выбираю английский, то компонент выбирается первый "RUS", если выбираю язык русский - то компонент тоже всегда "RUS".
а надо чтобы при выборе английского языка, компонент выбирался: "Name: ENG" »

Код:

[setup]
appname=app
appvername=app 1.0
DefaultDirName={sd}\app

[Languages]
Name: english; MessagesFile: compiler:Languages\English.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Types]
Name: custom; Description: cm:CompProgram00; Flags: iscustom

[Components]
Name: ALL01; Description: язык; Types: custom; Flags: fixed
Name: RUS; Description: рус; Flags: exclusive
Name: ENG; Description: анг; Flags: exclusive

[Code]
procedure InitializeWizard();
begin
 if ActiveLanguage = 'russian' then
WizardForm.ComponentsList.Checked[1] := true else
WizardForm.ComponentsList.Checked[2] := true;
end;


qwea234 29-08-2015 15:11 2547309

Dodakaedr, Благодарю - работает.

vadjliss 29-08-2015 21:06 2547387

ребята помогите кто может исправте скрипт
когда устанавливаю все 3 программы всё нормально
но когда снимаю галочки с 2 или 1 программ выдаёт ошибку (типо не найдена программа с которых снял галочки)
всё перепробЫвал ну ни как

скрипт

[Setup]
AppName=Браузеры
AppVersion=2.0
AppVerName=2.0
SetupIconFile=C:\Users\WWW\Desktop\скрипт\image\1.ico
VersionInfoDescription=Браузеры 2.0
OutputDir=C:\Users\WWW\Desktop\скрипт
Compression=lzma2/ultra64
SolidCompression=true
InternalCompressLevel=ultra
WizardImageFile=image\portable.bmp
WizardSmallImageFile=image\portable2.bmp
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked
DisableReadyPage=True
DisableReadyMemo=True
CreateAppDir=False
UsePreviousGroup=False
DisableProgramGroupPage=yes
CompressionThreads=2


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

[Files]
;Source: "C:\Users\WWW\Desktop\скрипт\soft\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: dll\BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: Sound\sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: image\Splash.png; Flags: dontcopy
Source: dll\isgsg.dll; Flags: dontcopy
Source: dll\VclStylesinno.dll; DestDir: {app}; Flags: dontcopy
Source: CobaltXEMedia.vsf; DestDir: {app}; Flags: dontcopy
Source: image\portable.bmp; DestDir: {tmp}; Flags: dontcopy
Source: soft\Chromodo Browser 44.5.7.268.exe; Components: ChromodoBrowser; DestDir: "{tmp}"
Source: soft\Google Chrome 44.0.2403.157 Stable 64.exe; Components: GoogleChrome; DestDir: "{tmp}"
Source: soft\Google Chrome 44.0.2403.157 Stable.exe; Components: GoogleChrome; DestDir: "{tmp}"


[CustomMessages]
MyRadioCaption_1=Распаковка
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 установится на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Types]
Name: "polnaya"; Description: "Полная установка"
Name: "viborochnaya"; Description: "Выборочная установка"; Flags: iscustom

[Components]
Name: "ChromodoBrowser"; Description: "Chromodo Browser 44.5.7.268"; Types: polnaya viborochnaya
Name: "GoogleChrome"; Description: "Google Chrome 44.0.2403.157 Stable 64"; Types: polnaya viborochnaya
Name: "GoogleChrome"; Description: "Google Chrome 44.0.2403.157 Stable"; Types: polnaya viborochnaya

[Run]
FileName: "{tmp}\Chromodo Browser 44.5.7.268.exe"; StatusMsg: "Выполнение программы Chromodo Browser 44.5.7.268"; Flags: skipifsilent hidewizard
FileName: "{tmp}\Google Chrome 44.0.2403.157 Stable 64.exe"; StatusMsg: "Выполнение программы Google Chrome 44.0.2403.157 Stable 64"; Flags: skipifsilent hidewizard
FileName: "{tmp}\Google Chrome 44.0.2403.157 Stable.exe"; StatusMsg: "Выполнение программы Google Chrome 44.0.2403.157 Stable"; Flags: skipifsilent hidewizard


[code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
procedure RedesignWizardForm;
begin
with WizardForm.WelcomeLabel2 do
begin
Caption := '';
end;

with WizardForm.WelcomeLabel1 do
begin
Caption := '';
end;

with WizardForm.WizardBitmapImage2 do
begin
Width := ScaleX(500);
end;

with WizardForm.RunList do
begin
Left := ScaleX(477);
Top := ScaleY(299);
Width := ScaleX(0);
Height := ScaleY(6);
end;

with WizardForm.NoRadio do
begin
Left := ScaleX(16);
Top := ScaleY(313);
Width := ScaleX(13);
Height := ScaleY(9);
Caption := '';
end;

with WizardForm.YesRadio do
begin
Left := ScaleX(477);
Width := ScaleX(3);
Caption := '';
end;

with WizardForm.FinishedLabel do
begin
Caption := '';
Left := ScaleX(477);
Top := ScaleY(151);
Width := ScaleX(0);
Height := ScaleY(12);
end;

with WizardForm.FinishedHeadingLabel do
begin
Caption := '';
Left := ScaleX(477);
Top := ScaleY(312);
Width := ScaleX(12);
Height := ScaleY(2);
end;

{ ReservationBegin }
// Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

//картинка
var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;

procedure InitializeWizard3();
begin
ExtractTemporaryFile('portable.bmp');

WizardForm.WizardBitmapImage.Width:= ScaleX(500);
WizardForm.WizardBitmapImage2.Width:= ScaleX(314);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\portable.bmp'));

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
WelcomeLabel1.Font:= WizardForm.WelcomeLabel1.Font
WelcomeLabel1.Font.Color:= clWhite;
WelcomeLabel1.Transparent:= True;
WelcomeLabel1.WordWrap:= true;
WelcomeLabel1.Caption:= WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent:= WizardForm.WelcomePage

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
WelcomeLabel2.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
end;
//


procedure WelcomeLabel1Click(Sender: TObject); forward;

procedure RedesignWizardForm6;
begin
with WizardForm do
begin
Caption := 'Dilan';
end;

with WizardForm.WelcomeLabel2 do
begin
Top := ScaleY(310);
Width := ScaleX(101);
Height := ScaleY(1);
end;

with WizardForm.WelcomeLabel1 do
begin
Caption := 'Распаковка программы' + #13#10 +
'';
OnClick := @WelcomeLabel1Click;
Top := ScaleY(72);
end;
end;

procedure WelcomeLabel1Click(Sender: TObject);
begin

end;

const
DI_NORMAL = 3;

var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
Result:= MyRadioBtn_1.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
case Sender of
MyRadioBtn_1: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;

end;
end;

procedure GetInstTypePage();
begin

try
AIconFileName:= ExpandConstant('{sys}\shell32.dll');

Rect.Left:= 0;
Rect.Top:= 0;
Rect.Right:= 32;
Rect.Bottom:= 32;

hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(68);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
end;
finally
DestroyIcon(hIcon);
end;

finally
DestroyIcon(hIcon);
end;
with TNewStaticText.Create(WizardForm) do begin
Width:= WizardForm.InnerNotebook.Width;
Height:= ScaleY(26);
WordWrap:= True;
end;

MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do begin
Top:= ScaleY(50);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
OnClick:= @RadBtnOnClick;
end;

with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(68);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_1}');
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
Result:= True;
end;

procedure InitializeWizard5();
begin
RedesignWizardForm;
GetInstTypePage();
WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if not IsChecked then begin
case CurPageID of
wpSelectDir: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
if IsChecked then
WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
end;
wpInstalling: begin
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
wpFinished: begin
WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
end;

// переход на сайт
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
If CurStep = ssDone then
begin
ShellExec('open', 'http://dilan.at.ua/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
end;


// скин
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyleW@files:VclStylesInno.dll stdcall';
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('CobaltXEMedia.vsf');
LoadVCLStyle(ExpandConstant('{tmp}\CobaltXEMedia.vsf'));
Result := True;
end;


var MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject); var ErrorCode: Integer;
begin
ShellExec('open', 'http://dilan.at.ua/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;

procedure InitializeWizard1();
begin
MouseLabel:=TLabel.Create(WizardForm)
MouseLabel.Width:=WizardForm.Width
MouseLabel.Height:=WizardForm.Height
MouseLabel.Autosize:=False
MouseLabel.Transparent:=True
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
MouseLabel.Parent:=WizardForm
SiteLabel:=TLabel.Create(WizardForm)
SiteLabel.Left:=10
SiteLabel.Top:=330
SiteLabel.Cursor:=crHand
SiteLabel.Font.Color:=clBlue
SiteLabel.Caption:='RePack by Dilan'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm
end;

// Splash
procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer);
external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard2;
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}\Splash.png'),1000,3000,1000,0,255,True,$FFF FFF,10);
end;


const
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset1: DWORD; offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): DWORD; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start: Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';

function InitializeSetup4(): Boolean;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('sound.mp3');
mp3Name := ExpandConstant('{tmp}\sound.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
Result := True;
end;

procedure InitializeWizard7();
begin
WizardForm.FilenameLabel.Hide //Прячем извлекаемые файлы
WizardForm.ProgressGauge.Hide //Прячем прогресс-бар
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
InitializeWizard1();
InitializeWizard2;
InitializeWizard3();
InitializeSetup4()
InitializeWizard5();
RedesignWizardForm6;
InitializeWizard7();
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
UnLoadVCLStyles;
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030100505000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038F010 D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C6963697457696 4746803F1010E4578706C6963697448656967687403390100F10E544E6577537461746963546578740D57656C636F6D654C6 162656C320743617074696F6E12000000000000F10E544E6577537461746963546578740D57656C636F6D654C6162656C310 743617074696F6E1200000000000000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C696 36974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650E496E7374616C6C696E67506167650D4578706C6963697 4576964746803A1010E4578706C6963697448656967687403ED0000000000F110544E65774E6F7465626F6F6B506167650C4 6696E6973686564506167650B4578706C69636974546F7002400D4578706C69636974576964746803F1010E4578706C69636 97448656967687403390100F10C544269746D6170496D6167651257697A6172644269746D6170496D6167653205576964746 803F4010D4578706C69636974576964746803F4010000F110544E6577436865636B4C697374426F780752756E4C697374044 C65667403DD0103546F70032B0105576964746802000648656967687402060C4578706C696369744C65667403DD010B45787 06C69636974546F70032B010D4578706C69636974576964746802000E4578706C6963697448656967687402060000F10F544 E6577526164696F427574746F6E074E6F526164696F044C656674021003546F70033901055769647468020D0648656967687 402090743617074696F6E12000000000C4578706C696369744C65667402100B4578706C69636974546F700339010D4578706 C696369745769647468020D0E4578706C6963697448656967687402090000F10F544E6577526164696F427574746F6E08596 573526164696F044C65667403DD0105576964746802030743617074696F6E12000000000C4578706C696369744C65667403D D010D4578706C69636974576964746802030000F10E544E6577537461746963546578740D46696E69736865644C6162656C0 44C65667403DD0103546F70039700055769647468020006486569676874020C0743617074696F6E12000000000C4578706C6 96369744C65667403DD010B4578706C69636974546F700397000D4578706C69636974576964746802000E4578706C6963697 4486569676874020C0000F10E544E6577537461746963546578741446696E697368656448656164696E674C6162656C044C6 5667403DD0103546F70033801055769647468020C0648656967687402020743617074696F6E12000000000C4578706C69636 9744C65667403DD010B4578706C69636974546F700338010D4578706C696369745769647468020C0E4578706C69636974486 56967687402020000000000



Dodakaedr 29-08-2015 21:15 2547393

Цитата:

Цитата vadjliss
всё перепробЫвал ну ни как »

а так пробовали?
Код:

[Files]
;Source: "C:\Users\WWW\Desktop\скрипт\soft\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: dll\BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: Sound\sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: image\Splash.png; Flags: dontcopy
Source: dll\isgsg.dll; Flags: dontcopy
Source: dll\VclStylesinno.dll; DestDir: {app}; Flags: dontcopy
Source: CobaltXEMedia.vsf; DestDir: {app}; Flags: dontcopy
Source: image\portable.bmp; DestDir: {tmp}; Flags: dontcopy
Source: soft\Chromodo Browser 44.5.7.268.exe; Components: ChromodoBrowser; DestDir: "{tmp}"
Source: soft\Google Chrome 44.0.2403.157 Stable 64.exe; Components: GoogleChrome64; DestDir: "{tmp}"
Source: soft\Google Chrome 44.0.2403.157 Stable.exe; Components: GoogleChrome; DestDir: "{tmp}"

[Components]
Name: "ChromodoBrowser"; Description: "Chromodo Browser 44.5.7.268"; Types: polnaya viborochnaya
Name: "GoogleChrome64"; Description: "Google Chrome 44.0.2403.157 Stable 64"; Types: polnaya viborochnaya
Name: "GoogleChrome"; Description: "Google Chrome 44.0.2403.157 Stable"; Types: polnaya viborochnaya

[Run]
FileName: "{tmp}\Chromodo Browser 44.5.7.268.exe"; StatusMsg: "Выполнение программы Chromodo Browser 44.5.7.268"; Components: ChromodoBrowser; Flags: skipifsilent hidewizard
FileName: "{tmp}\Google Chrome 44.0.2403.157 Stable 64.exe"; StatusMsg: "Выполнение программы Google Chrome 44.0.2403.157 Stable 64"; Components: GoogleChrome64; Flags: skipifsilent hidewizard
FileName: "{tmp}\Google Chrome 44.0.2403.157 Stable.exe"; StatusMsg: "Выполнение программы Google Chrome 44.0.2403.157 Stable"; Components: GoogleChrome; Flags: skipifsilent hidewizard


vadjliss 30-08-2015 07:42 2547460

Dodakaedr спасибо :clapping:

vadjliss 30-08-2015 21:01 2547621

почему при компиляции версия файла всегда 0.0.0.0
скрипт

#define MyAppName "Acronis True Image 2016"
#define MyAppVersion "19.0 Build 5586"
#define MyAppPublisher "Acronis"
#define MyAppURL ""
#define MyAppExeName "TrueImageLauncher.exe"

[Setup]
AppId={{2F983EE9-A521-4D68-83F4-626DEC61E945}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
VersionInfoDescription=Acronis True Image 2016 19.0 Build 5586
OutputDir=C:\Users\\WWW\Desktop\скрипт
OutputBaseFilename=Acronis True Image 2016 19.0 Build 5586
SetupIconFile=C:\Users\\WWW\Desktop\скрипт\image\1.ico
PrivilegesRequired=admin
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=image\1.bmp
WizardSmallImageFile=image\2.bmp
UsePreviousGroup=False
DisableProgramGroupPage=yes

audiofeel 30-08-2015 21:12 2547623

vadjliss,
Цитата:

Цитата vadjliss
почему при компиляции версия файла всегда 0.0.0.0 »

добавить версию файла и версию продукта
AppVersion=1.5
VersionInfoVersion=1.0
где "AppVersion" это - Версия файла
и VersionInfoVersion это Версия продукта (так же будет видна в Панели управления "Программы и компоненты"

R.i.m.s.k.y. 01-09-2015 09:44 2548145

господа состоятельные кроты
подскажите, как определить установлен ли вкредист2013 http://www.microsoft.com/ru-ru/downl....aspx?id=40784

этот способ не прокатывает тк МС в великой мудрости сменила инсталлер с MSI на что-то другое

R.i.m.s.k.y. 01-09-2015 10:56 2548165

затупил
как удалить последний символ в строке если это '.'

TryRooM 01-09-2015 11:32 2548180

R.i.m.s.k.y., как определить установлен ли вкредист2013
а по ключу Uninstall не прокатит.
Скрытый текст
Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: BundleCachePath; ValueData: C:\ProgramData\Package Cache\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}\vcredist_x64.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: multisz; ValueName: BundleUpgradeCode; ValueData: {1D1DB5E6-E0D8-3103-8570-369A82A9BF33}{break}{break}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: multisz; ValueName: BundleAddonCode; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: multisz; ValueName: BundleDetectCode; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: multisz; ValueName: BundlePatchCode; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: BundleVersion; ValueData: 12.0.30501.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: BundleProviderKey; ValueData: {{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: BundleTag; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: EngineVersion; ValueData: 3.7.2829.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: DisplayIcon; ValueData: C:\ProgramData\Package Cache\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}\vcredist_x64.exe,0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: DisplayName; ValueData: Microsoft Visual C++ 2013 Redistributable (x64) - 12.0.30501; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: DisplayVersion; ValueData: 12.0.30501.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: Publisher; ValueData: Корпорация Майкрософт; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: ModifyPath; ValueData: """C:\ProgramData\Package Cache\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}\vcredist_x64.exe"" /modify"; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: dword; ValueName: NoElevateOnModify; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: QuietUninstallString; ValueData: """C:\ProgramData\Package Cache\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}\vcredist_x64.exe"" /uninstall /quiet"; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: string; ValueName: UninstallString; ValueData: """C:\ProgramData\Package Cache\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}\vcredist_x64.exe""  /uninstall"; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: dword; ValueName: EstimatedSize; ValueData: $00005246; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: dword; ValueName: Resume; ValueData: $00000003; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{1a63c099-febd-4eaf-83ad-a82ea4fdac49}; ValueType: dword; ValueName: Installed; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty


R.i.m.s.k.y. 01-09-2015 11:37 2548183

Цитата:

Цитата TryRooM
а по ключу Uninstall не прокатит. »

не прокатит - если установщик запущен не под одмином доступ к hklm может блокироваться
так же ключ Uninstall может блокироваться во время установки - как раз когда isvcredist13_install отрабатывает
вощем предпочтительно штатными средствами

ругается на синтаксис case (syntax error)
что ему не нравится?
FileSize(path_m1+'\game.exe', FileSize_m1);
case FileSize_m1 of
900096 : version_m1 := "1.0"
2486272 : version_m1 := "1.0"
2443129 : version_m1 := "1.0"
2469888 : version_m1 := "1.0"
2989430 : version_m1 := "1.0"
2351104 : version_m1 := "1.1"
2355200 : version_m1 := "1.2"
else version_m1 := "0";
end;

R.i.m.s.k.y. 02-09-2015 14:33 2548669

вот такой
procedure DeinitializeSetup();
begin
BASS_DeInit; //Освобождаем процесс
gdipShutdown
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
WizardForm.Hide;
Sleep(200);
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
RF(ExpandConstant('{src}\!!!.txt'));
end;

если при старте установщика в окне выбора языка нажать "отмена" то вываливается ошибка на строчке ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);

Подскажите, как избавиться?

El Sanchez 02-09-2015 16:00 2548701

Цитата:

Цитата R.i.m.s.k.y.
этот способ не прокатывает тк МС в великой мудрости сменила инсталлер с MSI на что-то другое »

R.i.m.s.k.y., это что-то другое содержит в себе 2 msi, так что способ прокатывает.
Цитата:

Цитата R.i.m.s.k.y.
не прокатит - если установщик запущен не под одмином доступ к hklm может блокироваться »

R.i.m.s.k.y., с чего вдруг? Читать можно всем.
Цитата:

Цитата R.i.m.s.k.y.
ругается на синтаксис case (syntax error)
что ему не нравится? »

R.i.m.s.k.y., двойные кавычки вместо одинарных, нет точки с запятой после каждого выбора.
Цитата:

Цитата R.i.m.s.k.y.
если при старте установщика в окне выбора языка нажать "отмена" то вываливается ошибка на строчке ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); »

R.i.m.s.k.y., форма-то еще не проинициализирована, {wizardhwnd} нема, а ShowWindow уже чего-то хочет. Да и незачем временно скрывать форму при выгрузке скина.
Если в DeinitializeSetup есть обращение к WizardForm или {wizardhwnd}, то нужно делать проверку:
Код:

if ExpandConstant('{wizardhwnd}') <> '0' then
   
// что-то делаем с WizardForm или {wizardhwnd}


R.i.m.s.k.y. 02-09-2015 16:14 2548705

Цитата:

Цитата El Sanchez
что-то другое содержит в себе 2 msi, так что способ прокатывает. »

я в темпах шарился во время установки - нет там MSI
где он лежит или как его вытащить?

Цитата:

Цитата El Sanchez
с чего вдруг? Читать можно всем. »

хз
сталкивался с тем что во время установки чтение оттуда выдает пустые строки

Цитата:

Цитата El Sanchez
форма-то еще не проинициализирована, {wizardhwnd} нема, а ShowWindow уже чего-то хочет. »

я знаю,
теперь выдает ошибку could not call proc на строчке
if ExpandConstant('{wizardhwnd}') <> '0' then begin

R.i.m.s.k.y. 02-09-2015 16:45 2548722

а как называется функция, инициализирующая окошко выбора языка? что-то initializelanguagewindow чтоле? попробую через нее

R.i.m.s.k.y. 02-09-2015 17:00 2548728

вывернулся

var FormInitialized : boolean;

function InitializeLanguageDialog(): Boolean;
begin
FormInitialized := false;
...
end;

procedure DeinitializeSetup();
begin
if (FormInitialized) then begin
BASS_DeInit; //
gdipShutdown
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
WizardForm.Hide;
Sleep(200);
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
RF(ExpandConstant('{src}\!!!.txt'));
end;
end;


procedure InitializeWizard();
begin
FormInitialized := true;
...
end;

Stealthmax 08-09-2015 12:30 2550857

Подскажите, а есть ли адекватное решение для работы с REG_BINARY?
Код:

function GetHKLM: Integer;
begin
  if IsWin64 then
    Result := HKLM64
  else
    Result := HKLM32;
end;

procedure InitializeWizard();
var
  RegKey10: AnsiString;
begin
RegQueryBinaryValue(GetHKLM(), 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', RegKey10);
  MsgBox(RegKey10, mbInformation, MB_OK);
end;

Сам твик в формате *.reg :
Код:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder]
"Attributes"=hex:70,01,00,20

В таком виде не выводит в окне сообщения что-либо вразумительное. Как получить читабельный вид значения, чтобы возможно было его прочитать/сравнить/записать?

Решение найдено:
Код:

function GetRegBinStr(key: integer; subkey, value: string): string;
var s: Ansistring;
    i: integer;
begin
    RegQueryBinaryValue(key, subkey, value, s);
    for i := 1 to Length(s) do
    begin
        result := result + Format('%.2x', [Ord(s[i])]);
        if not (i = Length(s)) then result := result + ',';
    end;
end;

function HexToStr(str_hex: string): string;
var
  i: Integer;
begin
  StringChange(str_hex, ',', '');
  for i:= 1 to Length(str_hex) div 2 do
    Result:= Result +  Chr(StrToInt('$' + Copy(str_hex, (i-1)*2+1, 2)));
end;

function GetHKLM: Integer;
begin
  if IsWin64 then
    Result := HKLM64
  else
    Result := HKLM32;
end;


procedure InitializeWizard();
var
  RegKey10: AnsiString;
  S: string;
begin
RegKey10:= GetRegBinStr(GetHKLM(), 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes'); //получаем значение из реестра и конвертируем в читабельный вид
MsgBox(RegKey10, mbInformation, MB_OK); //смотрим что на выходе
  S:= '70,01,00,20'; //задаем свое значение
  RegKey10:=  HexToStr(S); //конвертируем значение в hex
  RegWriteBinaryValue(GetHKLM(), 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', RegKey10); //пишем в реестр
  //здесь можно посмотреть результат записи в том же порядке, убрать комментарий строк ниже для наглядности работы
 //RegKey10:= GetRegBinStr(GetHKLM(), 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes');
 //MsgBox(RegKey10, mbInformation, MB_OK);
end;

P.S. Отдельная благодарность Serega за функцию HexToStr
P.P.S. Ключ для теста лучше заменить, например, на такой 'SOFTWARE\Test', 'Test', т.к. в моем примере закрытый ключ на запись, но это уже другая история(SetACL).

El Sanchez 08-09-2015 15:48 2550963

Цитата:

Цитата Stealthmax
Подскажите, а есть ли адекватное решение для работы с REG_BINARY? »

Stealthmax, неадекватного здесь только функция GetHKLM.
Цитата:

Цитата Stealthmax
Как получить читабельный вид значения »

Stealthmax, зачем? Бинарные данные некрасивы в любом виде. В данном примере после вызова RegQueryBinaryValue некрасивое значение переменной RegKey10 эквивалентно некрасивой строке #$70#$01#$00#$20.

Stealthmax 08-09-2015 16:01 2550969

Цитата:

Цитата El Sanchez
неадекватного здесь только функция GetHKLM. »

А как корректнее подключить взаимодействие HKLM64 и HKLM32? У меня обработка веток происходит в соответствии с разрядностью системы, т.е. на x64 у меня отработал скрипт, на x86 пока не тестировал.
Цитата:

Цитата El Sanchez
В данном примере после вызова RegQueryBinaryValue некрасивое значение переменной RegKey10 эквивалентно некрасивой строке #$70#$01#$00#$20 »

А с учетом уже найденного решения?

El Sanchez 08-09-2015 16:35 2550980

Цитата:

Цитата Stealthmax
А как корректнее подключить взаимодействие HKLM64 и HKLM32? У меня обработка веток происходит в соответствии с разрядностью системы, т.е. на x64 у меня отработал скрипт, на x86 пока не тестировал. »

Stealthmax, да оно-то при чтении может и ничего, но если писать, то может оказаться, что на 64-разрядной системе CLSID находится не только в 64-разрядной ветке реестра, но и в 32-разрядной.
Цитата:

Цитата Stealthmax
А с учетом уже найденного решения? »

Stealthmax, я еще понимаю строки/числа из реестра читать и выводить в удобной форме, но бинарные данные зачем?
Код:

// читать
RegQueryBinaryValue(HKLM, 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', RegKey10);

// сравнить
MsgBox(Format('%d', [(RegKey10 = #$70#$01#$00#$20)]), mbInformation, MB_OK);

// записать
RegWriteBinaryValue(HKLM, 'SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', #$70#$01#$00#$20);


Stealthmax 08-09-2015 17:11 2550990

Цитата:

Цитата El Sanchez
я еще понимаю строки/числа из реестра читать и выводить в удобной форме, но бинарные данные зачем? »

Возникла проблема, когда в ключе потребовалось изменить туда/обратно значение, в частности, данный CLSID - это корзина, т.е. все что требовалось, это изменить "Attributes"=hex:40,01,00,20 на "Attributes"=hex:70,01,00,20. Говоря проще, скрыть или показать корзину в переходах Проводника Windows(и по аналогии другие элементы, но там проще получилось с Dword).
Цитата:

Цитата El Sanchez
может оказаться, что на 64-разрядной системе CLSID находится не только в 64-разрядной ветке реестра, но и в 32-разрядной »

В точку. В примере, я не указывал ключ RegWriteBinaryValue(GetHKLM(), 'SOFTWARE\Wow6432Node\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder', 'Attributes', RegKey11);
Поэтому и пояснил этот момент, в плане того, что учел эту особенность и проверил работоспособность именно на x64, где есть Wow6432Node.

El Sanchez 09-09-2015 09:09 2551250

Цитата:

Цитата Stealthmax
Wow6432Node »

Stealthmax, это тоже ошибка. Нельзя прямо указывать Wow6432Node. Категорически.
Цитата:

Цитата El Sanchez
может оказаться, что на 64-разрядной системе CLSID находится не только в 64-разрядной ветке реестра, но и в 32-разрядной. »

Stealthmax, я про то, что данный CLSID находится в 2-х местах, с помощью GetHKLM на 64-разрядной системе запись будет произведена только в 64-разрядную ветку реестра. Всего-то нужно на 64-разрядной системе для данного CLSID RegWriteBinaryValue вызвать 2 раза: RegWriteBinaryValue(HKLM, 'SOFTWARE\Classes\...') - запись пойдет в 32-разрядную ветку, RegWriteBinaryValue(HKLM64, 'SOFTWARE\Classes\...') - запись пойдет в 64-разрядную ветку.

Stealthmax 09-09-2015 21:05 2551503

Цитата:

Цитата El Sanchez
Всего-то нужно на 64-разрядной системе для данного CLSID RegWriteBinaryValue вызвать 2 »

Т.е. в случае, если запуск будет выполнен на 32-разрядной ОСи, то отработает ключ,
Цитата:

Цитата El Sanchez
RegWriteBinaryValue(HKLM, 'SOFTWARE\Classes\...') »

а HKLM64 будет пропущен ввиду отсутствия, верно?

TryRooM 10-09-2015 01:01 2551561

Stealthmax,
HKLM64
Этот ключ предназначен исключительно для 64 битной системы.
Без ключа 64,т.е. HKLM, запись будет происходить в секцию Wow6432Node, в 32-разрядную ветку. А при наличии ключа, т.е. HKLM64, запись будет идти в верхний раздел реестра, до секции Wow6432Node, в 64-разрядную ветку. Этот ключ типа переключателя. Бывает очень даже нужен, в некоторых случаях.
На 32 битной системе, при установке, сразу выдаст ошибку.
Ставьте запрет, установка только, if IsWin64 then и все.

audiofeel 10-09-2015 03:40 2551576

Вложений: 1
почему текст при нажатии "обводится" пунктиром каким то ? в скрипте только VclStylesinno, ни чего нет, чек бокс не через ботву

Stealthmax 10-09-2015 08:32 2551612

TryRooM, El Sanchez, спасибо, теперь порядок, пойду дальше "пилить". Убрал срам
Код:

RegWriteDWordValue(GetHKLM(), 'SOFTWARE\Wow6432Node\Classes\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder','Attributes', $b0940064);

audiofeel 10-09-2015 22:41 2551909

как сделать TMemo со списком копирующихся файлов в ISDone?
пример нашел, но на этом все, ни чего не понял
http://krinkels.org/threads/faq-po-i...tup.7/#post-42
еще вопрос. как сделать быстрый выбор диска установки. его буквы, как на скрине ??

и еще вопрос как реализовать прозрачность появляющуюся при перемещении окна , а также "медленный" выход(исчезновение) как на видео ?
пример

vadjliss 12-09-2015 17:31 2552431

подскажите как сделать интеграцию в меню по запросу

Respin 13-09-2015 00:50 2552548

Цитата:

Цитата audiofeel
почему текст при нажатии "обводится" пунктиром каким то? »

Решил вопрос с этим, а то меня тоже интересует данный факт.

audiofeel 13-09-2015 00:57 2552552

Цитата:

Цитата Respin
Решил вопрос с этим, а то меня тоже интересует данный факт. »

нет, видимо особенность VclStylesinno, сделал отдельно чек боксы и отдельно лейблы

AlekseyPopovv 13-09-2015 13:53 2552660

Как правильно задать параметр?
Exec(ExpandConstant('{win}\regedit.exe'), '/EA (ExpandConstant({commondesktop}\settings.reg HKEY_CURRENT_USER\Software\DWGTool\CADConverter)', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);

vadjliss 13-09-2015 14:15 2552668

парни подскажите скрипт что бы в 1 инстоляторе было и 32и 64 битная сис.
и чтоб автоматически выбирала систему
очень очень надо

AlekseyPopovv 13-09-2015 14:30 2552672

vadjliss,
[Setup]
ArchitecturesInstallIn64BitMode=x64

[...]
; х64
Check: "Is64BitInstallMode";
; х86
Check: "not Is64BitInstallMode";

vadjliss 13-09-2015 14:55 2552675

а на примере можешь показать куда и как ставить
я так понял вот так
скрипт

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{D19EE6F3-07CC-4C29-A911-0F50BC5F659F}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion


[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

; х64
Check: "Is64BitInstallMode";
; х86
Check: "not Is64BitInstallMode";

audiofeel 13-09-2015 17:48 2552734

TryRooM,
Цитата:

Цитата TryRooM
us_ov, Примерно так
Скрытый текст »

помоги разобраться в твоем примере, мне нужно лишь выбрать букву диска, все что смог " лишнее " убрал но появилась проблема, когда выбираешь диск через кнопку "обзор" то инфа в комбо бокс не обновляется, то есть если выбрал диск Д. то в комбо боксе остается С
пример
Скрытый текст

[code]; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Моя программа"
#define MyAppVersion "1.5"
#define MyAppPublisher "Моя компания, Inc."
#define MyAppURL "http://www.сайт.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{B5BB5779-8526-4769-95BB-7F54ACCBC64A}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Код:

var
cbDrive: TComboBox;
DrvLetters: array of string;

function GetDriveType(lpDisk: string): integer;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetLogicalDriveStrings(nLenDrives: LongInt; lpDrives: string): integer;
external 'GetLogicalDriveStringsA@kernel32.dll stdcall';

const
  DRIVE_UNKNOWN = 0;
  DRIVE_NO_ROOT_DIR = 1;
  DRIVE_REMOVABLE = 2;
  DRIVE_FIXED = 3;
  DRIVE_REMOTE = 4;
  DRIVE_CDROM = 5;
  DRIVE_RAMDISK = 6;

function DriveTypeString(dtype: integer): string;
begin
  case dtype of
    DRIVE_NO_ROOT_DIR: Result:='';
    DRIVE_REMOVABLE: Result:='';
    DRIVE_FIXED: Result:='';
    DRIVE_REMOTE: Result:='';
    DRIVE_CDROM: Result:='';
    DRIVE_RAMDISK: Result:='';
  end;
end;

procedure cbDriveOnClick(Sender: TObject);
begin
  WizardForm.DirEdit.Text := DrvLetters[cbDrive.ItemIndex] + '{#MyAppName}';
end;

procedure FillCombo();
var
  drivesletters, drive, sd: string;
  n, lenletters, disktype, posnull: integer;

begin
  sd := UpperCase(ExpandConstant('{sd}'));
  drivesletters := StringOfChar(' ', 64);
  lenletters := GetLogicalDriveStrings(63, drivesletters);
  SetLength(drivesletters, lenletters);
  Drive := '';
  n := 0;
  while ((Length(Drivesletters) > 0)) do begin
    posnull := Pos(#0, Drivesletters);
    if posnull > 0 then begin
      Drive := UpperCase(Copy(Drivesletters, 1, posnull-1));
      disktype := GetDriveType(Drive);
      if ( not ( disktype = DRIVE_REMOVABLE  ) ) then
      if ( not ( disktype = DRIVE_REMOTE  ) ) then
      if ( not ( disktype = DRIVE_CDROM  ) ) then
      if ( not ( disktype = DRIVE_RAMDISK  ) ) then begin
        cbDrive.Items.Add(Drive + DriveTypeString(disktype))
        SetArrayLength(DrvLetters, N+1);
        DrvLetters[n] := Drive;
        if (Copy(Drive, 1, 2)=sd) then cbDrive.ItemIndex := n;
          n := n+1;
        end
        Drivesletters := Copy(Drivesletters, posnull+1, Length(Drivesletters));
      end;
  end;
  cbDriveOnClick(cbDrive);
end;

procedure InitializeWizard();
begin
  cbDrive := TComboBox.Create(WizardForm.SelectDirPage);
  with cbDrive do begin
    Parent := WizardForm.DirEdit.Parent;
    Left := 0;
    Top := WizardForm.DirEdit.Top+WizardForm.DirEdit.Height*2-15;
    Width := 40;
    Style := csDropDownList;
  end
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text+#0;
  FillCombo;
  cbDrive.OnClick := @cbDriveOnClick;
end;


El Sanchez 14-09-2015 13:57 2552994

Цитата:

Цитата audiofeel
мне нужно лишь выбрать букву диска, все что смог " лишнее " убрал но появилась проблема, когда выбираешь диск через кнопку "обзор" то инфа в комбо бокс не обновляется, то есть если выбрал диск Д. то в комбо боксе остается С »

audiofeel, пример:
Скрытый текст

Код:

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
   
DRIVE_NO_ROOT_DIR = 1;
    DRIVE_FIXED = 3;

var
   
cbDrive: TComboBox;

function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: string): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';

procedure cbDriveOnClick(Sender: TObject);
var
   
DirValue: string;
begin
   
DirValue := WizardDirValue;
    StringChangeEx(DirValue, AddBackslash(ExtractFileDrive(DirValue)), cbDrive.Items[cbDrive.ItemIndex], True);
    WizardForm.DirEdit.Text := DirValue;
end;

procedure DirEditOnChange(Sender: TObject);
var
   
i: Integer;
begin
    for
i := 0 to cbDrive.Items.Count - 1 do
    begin
        if
CompareText(cbDrive.Items[i], AddBackslash(ExtractFileDrive(WizardDirValue))) = 0 then
        begin
           
cbDrive.ItemIndex := i;
            Break;
        end;
    end;
end;

procedure FillCombo;
var
   
dwDrives: DWORD;
    uDriveType: UINT;
    szDriveLetter: string;
    i: Integer;
begin
   
dwDrives := GetLogicalDrives;
    for i := 2 to 25 do if dwDrives and (1 shl i) <> 0 then
    begin
       
szDriveLetter := Chr(Ord('A') + i) + ':\';
        uDriveType := GetDriveType(szDriveLetter);
        case uDriveType of
           
DRIVE_FIXED:
                begin
                   
cbDrive.Items.Add(szDriveLetter);
                    if CompareText(cbDrive.Items[cbDrive.Items.Count - 1], AddBackslash(ExtractFileDrive(WizardDirValue))) = 0 then
                       
cbDrive.ItemIndex := cbDrive.Items.Count - 1;
                end;
            DRIVE_NO_ROOT_DIR: Continue;
        end;
    end;
end;

procedure InitializeWizard;
begin
   
WizardForm.DirEdit.OnChange := @DirEditOnChange;
    cbDrive := TComboBox.Create(WizardForm.SelectDirPage);
    with cbDrive do
    begin
       
Parent := WizardForm.DirEdit.Parent;
        Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(5);
        Width := 40;
        Style := csDropDownList;
        OnClick := @cbDriveOnClick;
        FillCombo;
    end;
end;


audiofeel 14-09-2015 14:25 2553005

El Sanchez,
просто отлично, все работает, только как теперь быть с лейблом "требуется место...." , он у меня менял цвет при нехватке
Скрытый текст

Код:

procedure DirEditOnChange(Sender: TObject);
var
  FreeMB, TotalMB: cardinal;
begin
  GetSpaceOnDisk(ExtractFileDrive(WizardForm.DirEdit.Text), True, FreeMB, TotalMB);
  NeedSizeLbl.Caption:= ExpandConstant('{cm:NeedSize1} ' + MbOrTb({#NeedSize}) + ' {cm:NeedSize2}')
  if (FreeMB<{#NeedSize}) then NeedSizeLbl.Font.Color:= clRed else
    NeedSizeLbl.Font.Color:= clWhite;
end;


Snoopak96 14-09-2015 14:35 2553008

El Sanchez,
Тебе видимо тут спокойно не живётся.

Аудиозоофил,
До оригинала тебе как от Москвы до Пекина пешком. На данный момент ты добился лишь того что мод VCL Styles Inno выпилен и новых версий не будет для паблика.

vadjliss 14-09-2015 19:11 2553127

подскажите как сделать или хоть примерный скрипт 32-64 бит
имеется 2 папки одна 32 другая 64 бит программы
как их реализовать в один инстал. и автоматически что бы выбирала ось

Nordek 14-09-2015 21:29 2553185

Цитата:

Цитата vadjliss
имеется 2 папки одна 32 другая 64 бит программы »

Код:

[Files]
Source: 32\*; DestDir: {app}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
Source: 64\*; DestDir: {app}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs


habib2302 20-09-2015 10:38 2555380

Доброе время суток. Подскажите как правильно сделать распаковку vcomp140.dll в sys и syswow64. Все перепробЫвал либо 1 файл не распаковывается либо оба файла в syswow64
Код:

Source: vcomp140.dll; DestDir: {sys}; Flags: ignoreversion; Check: IsWin64; Components: BDC\I;
Source: vcomp140_1.dll; DestDir: {syswow64}; Flags: ignoreversion; DestName: vcomp140.dll; Components: BDC\I;

Хочу чтобы vcomp140.dll распаковывался в System32, а vcomp140_1.dll в syswow64

El Sanchez 21-09-2015 09:00 2555743

Цитата:

Цитата habib2302
Хочу чтобы vcomp140.dll распаковывался в System32, а vcomp140_1.dll в syswow64 »

habib2302,
Код:

[Files]
Source: vcomp140.dll; DestDir: {sys}; Flags: ignoreversion 64bit; Check: IsWin64; Components: BDC\I;
Source: vcomp140_1.dll; DestDir: {sys}; Flags: ignoreversion; DestName: vcomp140.dll; Components: BDC\I;


marinaU 22-09-2015 09:37 2556166

Добрый день уважаемые гуру! Прошу помочь начинающей.. :)

Нужно в зависимости от разрядности ОС (32 или 64) установить библиотеку (без регистрации) в нужную папку, т.е. если 32, то в папку system32, если 64 - в SysWOW64.
Как это сделать?

Dodakaedr 22-09-2015 21:21 2556454

marinaU,
Код:

[Files]
Source: файл.dll; DestDir: {sys};

На 32бит пойдет в system32, а на 64бит в - SysWOW64.

marinaU 23-09-2015 09:57 2556566

Цитата:

Цитата Dodakaedr
Код:
[Files]
Source: файл.dll; DestDir: {sys};
На 32бит пойдет в system32, а на 64бит в - SysWOW64. »

Спасибо огромное!
Скажите пожалуйста, а будут ли заменены файлы при совпадении имен?

Dodakaedr 23-09-2015 18:26 2556788

Цитата:

Цитата marinaU
Скажите пожалуйста, а будут ли заменены файлы при совпадении имен? »

Если так
Код:

[Files]
Source: файл.dll; DestDir: {sys}; Flags: onlyifdoesntexist

то нет. К стате в справке про всё это очень хорошо написано, рекомендую прочесть.

R.i.m.s.k.y. 24-09-2015 09:27 2556984

подскажите, пожалуйста, как опознаются в GetWindowsVersionEx винды 8, 8.1, 10

R.i.m.s.k.y. 24-09-2015 10:57 2557024

инно от китайцев 5,5,1 для вин 8,1 и 10 возвращает
version.major=6 version.minor=2 version.build=9200
подскажите, пожалуйста, как их различать?

R.i.m.s.k.y. 24-09-2015 12:46 2557088

еще вопросик - можно как-то свойствам ярлыка выставлять совместимость с вин хр сп2 к примеру?

El Sanchez 24-09-2015 14:46 2557152

Вложений: 1
Цитата:

Цитата R.i.m.s.k.y.
подскажите, пожалуйста, как опознаются в GetWindowsVersionEx винды 8, 8.1, 10 »

Цитата:

Цитата R.i.m.s.k.y.
8.1 и 10 version.major=6 version.minor=2 version.build=9200 »

R.i.m.s.k.y., это документированое поведение для исполняемых файлов, в манифесте которых нет нужных compatibility. Я так понимаю, что ты пользуешься китайской расширенной версией компилятора (5.5.1), где не прописаны нужные строки в манифесте. В официальном компиляторе поддержка Windows 8.1 появилась в версии 5.5.4, а Windows 10 в 5.5.6.
P.S. Во вложении китаец с правленным манифестом, чтобы у установщиков волосы были мягкими и шелковистыми. Бонус: командный файл внутри для быстрой смены компилятора с ANSI на Unicode и обратно.
Цитата:

Цитата R.i.m.s.k.y.
еще вопросик - можно как-то свойствам ярлыка выставлять совместимость с вин хр сп2 к примеру? »

R.i.m.s.k.y., http://www.verboon.info/2011/03/runn...tibility-mode/

R.i.m.s.k.y., пост с картинкой удали/отредактируй, а то пожалуюсь.

TryRooM 24-09-2015 14:47 2557153

R.i.m.s.k.y., GetWindowsVersionEx винды 8, 8.1, 10
Код:

function ForWindows10(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  // Windows 10 version is 6.4 (workstation)
  if (Version.Major = 6)  and
    (Version.Minor = 4) and
    (Version.ProductType = VER_NT_WORKSTATION)
  then
    Result := True
  else
    Result := False;
end;

function ForWindows8One(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  // Windows 8.1 version is 6.3 (workstation)
  if (Version.Major = 6)  and
    (Version.Minor = 3) and
    (Version.ProductType = VER_NT_WORKSTATION)
  then
    Result := True
  else
    Result := False;
end;

function ForWindows8(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  // Windows 8 version is 6.2 (workstation)
  if (Version.Major = 6)  and
    (Version.Minor = 2) and
    (Version.ProductType = VER_NT_WORKSTATION)
  then
    Result := True
  else
    Result := False;
end;


R.i.m.s.k.y. 24-09-2015 14:56 2557157

Цитата:

Цитата El Sanchez
Бонус: командный файл внутри для быстрой смены компилятора с ANSI на Unicode и обратно. »

Compil32.exe
Compil32A.exe
ISCC.exe
ISCCA.exe
кто из них кто для контроля процесса?

El Sanchez 24-09-2015 16:09 2557196

Цитата:

Цитата R.i.m.s.k.y.
кто из них кто для контроля процесса? »

R.i.m.s.k.y., какого еще контроля? 2 набора файлов, ANSI и Unicode, распакуй все в папку с Inno Setup с заменой файлов. Получишь Unicode-версию компилятора. Если захочешь ANSI-версию, запускаешь командник, Unicode-файлы забекапятся (станут с W на конце), ANSI-файлы (с A на конце) переименуются (станут без буквы), командник тоже переименуется. Наоборот аналогично.

R.i.m.s.k.y. 24-09-2015 16:17 2557199

Цитата:

Цитата El Sanchez
какого еще контроля? 2 набора файлов, ANSI и Unicode, распакуй все в папку с Inno Setup с заменой файлов. Получишь Unicode-версию компилятора»

вот, сперва копируется юникод-версия
контроль - на случай если батник сглючит по размеру будет видно где анси, а где юникод версии файлов

nik1967 24-09-2015 21:22 2557305

Вложений: 1
Цитата:

Цитата El Sanchez
Бонус: командный файл внутри для быстрой смены компилятора с ANSI на Unicode и обратно. »

Эээ... А не проще установить 2 версии - ANSI и UNICODE, а запускать скрипт по контекстному меню (правой кнопкой мыши на файл.iss)? У меня 3 версии установлены :)
скриншот
По умолчанию открывается с помощью расширенной UNICODE. Для этого вносим изменения в реестр. Во вложении файл реестра для win7x64 - само собой прописываем свои пути установки.

Цитата:

Цитата R.i.m.s.k.y.
еще вопросик - можно как-то свойствам ярлыка выставлять совместимость с вин хр сп2 к примеру? »

Совмастимость - не?

R.i.m.s.k.y. 24-09-2015 21:28 2557309

nik1967, дзинкуе, El Sanchez уже ответил тоже самое ;)

Dodakaedr 25-09-2015 00:32 2557387

Вложений: 1
El Sanchez, наверное вы еще забыли добавить в архив файл ISCmplr.dll Ansi версии. Или убрать переименовку этого файла в батнике?

El Sanchez 25-09-2015 09:02 2557442

Цитата:

Цитата Dodakaedr
El Sanchez, наверное вы еще забыли добавить в архив файл ISCmplr.dll Ansi версии. »

Dodakaedr, куда я смотрел? Еще и ISPP забыл. Спасибо, перезалил.
Цитата:

Цитата nik1967
Эээ... А не проще установить 2 версии - ANSI и UNICODE, а запускать скрипт по контекстному меню (правой кнопкой мыши на файл.iss)? У меня 3 версии установлены »

nik1967, реализация переключения версий может быть любой, кому как нравится.

R.i.m.s.k.y. 25-09-2015 09:26 2557446

Цитата:

Цитата TryRooM
GetWindowsVersionEx винды 8, 8.1, 10 »

с патчем Санчеза установщик на анси-версии компилятора при запуске в вин8,1 определяет ОС как 6,3,9600, а десятку как 10,0,10240 вместо 6,4 :/

El Sanchez 25-09-2015 16:21 2557620

Цитата:

Цитата R.i.m.s.k.y.
с патчем Санчеза установщик на анси-версии компилятора при запуске в вин8,1 определяет ОС как 6,3,9600, а десятку как 10,0,10240 вместо 6,4 :/ »

R.i.m.s.k.y., так и должно быть. 6.4 показывает на Windows 10 Technical Preview.

vadjliss 27-09-2015 14:00 2558140

парни помогите использую вот этот скрипт но иконки не появляются на рабочем столе может кто поправит
Код:

#define MyAppName "Photoshop"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
;#define MyAppExeName "Photoshop.exe"
#define MainExe "{app}\Photoshop\Photoshop.exe"
#define MainExe64 "{app}\Photoshop\Photoshop.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)

[Setup]
AppId={{BBDEEB26-E3A9-41C0-97E1-9ED1EC144528}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: C:\Users\WW-W\Desktop\64\ProgramFiles64Folder\*; DestDir: {app}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Users\WW-W\Desktop\64\ProgramFilesFolder\*; DestDir: {pf32}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Users\WW-W\Desktop\32\ProgramFilesFolder\Adobe\*; DestDir: {app}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{commondesktop}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{commondesktop}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64


kotyarko@fb 27-09-2015 15:18 2558172

vadjliss, попробуйте использовать константу {userdesktop}, вместо {commondesktop}.

Nordek 27-09-2015 15:43 2558178

vadjliss,
Код:

#define MainExe "{app}\Photoshop.exe"
#define MainExe64 "{app}\Photoshop.exe"



Код:

[Icons]
Name: "{commondesktop}\{#MyAppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{commondesktop}\{#MyAppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64


R.i.m.s.k.y. 27-09-2015 15:44 2558179

vadjliss, а если после установки щелкнуть ПКМ по десктопу и нажать F5?
тогда в [Setup] пропишите ChangesAssociations=true и ChangesEnvironment=true
смысл у них другой но эксплорер заодно передернет десктоп

Nordek 27-09-2015 16:28 2558197

Цитата:

Цитата kotyarko@fb
попробуйте использовать константу {userdesktop}, вместо {commondesktop}. »

Это причём?

Цитата:

Цитата R.i.m.s.k.y.
а если после установки щелкнуть ПКМ по десктопу и нажать F5? »

И... ничего не изменится.

В #define MyAppName, задано имя "Photoshop"
Код:

#define MyAppName "Photoshop"
Далее секция [Setup]
В DefaultDirName назначен путь установки {pf}\{#MyAppName}

Код:

DefaultDirName={pf}\{#MyAppName}
т.е #define MyAppName "Photoshop" + DefaultDirName={pf}\{#MyAppName} = C:\Program Files\Photoshop

Далее в #define MainExe задано "{app}\Photoshop\Photoshop.exe"
Код:

#define MainExe "{app}\Photoshop\Photoshop.exe"
#define MyAppName "Photoshop" + DefaultDirName={pf}\{#MyAppName} + #define MainExe "{app}\Photoshop\Photoshop.exe" = C:\Program Files\Photoshop\Photoshop\Photoshop.exe


Далее секция [Icons]
В Name указано "{commondesktop}\{#AppName}"

Код:

Name: "{commondesktop}\{#AppName}"
В скрипте {#AppName} нет, есть только {#MyAppName}

notmeagain 07-10-2015 17:46 2561538

Добрый день. Есть вопрос, который надо решить. При установке программы надо чтобы была возможность выбрать путь установки программы и выбрать отдельно путь хранения дополнительных файлов и потом второй путь внести в переменную среды.
Главный вопрос как сделать еще один момент с вопросом куда сохранять вторые файлы и как их передать, чтобы внести в переменную среды. Спасибо.

Сам же и отвечу на свой вопрос.
Код:

[Registry]
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName:"nameEnv"; ValueData:"{code:GetDataDir}" ; Flags: preservestringtype ;

[code]
Код:

var
DataDirPage: TInputDirWizardPage;

procedure InitializeWizard;
begin
  { Create the pages }

 DataDirPage := CreateInputDirPage(wpSelectDir,
    'Выбор директории ', 'Куда сохранять ?',
    'Выберите папку и затем нажмите продолжить.',
    False, '');
  DataDirPage.Add('');

DataDirPage.Values[0] := GetPreviousData('DataDir', '');
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
var
  UsageMode: String;
begin
  SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  I: Integer;
begin
if DataDirPage.Values[0] = '' then
        DataDirPage.Values[0] := 'C:\';
      Result := True;
end;

function GetDataDir(Param: String): String;
begin
  { Return the selected DataDir }
  Result := DataDirPage.Values[0];
end;

буду рад если мне укажут на какие-нибудь ошибки и улучшения на ваш взгляд.

El Sanchez 08-10-2015 19:13 2561976

Цитата:

Цитата notmeagain
буду рад если мне укажут на какие-нибудь ошибки и улучшения на ваш взгляд. »

notmeagain,
1. В NextButtonClick проверку DataDirPage.Values[0] = '' сделайте только в CurPageID = wpReady, незачем после каждого клика ее делать.
2. Там же литерал 'С:\' заменить на ExpandConstant('{sd}'), не у всех диск C: есть.
3. В InitializeWizard вторым параметром GetPreviousData написать ExpandConstant('{sd}'). Если первая установка и DataDir неоткуда читать, то DataDirPage.Values[0] получит значение по умолчанию (второй параметр).
4. Локальные переменные I и UsageMode не используются.

habib2302 08-10-2015 22:12 2562040

Помогите решить проблему



https://yadi.sk/d/fNzh4I8GjcRZe

cl85 08-10-2015 22:34 2562052

Здравствуйте.
Подскажите пожалуйста, какой код добавить в .iss, чтоб файл .xml добавить в планировщик заданий.
Заранее благодарен.

kotyarko@fb 09-10-2015 10:37 2562175

Цитата:

Цитата habib2302
Помогите решить проблему »

Прикрепите всё необходимое для компиляции.

habib2302 09-10-2015 10:45 2562179

kotyarko@fb, https://cloud.mail.ru/public/DWT3/JGbnbafFD

kotyarko@fb 09-10-2015 11:04 2562187

habib2302, проблемного места, которое есть в первом прикреплённом вами скрипте, нет во втором (полном). Они отличаются.

habib2302 09-10-2015 12:11 2562203

kotyarko@fb, это понятно, что они отличаются. Вот ссылка на скрипт который был добавлен в первый прикрепленный скрипт https://yadi.sk/i/V_hiV_Sqjcvw5 и добавил реестр из пользовательского раздела sid

El Sanchez 12-10-2015 16:53 2563053

Цитата:

Цитата habib2302
Помогите решить проблему »

habib2302, в справке написано, что функция, используемая в скриптовых code-константах должна иметь 1 параметр типа string и возвращать результат типа string или Boolean. Параметра нет - рассматриваем invalid prototype.

R.i.m.s.k.y. 16-10-2015 15:11 2564577

господа состоятельные кроты
подскажите, пожалуйста, как сделать кнопку проверки установщика по чексумме
я в своих установщиках использую стандартные методы сжатия самим инно (bzip или 7zip)

Stealthmax 16-10-2015 22:31 2564716

Приветствую всех!
Подскажите решение с бэкапом ветки/веток реестра. Возможно ли добавить бэкап в {uninstallexe}, т.е. наподобие функции GetFromRes, но наоборот.
Дабы после установки содержимое бэкапа сохранилось в деинсталляторе для последующего восстановления при удалении.
Бэкап реестра
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[_code]
#define A = (Defined UNICODE) ? "W" : "A"
const
  SE_BACKUP_NAME = 'SeBackupPrivilege';
  SE_RESTORE_NAME = 'SeRestorePrivilege';

  TOKEN_QUERY = $8;
  TOKEN_ADJUST_PRIVILEGES = $20;
  SE_PRIVILEGE_ENABLED = $2;
  ERROR_SUCCESS = 0;
  KEY_WOW64_64KEY  =  $0100;
  MAXIMUM_ALLOWED = $02000000;
  REG_FORCE_RESTORE = $00000008;

type
  LUID = record
  LowPart: DWORD;
  HighPart: Longint;
  end;

  LUID_AND_ATTRIBUTES = record
  Luid: LUID;
  Attributes: DWORD;
  end;

  TOKEN_PRIVILEGES = record
  PrivilegeCount: DWORD;
  Privileges: array [0..0] of LUID_AND_ATTRIBUTES;
  end;

  REGSAM = DWORD;
  HKEY = LongWord;

function RegSaveKey(hKey: HKEY; lpFile: String; lpSecurityAttributes: Longint):longint; external 'RegSaveKey{#A}@advapi32.dll stdcall';
function RegOpenKeyEx(hKey: HKEY; lpSubKey: String; ulOptions: DWORD; samDesired: REGSAM; var phkResult: HKEY): Longint; external 'RegOpenKeyEx{#A}@advapi32.dll stdcall';
function RegCreateKeyEx(hKey: HKEY; lpSubKey: String; Reserved: DWORD; lpClass: String; dwOptions: DWORD; samDesired: REGSAM; lpSecurityAttributes: Longint; var phkResult: HKEY; var lpdwDisposition: DWORD): Longint; external 'RegCreateKeyEx{#A}@advapi32.dll stdcall';
function RegCloseKey(hKey: HKEY): Longint; external 'RegCloseKey@advapi32.dll stdcall';
function RegRestoreKey(hKey: HKEY; lpFile: String; lpSecurityAttributes: Longint):longint; external 'RegRestoreKey{#A}@advapi32.dll stdcall';

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetLastError(): DWORD; external 'GetLastError@Kernel32 stdcall';
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function NTSetPrivilege(sPrivilege: string; bEnabled: Boolean): Boolean;
var
  hToken: THandle;
  TokenPriv: TOKEN_PRIVILEGES;
  PrevTokenPriv: TOKEN_PRIVILEGES;
  ReturnLength: Cardinal;
  Version: TWindowsVersion;
  ret: Longint;
begin
  GetWindowsVersionEx(Version);
  if not Version.NTPlatform then Exit;

  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
  begin
  try
  if LookupPrivilegeValue('', PAnsiChar(sPrivilege), TokenPriv.Privileges[0].Luid) then
  begin
  TokenPriv.PrivilegeCount := 1;

  case bEnabled of
  True: TokenPriv.Privileges[0].Attributes  := SE_PRIVILEGE_ENABLED;
  False: TokenPriv.Privileges[0].Attributes := 0;
  end;
  ReturnLength := 0;
  PrevTokenPriv := TokenPriv;

  AdjustTokenPrivileges(hToken, False, TokenPriv, SizeOf(PrevTokenPriv), PrevTokenPriv, ret);
  end;
  finally
  CloseHandle(hToken);
  end;
  end;
  Result := GetLastError = ERROR_SUCCESS;
  if not Result then MsgBox(SysErrorMessage(GetLastError), mbInformation, MB_OK);
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure RegBackupTofile(intKey: HKEY; intSubKey, outfile: string; Wow32: BOOL);  //Процедура бэкапа ветки реестра в файл
//intKey - корневой раздел
//intSubKey - Путь к ветке реестра
//outfile - Имя бэкапа
//Wow32 - если true то вкл перенаправление Wow3264Node
var
  phkResult: HKEY;
begin
if not NTSetPrivilege(SE_BACKUP_NAME, true) then if MsgBox('Ошибка прав доступа!', mbInformation, MB_OK) = IDOK then Exit;
  if Wow32 then begin
  if RegOpenKeyEx(intKey, intSubKey, 0, MAXIMUM_ALLOWED, phkResult) > ERROR_SUCCESS then begin MsgBox('Ошибка чтения реестра!', mbInformation, MB_OK); Exit; end;
  end else if RegOpenKeyEx(intKey, intSubKey, 0, MAXIMUM_ALLOWED or KEY_WOW64_64KEY, phkResult) > ERROR_SUCCESS then begin MsgBox('Ошибка чтения реестра!', mbInformation, MB_OK); Exit; end;
  if RegSaveKey(phkResult, outfile, 0) > ERROR_SUCCESS then begin MsgBox('Ошибка сохранения файла!', mbInformation, MB_OK); Exit; end;
RegCloseKey(phkResult);
end;

procedure RegRestorefromfile(outKey: HKEY; outSubKey, infile: string; Wow32: BOOL);  //Процедура востановление реестра из файла, параметры по аналогии
var
  phkResult: HKEY;
  lpdwDisposition: DWORD;
begin
  if not FileExists(infile) then begin MsgBox('Файл не найден!', mbInformation, MB_OK); Exit; end;
  NTSetPrivilege(SE_BACKUP_NAME, true);
  NTSetPrivilege(SE_RESTORE_NAME, true);
  if Wow32 then begin
  if RegCreateKeyEx(outKey, outSubKey, 0, '', 0, MAXIMUM_ALLOWED, 0, phkResult, lpdwDisposition) > ERROR_SUCCESS then begin MsgBox('Ошибка записи в реестр!', mbInformation, MB_OK); Exit; end;
  end else if RegCreateKeyEx(outKey, outSubKey, 0, '', 0, MAXIMUM_ALLOWED or KEY_WOW64_64KEY, 0, phkResult, lpdwDisposition) > ERROR_SUCCESS then begin MsgBox('Ошибка записи в реестр!', mbInformation, MB_OK); Exit; end;
  if RegRestoreKey(phkResult, infile, REG_FORCE_RESTORE) > ERROR_SUCCESS then begin MsgBox('Ошибка доступа к реестру!', mbInformation, MB_OK); Exit; end;
  RegCloseKey(phkResult);
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then begin
RegBackupTofile(HKEY_LOCAL_MACHINE, 'Software\2345Pic', ExpandConstant('{tmp}\RegBackup.dat'), true);
RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\2345Pic_BackUp', ExpandConstant('{tmp}\RegBackup.dat'), true);
DeleteFile(ExpandConstant('{tmp}\RegBackup.dat')); end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then begin
RegBackupTofile(HKEY_LOCAL_MACHINE, 'Software\2345Pic_BackUp', ExpandConstant('{tmp}\RegBackup.dat'), true);
RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\2345Pic', ExpandConstant('{tmp}\RegBackup.dat'), true);
DeleteFile(ExpandConstant('{tmp}\RegBackup.dat'));
RegDeleteKeyIncludingSubkeys(HKLM, 'Software\2345Pic_BackUp'); end;
end;


Мой вариант
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[_code]
#define A = (Defined UNICODE) ? "W" : "A"
const
  SE_BACKUP_NAME = 'SeBackupPrivilege';
  SE_RESTORE_NAME = 'SeRestorePrivilege';

  TOKEN_QUERY = $8;
  TOKEN_ADJUST_PRIVILEGES = $20;
  SE_PRIVILEGE_ENABLED = $2;
  ERROR_SUCCESS = 0;
  KEY_WOW64_64KEY  =  $0100;
  MAXIMUM_ALLOWED = $02000000;
  REG_FORCE_RESTORE = $00000008;

type
  LUID = record
  LowPart: DWORD;
  HighPart: Longint;
  end;

  LUID_AND_ATTRIBUTES = record
  Luid: LUID;
  Attributes: DWORD;
  end;

  TOKEN_PRIVILEGES = record
  PrivilegeCount: DWORD;
  Privileges: array [0..0] of LUID_AND_ATTRIBUTES;
  end;

  REGSAM = DWORD;
  HKEY = LongWord;

function RegSaveKey(hKey: HKEY; lpFile: String; lpSecurityAttributes: Longint):longint; external 'RegSaveKey{#A}@advapi32.dll stdcall';
function RegOpenKeyEx(hKey: HKEY; lpSubKey: String; ulOptions: DWORD; samDesired: REGSAM; var phkResult: HKEY): Longint; external 'RegOpenKeyEx{#A}@advapi32.dll stdcall';
function RegCreateKeyEx(hKey: HKEY; lpSubKey: String; Reserved: DWORD; lpClass: String; dwOptions: DWORD; samDesired: REGSAM; lpSecurityAttributes: Longint; var phkResult: HKEY; var lpdwDisposition: DWORD): Longint; external 'RegCreateKeyEx{#A}@advapi32.dll stdcall';
function RegCloseKey(hKey: HKEY): Longint; external 'RegCloseKey@advapi32.dll stdcall';
function RegRestoreKey(hKey: HKEY; lpFile: String; lpSecurityAttributes: Longint):longint; external 'RegRestoreKey{#A}@advapi32.dll stdcall';

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetLastError(): DWORD; external 'GetLastError@Kernel32 stdcall';
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function NTSetPrivilege(sPrivilege: string; bEnabled: Boolean): Boolean;
var
  hToken: THandle;
  TokenPriv: TOKEN_PRIVILEGES;
  PrevTokenPriv: TOKEN_PRIVILEGES;
  ReturnLength: Cardinal;
  Version: TWindowsVersion;
  ret: Longint;
begin
  GetWindowsVersionEx(Version);
  if not Version.NTPlatform then Exit;

  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
  begin
  try
  if LookupPrivilegeValue('', PAnsiChar(sPrivilege), TokenPriv.Privileges[0].Luid) then
  begin
  TokenPriv.PrivilegeCount := 1;

  case bEnabled of
  True: TokenPriv.Privileges[0].Attributes  := SE_PRIVILEGE_ENABLED;
  False: TokenPriv.Privileges[0].Attributes := 0;
  end;
  ReturnLength := 0;
  PrevTokenPriv := TokenPriv;

  AdjustTokenPrivileges(hToken, False, TokenPriv, SizeOf(PrevTokenPriv), PrevTokenPriv, ret);
  end;
  finally
  CloseHandle(hToken);
  end;
  end;
  Result := GetLastError = ERROR_SUCCESS;
  if not Result then MsgBox(SysErrorMessage(GetLastError), mbInformation, MB_OK);
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure RegBackupTofile(intKey: HKEY; intSubKey, outfile: string; Wow32: BOOL);  //Процедура бэкапа ветки реестра в файл
//intKey - корневой раздел
//intSubKey - Путь к ветке реестра
//outfile - Имя бэкапа
//Wow32 - если true то вкл перенаправление Wow3264Node
var
  phkResult: HKEY;
begin
if not NTSetPrivilege(SE_BACKUP_NAME, true) then if MsgBox('Ошибка прав доступа!', mbInformation, MB_OK) = IDOK then Exit;
  if Wow32 then begin
  if RegOpenKeyEx(intKey, intSubKey, 0, MAXIMUM_ALLOWED, phkResult) > ERROR_SUCCESS then begin MsgBox('Ошибка чтения реестра!', mbInformation, MB_OK); Exit; end;
  end else if RegOpenKeyEx(intKey, intSubKey, 0, MAXIMUM_ALLOWED or KEY_WOW64_64KEY, phkResult) > ERROR_SUCCESS then begin MsgBox('Ошибка чтения реестра!', mbInformation, MB_OK); Exit; end;
  if RegSaveKey(phkResult, outfile, 0) > ERROR_SUCCESS then begin MsgBox('Ошибка сохранения файла!', mbInformation, MB_OK); Exit; end;
RegCloseKey(phkResult);
end;

procedure RegRestorefromfile(outKey: HKEY; outSubKey, infile: string; Wow32: BOOL);  //Процедура востановление реестра из файла, параметры по аналогии
var
  phkResult: HKEY;
  lpdwDisposition: DWORD;
begin
  if not FileExists(infile) then begin MsgBox('Файл не найден!', mbInformation, MB_OK); Exit; end;
  NTSetPrivilege(SE_BACKUP_NAME, true);
  NTSetPrivilege(SE_RESTORE_NAME, true);
  if Wow32 then begin
  if RegCreateKeyEx(outKey, outSubKey, 0, '', 0, MAXIMUM_ALLOWED, 0, phkResult, lpdwDisposition) > ERROR_SUCCESS then begin MsgBox('Ошибка записи в реестр!', mbInformation, MB_OK); Exit; end;
  end else if RegCreateKeyEx(outKey, outSubKey, 0, '', 0, MAXIMUM_ALLOWED or KEY_WOW64_64KEY, 0, phkResult, lpdwDisposition) > ERROR_SUCCESS then begin MsgBox('Ошибка записи в реестр!', mbInformation, MB_OK); Exit; end;
  if RegRestoreKey(phkResult, infile, REG_FORCE_RESTORE) > ERROR_SUCCESS then begin MsgBox('Ошибка доступа к реестру!', mbInformation, MB_OK); Exit; end;
  RegCloseKey(phkResult);
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// мой вариант
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
  begin //бэкап непосредственно перед установкой
    RegBackupTofile(HKEY_LOCAL_MACHINE, 'SOFTWARE\2345Pic', ExpandConstant('{app}\RegBackup.dat'), true); //сохраняем ключ 1
    RegBackupTofile(HKEY_LOCAL_MACHINE, 'SOFTWARE\Google', ExpandConstant('{app}\RegBackup_1.dat'), true); //сохраняем ключ 2
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
  begin
  RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\2345Pic', ExpandConstant('{app}\RegBackup.dat'), true); //восстанавливаем ключ 1
  RegRestorefromfile(HKEY_LOCAL_MACHINE, 'Software\Google', ExpandConstant('{app}\RegBackup_1.dat'), true); //восстанавливаем ключ 2
  DeleteFile(ExpandConstant('{app}\RegBackup.dat'));
  DeleteFile(ExpandConstant('{app}\RegBackup_1.dat'));
  end;
end;


Восстановить из файла RegBackup.dat и RegBackup_1.dat ничто не мешает, но хотелось бы некой эстетики и не плодить множество файлов *.dat.

Цитата:

Цитата R.i.m.s.k.y.
сделать кнопку проверки установщика по чексумме »

Т.е. зашифровать на основе MD5? Защита от распаковки?

nik1967 17-10-2015 07:45 2564746

R.i.m.s.k.y., ISMD5.

Stealthmax 17-10-2015 23:00 2565062

Тут как-то поднимали вопрос по поводу ключей командной строки, т.е. сделать их менее подробными и компактными.
Измененные ключи

/SILENT- /NS
/VERYSILENT- /S
/NOICONS- /NI
/DIR- /D
/SUPPRESSMSGBOXES- /SMB
/NOCANCEL- /NC
/NORESTART- /NR
/RESTARTEXITCODE- /REC
/NOCLOSEAPPLICATIONS- /NCA
/LANG- /L
/GROUP- /G
/TASKS- /T
/TYPE- /TP
/MERGETASKS- /MT
/PASSWORD- /PASS
/NORESTARTAPPLICATIONS- /NRA
/COMPONENTS- /C


Также убрана приставка _is1 при создании ключа деинсталляции в реестре.
Выкладываю 3 версии для Restools 5.5.1.ee2(u) (build 121216). Скопировать с заменой в папку, не забывайте про бэкап.
Setup.e32<-- без изменений деинсталлятора, т.е. имеет вид unins000.exe(стабильный вариант)
Setup.e32(with _is1)<-- без изменений деинсталлятора, возвращена приставка _is1
Setup.e32_(uninstall) <-- в этой версии деинсталлятор имеет вид uninstall.exe, но есть баг, при установке поверх выдает ошибку и откатывает установку.

El Sanchez 18-10-2015 10:38 2565143

Цитата:

Цитата Stealthmax
Возможно ли добавить бэкап в {uninstallexe} »

Stealthmax, через правку исходников, GetPreviousData/SetPreviousData, ADS.
Цитата:

Цитата Stealthmax
Тут как-то поднимали вопрос по поводу ключей командной строки, т.е. сделать их менее подробными и компактными. »

Stealthmax, и пытаться потом вспоминать значения этих параметров, рассматривая аббревиатуры до посинения? Длинный параметр есть слово/словосочетание английского языка, по значению которого можно понять чего параметр делает.
Цитата:

Цитата Stealthmax
Также убрана приставка _is1 при создании ключа деинсталляции в реестре. »

Stealthmax, программа установлена, хочу поставить вторую копию в другую папку, установщик перепишет новыми данными раздел без приставки, вместо того, чтобы прописаться в _is2.

Batistas 18-10-2015 14:25 2565242

Всем привет. Делаю сборку CS:S nosteam. Гуглил на просторах интернета скрипт, который сможет изменять ник и клан тэг в файле rev.ini. Нашёл, пришлось, правда, доделать ввод клантэга. Проблема в следующем: как заставить установщик по дефолту сохранять клантэг и ник в UTF-8 и убрать чекбокс "сохранить в UTF-8". Может кто подсказать решение проблемы? Скрипт прилагаю ниже. Заранее спасибо!

Код:

#ifndef UNICODE
    #error Unicode version of Inno Setup is required to compile this script
#endif

var
  RevEmuPage: TInputQueryWizardPage;
  ConvertCheckBox: TCheckBox;

procedure SetNickname(Nickname: String; Filename: String; IsConvert: Boolean);
var
    arrAnsi, arrUtf8: TArrayOfString;
    i: Integer;
begin
    if IsConvert then
    begin
        LoadStringsFromFile(Filename, arrAnsi);
        SetArrayLength(arrUtf8, 1);
        for i := 0 to GetArrayLength(arrAnsi)-1 do
        begin
            if Pos(LowerCase('PlayerName='), LowerCase(arrAnsi[i])) = 0 then
                SaveStringToFile(Filename, arrAnsi[i] + #13#10, i <> 0)
            else begin
                arrUtf8[0] := Copy(arrAnsi[i], 0, Length('PlayerName=')) + Nickname + #10;
                SaveStringsToUTF8File(Filename, arrUtf8, i <> 0);
            end;
        end;
    end else SetIniString('steamclient', 'PlayerName', Nickname, Filename);
end;

procedure SetClantag(Clantag: String; Filename: String; IsConvert: Boolean);
var
    arrAnsi, arrUtf8: TArrayOfString;
    i: Integer;
begin
    if IsConvert then
    begin
        LoadStringsFromFile(Filename, arrAnsi);
        SetArrayLength(arrUtf8, 1);
        for i := 0 to GetArrayLength(arrAnsi)-1 do
        begin
            if Pos(LowerCase('Clantag='), LowerCase(arrAnsi[i])) = 0 then
                SaveStringToFile(Filename, arrAnsi[i] + #13#10, i <> 0)
            else begin
                arrUtf8[0] := Copy(arrAnsi[i], 0, Length('Clantag=')) + Clantag + #10;
                SaveStringsToUTF8File(Filename, arrUtf8, i <> 0);
            end;
        end;
    end else SetIniString('steamclient', 'Clantag', Clantag, Filename);
end;

procedure NicknameOnChange (Sender: TObject);
begin
    WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
end;

procedure InitializeWizard();
begin
    RedesignWizardForm;

    RevEmuPage := CreateInputQueryPage(wpInfoAfter, 'Игровая информация', '', 'Пожалуйста, введите введите свой ник и Clan-tag и нажмите Далее.');
    with RevEmuPage do
    begin
        Add('Ник:', False);
        Edits[0].OnChange := @NicknameOnChange;
        Add('Клан-тэг:', False);
    end;
    ConvertCheckBox := TCheckBox.Create(WizardForm);
    with ConvertCheckBox do
    begin
        Parent := RevEmuPage.Surface;
        SetBounds(RevEmuPage.Edits[0].Left, RevEmuPage.Edits[0].Top + ScaleY(100), ScaleX(200), ScaleY(17));
        Caption := 'Сохранить в UTF-8';
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID = RevEmuPage.ID then WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
    if CurPageID = wpFinished then SetNickname(RevEmuPage.Values[0], ExpandConstant('{app}\rev.ini'), ConvertCheckBox.Checked);
    if CurPageID = wpFinished then SetClantag(RevEmuPage.Values[0], ExpandConstant('{app}\rev.ini'), ConvertCheckBox.Checked);
end;


Stealthmax 18-10-2015 20:37 2565432

Цитата:

Цитата El Sanchez
программа установлена, хочу поставить вторую копию в другую папку, установщик перепишет новыми данными раздел без приставки, вместо того, чтобы прописаться в _is2 »

Учту и верну данный параметр.
Цитата:

Цитата El Sanchez
Длинный параметр есть слово/словосочетание английского языка, по значению которого можно понять чего параметр делает »

Ну исходил как раз из того, чтоб 2-3 буквы было, не от "фонаря" само собой. /SILENT и /VERYSILENT, на мой взгляд, было извращением, как и прочие ключи вида "/XXXXXXXXXXXXXXX". Большинство разработчиков используют краткость для ключей командной строки, прикрепляя справку. А в целом, эти изменения рассчитаны на узкий круг пользователей.
Цитата:

Цитата El Sanchez
через правку исходников, GetPreviousData/SetPreviousData, ADS. »

А можно наглядный пример?

El Sanchez 19-10-2015 16:35 2565693

Цитата:

Цитата Stealthmax
А можно наглядный пример? »

Stealthmax, исходники в свободном доступе, разработчик заложил возможность добавления пользовательских данных в деинсталлятор. GetPreviousData/SetPreviousData для записи/чтения пользовательских данных (строковых) в реестре в разделе регистрации установщика, сериализировать данные в строку и SetPreviousData в RegisterPreviousData, см. справку. ADS (альтернативные потоки данных) будут работать только на NTFS. Пример:
Скрытый текст

Код:

var
 
Value: AnsiString;

  ...

  // запись
 
SaveStringToFile(ExpandConstant('{src}\test.txt:MyStream'), 'Text in MyStream', False);

  // чтение
 
LoadStringFromFile(ExpandConstant('{src}\test.txt:MyStream'), Value);


Я бы оставил как есть (запись бекапа во отдельный файл) или способ с GetPreviousData/SetPreviousData.
Цитата:

Цитата Batistas
как заставить установщик по дефолту сохранять клантэг и ник в UTF-8 и убрать чекбокс "сохранить в UTF-8" »

Batistas, узнаю свой г-код, сейчас бы я так написал:
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
DirExistsWarning=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
#ifndef UNICODE
  #error Unicode version of Inno Setup is required to compile this script
#endif
const
 
CP_UTF8 = 65001;

function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: Integer; lpMultiByteStr: AnsiString; cbMultiByte, lpDefaultChar: Integer; lpUsedDefaultChar: Longint): Integer; external 'WideCharToMultiByte@kernel32.dll stdcall';

var
 
RevEmuPage: TInputQueryWizardPage;

///////////////////////////////////////////////////
procedure RevEmuPageEditsOnChange(Sender: TObject);
begin
 
WizardForm.NextButton.Enabled := (RevEmuPage.Values[0] <> '');
end;

///////////////////////////
procedure InitializeWizard;
begin
 
RevEmuPage := CreateInputQueryPage(wpInfoAfter, 'Игровая информация', '', 'Пожалуйста, введите введите свой ник и Clan-tag и нажмите Далее.');
  with RevEmuPage do
  begin
   
Add('Ник:', False);
    Add('Клан-тэг:', False);
    Edits[0].OnChange := @RevEmuPageEditsOnChange;
  end;
end;

/////////////////////////////////////////////////////
function UTF8Encode(const Value: string): AnsiString;
var
 
Len: Integer;
begin
  if
Value = '' then Exit;
  Len := WideCharToMultiByte(CP_UTF8, 0, Value, -1, '', 0, 0, 0);
  if Len = 0 then Exit;
  Result := StringOfChar(#0, Len - 1);
  if WideCharToMultiByte(CP_UTF8, 0, Value, -1, Result, Len, 0, 0) = 0 then Exit;
end;

/////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer);
begin
  case
CurPageID of
   
RevEmuPage.ID:
      WizardForm.NextButton.Enabled := (RevEmuPage.Values[0] <> '');
    wpFinished:
      begin
       
SetIniString('steamclient', 'PlayerName', UTF8Encode(RevEmuPage.Values[0]), ExpandConstant('{app}\rev.ini'));
        SetIniString('steamclient', 'ClanTag', UTF8Encode(RevEmuPage.Values[1]), ExpandConstant('{app}\rev.ini'));
      end;
  end;
end;


Stealthmax 19-10-2015 16:52 2565700

Цитата:

Цитата El Sanchez
Я бы оставил как есть (запись бекапа во отдельный файл) »

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

Batistas 20-10-2015 09:49 2565952

Цитата:

Цитата El Sanchez
Batistas, узнаю свой г-код, сейчас бы я так написал:
Скрытый текст »

Да, это именно Ваш код. Спасибо большое за помощь!

palsn2000 20-10-2015 18:23 2566206

Доброго всем времени. Подскажите пожалуйста как добавить информацию из рег файла через секцию [_Run_] в скрытом режиме и без вопросов о добавлении из небезопасного источника.

Сразу оговорюсь, что секция реестра инно не подходит, так как цель моя заключается в следующем:
Делаю сборку программ (одной из которых является Notepad++) так вот этот Notepad++ интегрируется в проводник при помощи регистрируемой библиотеки, которая сама генерирует строку в реестре Edit with &Notepad++ и заменяет то, что пишет инно из секции реестра.
Вот я и хочу, добавить данные (заменить Edit with на Открыть с помощью) на этапе postinstall. или подскажите пожалуйста как это реализовать через секцию [_Code_]
Заранее спасибо.

TryRooM 21-10-2015 02:10 2566385

palsn2000, Пробуйте.
Скрытый текст
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then begin
if IsWin64 then
RegWriteStringValue(HKLM64, 'SOFTWARE\Classes\CLSID\{B298D29A-A6ED-11DE-BA8C-A68E55D89593}\Settings',  'Title', 'Открыть с помощью Notepad++')
end else begin
RegWriteStringValue(HKLM, 'SOFTWARE\Classes\CLSID\{B298D29A-A6ED-11DE-BA8C-A68E55D89593}\Settings',  'Title', 'Открыть с помощью Notepad++')
end;
end;


kalyanbi4 22-10-2015 16:35 2567022

Всем добрый день!
Подскажите пожалуйста - создаю дистрибутив - устанавливаю его. После установки в меню "Пуск" не появляется пункт с установленным ПО, а появится он только после установки другого дистрибутива или после перезагрузки ПК.
С чем может быть связано?

Painkiller 23-10-2015 14:10 2567341

Народ, тупой вопрос , в какой переменной находиться путь к %userprofile%?

El Sanchez 23-10-2015 14:29 2567343

Цитата:

Цитата Painkiller
Народ, тупой вопрос , в какой переменной находиться путь к %userprofile%? »

Painkiller, например, в {%USERPROFILE}

Painkiller 23-10-2015 14:38 2567351

Цитата:

Цитата El Sanchez
Painkiller, например, в {%USERPROFILE} »

Пробовал, получаю путь C:\Users\Mazahaka_lab\AppData\Roaming\uTorrent, а мне надо C:\Users\Mazahaka_lab\uTorrent

Dodakaedr 23-10-2015 14:40 2567353

Painkiller, Если так показать, разберетесь?
Код:

[setup]
appname=app
appvername=1.0
createappdir=no

[code]
const
CSIDL_PROFILE = $28;

procedure InitializeWizard();
var
s: string;
begin
s := GetShellFolderByCSIDL(CSIDL_PROFILE, false);
WizardForm.WelcomeLabel1.Caption := s+'\uTorrent';
end;


Dodakaedr 23-10-2015 14:49 2567360

Цитата:

Цитата Painkiller
Куда мне добавить ваш код ? »

Вот вам функция, добавляйте куда хотите
Код:

[setup]
appname=app
appvername=1.0
DefaultDirName={code:USERPROFILE}\uTorrent

[code]
const
CSIDL_PROFILE = $28;

function UserProfile(s:string): string;
begin
s := GetShellFolderByCSIDL(CSIDL_PROFILE, false);
  Result := s;
end;


Painkiller 23-10-2015 14:53 2567363

Цитата:

Цитата Dodakaedr
Вот вам функция, добавляйте куда хотите »

всё равно путь C:\Users\Mazahaka_lab\AppData\Roaming\uTorrent =((

Dodakaedr 23-10-2015 14:57 2567365

Цитата:

Цитата Painkiller
всё равно путь »

Исключено. Вы хоть примеры компилируете у себя?
Скрытый текст

Painkiller 23-10-2015 15:04 2567370

Цитата:

Цитата Dodakaedr
Исключено. Вы хоть примеры компилируете у себя? »

ваш пример работает , а вот мой увы нет =( Ладно , как всегда разберусь сам

Dodakaedr 23-10-2015 15:06 2567371

Цитата:

Цитата Painkiller
ваш пример работает , а вот мой увы нет »

Интересно, что там может не работать?!

Batistas 24-10-2015 11:06 2567617

Всем привет. Решил установить ISWin7 в свой скрипт, но не тут-то было:



Как видно, в прозрачную область не попали: ссылка на сайт, кастомная кнопка и BeveledLabel. Может кто подсказать, как это исправить? Код ниже. Заранее спасибо!

Код:

#define MyAppURL "http://yandex.ru/"

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma
SolidCompression=yes
OutputDir=.

[Messages]
BeveledLabel=2015 © тест

[CustomMessages]
russian.InfoButton=Автор...
russian.InfoButtonText=© 2015. тест
russian.Community=Посетить наш сайт

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

[Files]
Source: iswin7.dll; Flags: dontcopy

[_Code_]
var
        InfoButton: TNewButton;
  PublisherLink: TNewStaticText;

/////////////////////////////////////////////
procedure InfoButtonClick(Sender: TObject);
begin
  MsgBox(ExpandConstant('{cm:InfoButtonText}'), mbInformation, MB_OK);
end;

/////////////////////////////////////////////
procedure PublisherLinkClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', ExpandConstant('{#MyAppURL}'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

/////////////////////////////////////////////
procedure iswin7_add_glass(Handle:HWND; Left, Top, Right, Bottom : Integer; GDIPLoadMode: boolean);
external 'iswin7_add_glass@files:iswin7.dll stdcall';

procedure iswin7_add_button(Handle:HWND);
external 'iswin7_add_button@files:iswin7.dll stdcall';

procedure iswin7_free;
external 'iswin7_free@files:iswin7.dll stdcall';

/////////////////////////////////////////////
procedure RedesignWizardForm;
begin
  InfoButton := TNewButton.Create(WizardForm);
  with InfoButton do
  begin
    Parent := WizardForm;
    Caption := ExpandConstant('{cm:InfoButton}');
    SetBounds(ScaleX(10), ScaleY(327), ScaleX(75), ScaleY(23));
    OnClick := @InfoButtonClick;
  end;
  PublisherLink := TNewStaticText.Create(WizardForm);
  with PublisherLink do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(95), ScaleY(333), ScaleX(75), ScaleY(23));
    Caption := ExpandConstant('{#MyAppURL}');
    Cursor := crHand;
    Font.Color := clBlue;
    ShowHint := True;
    Hint := ExpandConstant('{cm:Community}');
    OnClick := @PublisherLinkClick;
  end;
end;

/////////////////////////////////////////////
procedure InitializeWizard();
begin
  RedesignWizardForm;
 
  // Необходимо добавлять каждую кнопку расположенную на стекле
  // до инициализации стекла для того что бы не было дыр ))
  iswin7_add_button(WizardForm.BackButton.Handle);
  iswin7_add_button(WizardForm.NextButton.Handle);
  iswin7_add_button(WizardForm.CancelButton.Handle);
  // Параметр True не трогать он для htuos ))
  iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);
end;

procedure DeinitializeSetup();
begin
  iswin7_free;
end;


kotyarko@fb 24-10-2015 11:22 2567619

Цитата:

Цитата Batistas
Как видно, в прозрачную область не попали: ссылка на сайт »

Вместо TNewStaticText создайте TLabel, у него есть свойство Transparent, используйте его.

Цитата:

Цитата Batistas
Как видно, в прозрачную область не попали: кастомная кнопка »

Код:

iswin7_add_button(InfoButton.Handle);
Цитата:

Цитата Batistas
Как видно, в прозрачную область не попали: BeveledLabel »

Здесь то же, что и со ссылкой на сайт. BeveledLabel - это TNewStaticText, создайте на его месте TLabel, а дальше всё то же самое, что я описал выше.

Batistas 24-10-2015 11:44 2567625

Цитата:

Цитата kotyarko@fb
Цитата Batistas:
Как видно, в прозрачную область не попали: ссылка на сайт »
Вместо TNewStaticText создайте TLabel, у него есть свойство Transparent, используйте его. »

Если не сложно, скиньте код. У меня при добавлении PublisherLink: TLabel; ссылка становится невидимой.

kotyarko@fb 24-10-2015 18:36 2567735

Цитата:

Цитата Batistas
У меня при добавлении PublisherLink: TLabel; ссылка становится невидимой. »

Да, есть такое. Видимо, библиотека просто не рассчитана.

habib2302 24-10-2015 22:12 2567792

Как определить на какой диск была установлена программа и внести в реестр?



P.S. все нашел код.

vadjliss 25-10-2015 14:13 2567958

парни как прописать ярлыки имеется программа на рабочий стол надо 4 ярлыка вывести как сделать?

Nordek 25-10-2015 15:10 2567974

vadjliss, Как это читать? Знаки препинания где?

Цитата:

Цитата vadjliss
парни как прописать ярлыки имеется программа на рабочий стол надо 4 ярлыка вывести как сделать? »

Код:

[Icons]
Name: {userdesktop}\Ярлык к Программе 1; Filename: {app}\MyProg.exe
Name: {userdesktop}\Ярлык к Программе 2; Filename: {app}\MyProg.exe
Name: {userdesktop}\Ярлык к Программе 3; Filename: {app}\MyProg.exe


vadjliss 25-10-2015 16:06 2567985

:clapping: Nordek
спасибо!
всё работает

Batistas 25-10-2015 22:34 2568087

Всем привет! Таки доделываю скрипт для сборки CS:S, но столкнулся с одним нюансом при установке на Windows 8:



Этот файл запускается после завершения установки

Код:

Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Если запускать от имени администратора, то эта ошибка исчезает. Вопрос: можно ли посредством манипуляций в скрипте это исправить?
_________________________________

Второй глюк. Ниже код создания ярлыков:

Код:

[Icons]
Name: "{group}\Запустить {#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\Сайт сообщества"; Filename: "{#MyAppURL}"
Name: "{group}\Удалить сборку"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

При первой установке на Windows 8 не появляется ярлык удалить в метро-меню. Во время повторной установки в ту же папку - появляется. Парадокс...

palsn2000 27-10-2015 19:16 2568793

Здравствуйте уважаемые форумчане.

У меня такой вопрос - имеется кусок скрипта со слайдшоу для препроцессора:
Код
Код:

[Files]                                     
  ; Файлы заставки
Source: SlideShou\*; DestDir: {tmp}; Flags: dontcopy deleteafterinstall noencryption nocompression;
Source: J:\Soft\ISS\Resource\isgsg_0.6.0.69.dll; DestDir: {tmp}; DestName: isgsg.dll; Flags: dontcopy deleteafterinstall noencryption nocompression overwritereadonly

[-Code-]
//Слайд шоу
const
  Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PAnsiChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard4();
begin
  ssInitialize(GetWindowLong(MainForm.Handle,-8),8,False,1,$FF000000);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssInstall then begin
    ExtractTemporaryFile('Screen (1).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (1).jpg');
    ExtractTemporaryFile('Screen (2).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (2).jpg');
    ExtractTemporaryFile('Screen (3).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (3).jpg');
    ExtractTemporaryFile('Screen (4).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (4).jpg');
    ExtractTemporaryFile('Screen (5).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (5).jpg');
    ExtractTemporaryFile('Screen (6).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (6).jpg');
    ExtractTemporaryFile('Screen (7).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (7).jpg');
    ExtractTemporaryFile('Screen (8).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (8).jpg');
    ExtractTemporaryFile('Screen (9).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (9).jpg');
    ExtractTemporaryFile('Screen (10).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (10).jpg');
    ExtractTemporaryFile('Screen (11).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (11).jpg');
    ExtractTemporaryFile('Screen (12).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (12).jpg');
    ExtractTemporaryFile('Screen (13).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (13).jpg');
    ExtractTemporaryFile('Screen (14).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (14).jpg');
    ExtractTemporaryFile('Screen (15).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (15).jpg');
    ExtractTemporaryFile('Screen (16).jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\Screen (16).jpg');
    ssStartShow;
  end;
  if CurStep=ssPostInstall then ssStopShow;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
  if CurPageID=wpInstalling then begin
    WizardForm.MainPanel.Visible:=False;
    WizardForm.Bevel1.Visible:=False;
    WizardForm.Width:=ScaleX(395);
    WizardForm.Height:=ScaleY(142);
    WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
    WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
    WizardForm.InnerNotebook.Left:=ScaleX(10);
    WizardForm.InnerNotebook.Top:=ScaleY(10);
    WizardForm.InnerNotebook.Width:=ScaleX(370);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(20);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(40);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(154);
    WizardForm.CancelButton.Top:=ScaleY(80);
  end;
  if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
    if WizardForm.Width<>502 then begin
      WizardForm.Visible:=False;
      WizardForm.Width:=ScaleX(502);
      WizardForm.Height:=ScaleY(392);
      WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
      WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
      WizardForm.MainPanel.Visible:=True;
      WizardForm.Bevel1.Visible:=True;
      WizardForm.InnerNotebook.Left:=ScaleX(40);
      WizardForm.InnerNotebook.Top:=ScaleY(72);
      WizardForm.InnerNotebook.Width:=ScaleX(417);
      WizardForm.Visible:=True;
    end;
  end;
end;

procedure DeinitializeSetup3();
begin
  ssDeInitialize;
end;



Так вот можно ли каким-нибудь образом организовать автоматическое создание списка изображений (циклом или ещё как) в зависимости от количества файлов в папке, чтобы если
Source: SlideShou\* содержит 15 изображений то
ExtractTemporaryFile('Screen (1).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (1).jpg');
.......

ExtractTemporaryFile('Screen (15).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (15).jpg');
ssStartShow;

а если содержит 30 изображений то
ExtractTemporaryFile('Screen (1).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (1).jpg');
.......

ExtractTemporaryFile('Screen (30).jpg');
ssAddImage(ExpandConstant('{tmp}')+'\Screen (30).jpg');
ssStartShow;

El Sanchez 28-10-2015 19:56 2569158

Цитата:

Цитата palsn2000
Так вот можно ли каким-нибудь образом организовать автоматическое создание списка изображений (циклом или ещё как) в зависимости от количества файлов в папке »

palsn2000,
Скрытый текст

Код:

try
  while
True do
  begin
   
ExtractTemporaryFile(Format('Screen (%d).jpg', [i + 1]));
    ssAddImage(ExpandConstant(Format('{tmp}\Screen (%d).jpg', [i + 1])));
    i := i + 1;
  end;
except
 
{ no exception }
finally
  if
i > 0 then
   
ssStartShow;
end;


palsn2000 28-10-2015 21:45 2569196

El Sanchez, Спасибо за пример, только вот, даже стыдно в этом признаваться, у меня проблема типа unknown identifier 'i' :blush:
когда указываю в константах i = 0; - ругается на строке i := i + 1;
когда в Var - ошибка с двоеточием.

kotyarko@fb 29-10-2015 09:25 2569295

Цитата:

Цитата palsn2000
меня проблема типа unknown identifier 'i'
когда в Var - ошибка с двоеточием. »

Что значит "ошибка с двоеточием"? Скриншот бы привели.
Объявление переменной выглядит так (это вы должны знать чуть-ли не в первую очередь):
Код:

Var
 I: Integer;


palsn2000 29-10-2015 11:08 2569329

kotyarko@fb, Ошибка с двоеточием у меня была когда я в Var пытался занести i: 0; - потому, что при i: Integer; у меня выскакивает окошко с сообщением "Identifier expected." на строке procedure CurPageChanged2(CurPageID: Integer);

kotyarko@fb 29-10-2015 12:51 2569369

Цитата:

Цитата palsn2000
Ошибка с двоеточием у меня была когда я в Var пытался занести i: 0; »

Конечно ошибка, здесь переменная так не объявляется.

Цитата:

Цитата palsn2000
потому, что при i: Integer; у меня выскакивает окошко с сообщением "Identifier expected." на строке procedure CurPageChanged2(CurPageID: Integer); »

Скрин, хотя бы?

palsn2000 29-10-2015 16:01 2569439

kotyarko@fb, Чтобы не быть голословным решил скинуть пример (пришлось всё слепить в одну папку для удобства)

Выкладываю архив Скрипт.zip с набором файлов для примера (для компиляции использую расширенную версию Ansi от restools с препроцессором)

17 и 18 строки:

//#include "Soft\ISS\Code\5_Слайдшоу_IW4_DS3_CPC2.iss" ;;;; IW4 DS3 CPC2 --> изначальный вариант (работает, но приходится вручную править список файлов в зависимости от их количества)
#include "Soft\ISS\Code\6_Слайдшоу_IW4_DS3_CPC2.iss" ;;;; IW4 DS3 CPC2 --> вариант, предложенный El Sanchez (тут я не могу разобраться с параметром i - отсюда, видимо, и возникают ошибки).

kotyarko@fb 29-10-2015 21:10 2569548

Вложений: 1
palsn2000, "Soft\ISS\Code\6_Слайдшоу_IW4_DS3_CPC2.iss": в процедуре CurStepChanged не закрыты операторные скобки (не хватает одного end).

Работоспособность скрипта проверить не удалось, скрин прикреплён.

з.ы. не захватывайте букву диска, когда указываете пути к файлам. Путь достаточно указывать от папки, лежащей на уровне с основным скриптом.

nik1967 29-10-2015 21:19 2569552

palsn2000, end; пропустил в 6_Слайдшоу_IW4_DS3_CPC2.iss.
читать дальше »
Код:

[Files]                                     
  ; Файлы заставки
Source: SlideShou\*; DestDir: {tmp}; Flags: dontcopy deleteafterinstall noencryption nocompression;
Source: Soft\ISS\Resource\isgsg_0.6.0.69.dll; DestDir: {tmp}; DestName: isgsg.dll; Flags: dontcopy deleteafterinstall noencryption nocompression overwritereadonly

[Code]
//Слайд шоу
var
I : Integer;

const
 
Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PAnsiChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard4();
begin
 
ssInitialize(GetWindowLong(MainForm.Handle,-8),8,False,1,$FF000000);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if
CurStep=ssInstall then begin
try
  while
True do
  begin
   
ExtractTemporaryFile(Format('Screen (%d).jpg', [i + 1]));
    ssAddImage(ExpandConstant(Format('{tmp}\Screen (%d).jpg', [i + 1])));
    i := i + 1;
  end;
except {no exception}
finally
  if
i > 0 then
   
ssStartShow;
end;
  if CurStep=ssPostInstall then ssStopShow;
end;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
  if
CurPageID=wpInstalling then begin
   
WizardForm.MainPanel.Visible:=False;
    WizardForm.Bevel1.Visible:=False;
    WizardForm.Width:=ScaleX(395);
    WizardForm.Height:=ScaleY(142);
    WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
    WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
    WizardForm.InnerNotebook.Left:=ScaleX(10);
    WizardForm.InnerNotebook.Top:=ScaleY(10);
    WizardForm.InnerNotebook.Width:=ScaleX(370);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(20);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(40);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(154);
    WizardForm.CancelButton.Top:=ScaleY(80);
  end;
  if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
    if
WizardForm.Width<>502 then begin
     
WizardForm.Visible:=False;
      WizardForm.Width:=ScaleX(502);
      WizardForm.Height:=ScaleY(392);
      WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
      WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
      WizardForm.MainPanel.Visible:=True;
      WizardForm.Bevel1.Visible:=True;
      WizardForm.InnerNotebook.Left:=ScaleX(40);
      WizardForm.InnerNotebook.Top:=ScaleY(72);
      WizardForm.InnerNotebook.Width:=ScaleX(417);
      WizardForm.Visible:=True;
    end;
  end;
end;

procedure DeinitializeSetup3();
begin
 
ssDeInitialize;
end;


С помощью какого тэга сделать код inno разноцветным?
Хе, опоздал. Ну и ладно, пусть будет. Я кстати тоже замаялся J:\ отрезать. Кстати, папка в temp не удаляется - остаётся Screen (3).jpg

kotyarko@fb 29-10-2015 21:34 2569556

Цитата:

Цитата nik1967
С помощью какого тэга сделать код inno разноцветным? »

Глобальный переключатель находится в меню Tools>Editor Options...>Options>Use syntax highlighting.
Конкретно цвета в: Tools>Editor Options...>Script colors \ [code] colors.

kotyarko@fb 29-10-2015 22:08 2569566

Цитата:

Цитата nik1967
да я про местный форум интересовался. Как здесь это сделать. »

Как и везде, только форматом bb-кодов: [*code][/code] (без "*").

Dodakaedr 29-10-2015 22:20 2569569

nik1967,
Скрытый текст
;#define Video
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
WizardImageFile=Fon.bmp
OutputBaseFilename=2

[Files]
Source: compiler:Dll Pack\IsPicture_for_all.dll; Flags: dontcopy
Source: Fon.bmp; Flags: dontcopy
#ifdef Video
Source: XVID\fon.avi; Flags: dontcopy
#endif


[code]
//-----------------------------------------
procedure Initialize(AhWnd,BhWnd:hWnd);external 'Initialize@{tmp}\IsPicture_for_all.dll stdcall delayload';
// Здесь указываем хендлы окон, на данный момент, лучше пока указывать
// WizardForm.Handle - первым и MainForm.Handle вторым.
//-----------------------------------------
procedure XvidVideo(fn:String;Seth:string);external 'XvidVideo@{tmp}\IsPicture_for_all.dll stdcall delayload';
// Эта процедура загружает фоновое avi-видео.
// Seth - задаем координаты через пробел в одинарных кавычках
// пример: XvidVideo(ExpandConstant('{tmp}\fon.avi'), '351 201 236 132');
//-----------------------------------------
procedure Deinitialize;external 'Deinitialize@{tmp}\IsPicture_for_all.dll stdcall delayload';
// отменяет свзывание форм между собой, выгружает видео.

//-----------------------------------------
function NewFont(Height:Integer;thickness,italic,underline,strikeout:DWORD;name:String):hWnd;external 'NewFont@{tmp}\IsPicture_for_all.dll stdcall delayload';
// Создает шрифты для замены стандартных. Необходима для борьбя с артефактами сглаживания.
// Height, // высота шрифта
// thickness, // насыщенность шрифта
// italic, // курсив
// underline, // Подчеркнутый
// strikeout, // Зачеркнутый
// name // имя шрифта
//-----------------------------------------
procedure SplashWnd(FileName:PAnsiChar;Time,width,height:Integer);external 'SplashWnd@{tmp}\IsPicture_for_all.dll stdcall delayload';
// Создает Splash-заставку
// Прозрачность, пока, не поддерживается
// FileName, // имя файла
// Time, // скорость появления в миллисекундах
// width, // ширина
// height, // высота
procedure EndSplash(Time1,Time2:Integer);external 'EndSplash@{tmp}\IsPicture_for_all.dll stdcall delayload';
// Закрываем Splash-заставку
// Time1, // выжидание до закрытия в миллисекундах
// Time, // скорость закрытия в миллисекундах
//-----------------------------------------
//-----------------------------------------


Скрытый текст

Dodakaedr 29-10-2015 22:25 2569572

nik1967, расширенная от restools или вручную "все делать"
Цитата:

Цитата nik1967
Но здесь на форуме явно какой-то свой тэг есть. »

Ссылочка Теги форума над полем комментария (быстрый ответ)

palsn2000 29-10-2015 22:27 2569575

Вложений: 1
kotyarko@fb, извините, за пути к файлам с буквой диска - основной скрипт исправил, а про блоки кода, подхватываемые препроцессором забыл.
J:\Soft\ISS\Resource\btnimage.bmp -- > это в данном случае должно было быть Soft\ISS\Resource\btnimage.bmp

На всякий случай исправил и перепаковал архив -- может быть кому-то пригодится для примера.

Nordek 30-10-2015 00:27 2569600

nik1967, "Правая кнопка мыши » Копировать как UBB код."
Данный пункт доступен на уровне расширенной версии Inno.

Цитата:

Цитата Dodakaedr

Только для начала нужно сделать следующее:
"Инструменты » Настройки редактора » Копирование текста"
Поставьте флажок напротив "Использовать тег [code]"
Для того, чтоб вместо тега цитаты [quote][/quote]
Цитата:

[Setup]
AppName=My Program
AppVersion=1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

был задействован тег [code][/code]
Код:

[Setup]
AppName=My Program
AppVersion=1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

Далее снимите флажки с "Вставлять имя файла" и "Вставлять время создания"

Для того, чтоб исключить из заголовка "Имя_скрипта.iss, Дата и время".
Цитата:

Цитата Имя_скрипта.iss, Дата и время
[Setup]
AppName=My Program

т.е
Цитата:

[Setup]
AppName=My Program


"имя.iss, дата и время" допустимо для тега [quote][/quote]
Цитата:

Цитата Inno Setup Script.iss,29.10.2015 23:15:35
[Setup]
AppName=My Program
AppVersion=1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

но не для тега [code][/code] т.к получится нелепая обработка.
При добавлении в сообщение вы сами заметите:
[code= Inno Setup Script.iss,29.10.2015 23:15:35 ][Setup]
AppName=My Program
AppVersion=1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[/code]




Далее:
В одном случае по желанию: Т.е дополнительная обработка, а именно:
В начале удаление [font=Courier New][color=#000000], в конце удаление [/color][/font].
В первом случае шрифт в теге [code][/code] ненужен: По-умолчанию используется шрифт HTML тега <pre></pre>
Во втором случае цвет (чёрный), цвет без тега чёрный.
В другом случае [Сode] не жирный как в редакторе Inno, либо вовсе повторяет код форума.
В лучшем случае если в тег [Сode] будет добавлен дополнительный тег [color=none][/color], т.е: [color=none][[/color]Code], иначе самостоятельное указание [Co[u][/u]de] чтоб не сливался тег [code][/code] c секцией [code] из скрипта.

habib2302 01-11-2015 10:07 2570298

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

[Run]
Filename: {app}\USBSRService.exe; Parameters: "/loadsettings {src}\Settings.opt"; Flags: RunHidden;


Dodakaedr 01-11-2015 10:22 2570305

Цитата:

Цитата habib2302
Как сделать, если отсутствует файл »

Сделай проверку на файл
Код:

[Run]
Filename: {app}\USBSRService.exe; Parameters: "/loadsettings {src}\Settings.opt"; Check: FileExists('{src}\Settings.opt'); Flags: RunHidden;


habib2302 01-11-2015 11:34 2570323

Dodakaedr, только почему-то из-за этой проверки не срабатывает команда, но при этом файл лежит рядом с инстайллом
Код:

[Run]
Filename: {app}\{#Exe}; Parameters: "/loadsettings ""{src}\USBSafelyRemoveSettings.opt"""; Check: FileExists('{src}\USBSafelyRemoveSettings.opt');


nik1967 01-11-2015 12:42 2570350

habib2302, а точно с инсталлятором, т.е. Setup.exe? По умолчанию данный файл создаётся в папке Output. Что бы Setup.exe создавался в той же папке, где запущен скрипт, в секции [Setup] нужно прописать OutputDir=. Т.е.
Код:

[Setup]
OutputDir=.


habib2302 01-11-2015 13:02 2570367

nik1967, я просто для проверки работает ли эта команда убрал проверку и сработало. а файл с настройками лежит в папке \Output радом с инсталлятором

Скрытый текст
Код:

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "USB Safely Remove"
#define MyAppVersion "5.3.8.1233"
#define Exe "USBSafelyRemove.exe"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} RePack by Pilot
SetupIconFile=ico.ico
Compression=lzma2/Ultra64
InternalCompressLevel=Ultra64
SolidCompression=true
ShowLanguageDialog=yes
UninstallDisplayIcon={uninstallexe}
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Pilot
AppCopyright=Pilot © 2015
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Pilot © 2015
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
DisableProgramGroupPage=yes
InfoBeforeFile=Info.rtf
DisableWelcomePage=true
RestartIfNeededByRun=false

[Languages]
Name: "R"; MessagesFile: "Russian.isl"
Name: "E"; MessagesFile: "English.isl"
Name: "U"; MessagesFile: "Ukrainian.isl"

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Tasks]
Name: ic; Description: {cm:AdditionalIcons}; Components: USBSR\I;
Name: ic\desktop; Description: {cm:CreateDesktopIcon}; Components: USBSR\I;
Name: ic\group; Description: {cm:CreateStartMenuIcon}; Components: USBSR\I;
Name: ic\quicklaunch; Description: {cm:CreateQuickLaunchIcon}; OnlyBelowVersion: 0,6.1; Components: USBSR\I; Flags: unchecked
Name: ic\taskbar; Description: {cm:PinTaskbarIcon}; MinVersion: 0.0,6.1.7600; Components: USBSR\I; Flags: unchecked
Name: ic\startmenu; Description: {cm:PinStartMenuIcon}; MinVersion: 0.0,6.1.7600; Components: USBSR\I; Flags: unchecked

[Components]
Name: USBSR; Description: {#MyAppName}; Flags: fixed disablenouninstallwarning; Types: full;
Name: USBSR\I; Description: Установить {#MyAppName}; Flags: exclusive disablenouninstallwarning

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
Source: bat.exe; Flags: dontcopy;
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: x64\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsWin64;
Source: x86\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not IsWin64;

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#Exe}; Components: USBSR\I; Tasks: ic\group;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; Components: USBSR\I; Tasks: ic\group;
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#Exe}; Components: USBSR\I; Tasks: ic\desktop;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#Exe}; Components: USBSR\I; Tasks: ic\quicklaunch;

[Run]
Filename: {app}\USBSRService.exe; Parameters: "/install /silent"; Flags: RunHidden;
Filename: {app}\USBSafelyRemove.exe; Parameters: "/loadsettings ""{src}\USBSafelyRemoveSettings.opt"""; Check: FileExists('{src}\USBSafelyRemoveSettings.opt');
Filename: "http://repackbypilot.blogspot.com"; Description: Посетить сайт автора.; Flags: shellexec nowait postinstall skipifsilent unchecked

[Registry]
Root: HKCU; Subkey: Software\Microsoft\Windows\CurrentVersion\Run; ValueName: USB Safely Remove; ValueData: {app}\{#Exe} /startup; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers; ValueName: {app}\{#Exe}; ValueType: String; ValueData: DisableNXShowUI; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\NoExecuteState; ValueName: LastNoExecuteRadioButtonState; ValueType: Dword; ValueData: "$36BD"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers; ValueName: {app}\{#Exe}; ValueType: String; ValueData: DisableNXShowUI; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\SafelyRemove\Options; ValueType: string; ValueName: LangFileName; ValueData: Russian; Languages: R; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\SafelyRemove\Options; ValueType: string; ValueName: LangFileName; ValueData: English; Languages: E; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\SafelyRemove\Options; ValueType: string; ValueName: LangFileName; ValueData: Ukrainian; Languages: U; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; Subkey: Software\SafelyRemove\Main; ValueName: FirstRunDT; MinVersion: 0.0,5.0; Flags: deletevalue
Root: HKCU; Subkey: Software\SafelyRemove\Main; ValueName: RunCount; MinVersion: 0.0,5.0; Flags: deletevalue
Root: HKCU; Subkey: Software\SafelyRemove\Stat; ValueName: StatString; MinVersion: 0.0,5.0; Flags: deletevalue
Root: HKCU; Subkey: Software\SafelyRemove\Main; ValueName: TotalRunSeconds; MinVersion: 0.0,5.0; Flags: deletevalue
Root: HKCU; Subkey: Software\SafelyRemove\Main; ValueName: FirstRunDTRaw; MinVersion: 0.0,5.0; Flags: deletevalue

[UninstallRun]
Filename: sc.exe; Parameters: "stop USBSafelyRemoveService"; Flags: RunHidden;
Filename: taskkill; Parameters: "/f /im USBSafelyRemove.exe"; Flags: RunHidden;
Filename: taskkill; Parameters: "/f /im USBSRService.exe"; Flags: RunHidden;
Filename: {app}\USBSRService.exe; Parameters: "/uninstall /silent"; Flags: RunHidden;

[Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

#define A = (Defined UNICODE) ? "W" : "A"

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA            = 10;
  LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;
 
///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:=False;
end;

function InitializeSetup(): Boolean;
var ResultCode:integer;
begin
 ExtractTemporaryFile('bat.exe')
  if FileExists (ExpandConstant('{tmp}\bat.exe')) then
  Exec(ExpandConstant('{tmp}\bat.exe'), '', '', SW_SHOW,ewWaitUntilTerminated, ResultCode);
 result:=true;
end;

procedure InitializeWizard;
begin
  with WizardForm do
  begin
///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') then
    begin
///////////////////////////////////Изображения
            bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
            WizardBitmapImage2.Hide;
            ImgSetVisibility(bPicHandle, True);
            ImgApplyChanges(FinishedPage.Handle);

            lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
            WizardSmallBitmapImage.Hide;
            ImgSetVisibility(lPicHandle, True);
            ImgApplyChanges(MainPanel.Handle);
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
////////////////////////////////////////////

///////////////////////////////////Логотип

      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(118), ScaleY(35), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(320), ScaleX(118), ScaleY(35));
    end;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID =wpSelectComponents)then
  Result:= True;
end;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to executable file
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

    { String resources }
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        res := 5386;        { Pin to Tas&kbar }
    end else res := 5387;  { Unpin from Tas&kbar }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

/////////////////////////////////////////////////////////////////////////
function PinToStartMenu(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to exe- or lnk-file
// IsPin......: False - unpin from StartMenu, True - pin to StartMenu
var
    hInst: THandle;
    buf: array [0..259] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if not FileExists(szFilename) then Exit;
    if GetWindowsVersion > $06020000 then Exit; { Window 8 and above }

    { Windows 7 }
    if (GetWindowsVersion >= $06010000) and boolean(SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0)) then
    begin
        while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
        if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\') + ExtractFileName(strLnk)) then Exit;
    end;

    { String resources }
    if IsPin then
        res := 5381    { Pin to Start Men&u }
    else
        res := 5382;    { Unpin from Start Men&u }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');

            { below Windows 7 }
            if GetWindowsVersion < $06010000 then
            begin
                objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).InvokeVerb(strVerb);
                Result := True;
            end;

            { Windows 7 }
            if GetWindowsVersion >= $06010000 then
            begin
                colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
                for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
                begin
                    colVerbs.Item[i].DoIt;
                    Result := True;
                    Break;
                end;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
      wpFinished:
        begin
      if IsTaskSelected('ic\taskbar') then
        PinToTaskbar(ExpandConstant('{app}\{#Exe}'), True);
      if IsTaskSelected('ic\startmenu') then
        PinToStartMenu(ExpandConstant('{app}\{#Exe}'), True);
    end;
  wpSelectTasks:
  if IsComponentSelected('USBSR\I') then
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  end;
 end;

procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;

procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
    begin
///////////////////////////////////Логотип и изображения мастера
      if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
      begin
///////////////////////////////////Изображения
        lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
        WizardSmallBitmapImage.Hide;
        ImgSetVisibility(lPicHandle, True);
        ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
        lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(118), ScaleY(35), True, True);
        ImgApplyChanges(UninstallProgressForm.Handle);
      end;

    with TLabel.Create(nil) do
    begin
      Parent:=UninstallProgressForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(320), ScaleX(118), ScaleY(35));
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall:
      begin
      PinToTaskbar(ExpandConstant('{app}\{#Exe}'), False);
      PinToStartMenu(ExpandConstant('{app}\{#Exe}'), False);
end;
 end;
  end;

procedure DeinitializeUninstall();
begin
  if iInitialize then gdipShutdown;
end;

[UninstallDelete]
Name: {app}; Type: filesandordirs;

[Messages]
BeveledLabel=RePack by Pilot


Dodakaedr 01-11-2015 13:49 2570380

Цитата:

Цитата habib2302
только почему-то из-за этой проверки не срабатывает команда, но при этом файл лежит рядом с инстайллом »

Ну а чуть подумать?
Код:

[Run]
Filename: {app}\{#Exe}; Parameters: "/loadsettings ""{src}\USBSafelyRemoveSettings.opt"""; Check: FileExists(ExpandConstant('{src}\USBSafelyRemoveSettings.opt'));


habib2302 01-11-2015 14:02 2570383

Dodakaedr, сори... не обратил внимания

ZVSRus 04-11-2015 12:07 2571448

Dodakaedr,
Есть код возвращения исходного пути установки и распаковки, не могу найти где ошибка.
Помогите исправить.

Сам код:
procedure dirBackClick(Sender: TObject);
begin
Edit.Text:=AddBackslash(ExpandConstant('{pf}\')+'ACD Systems');
DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{pf}\')), True);
if Portable.Checked then
Edit.Text:=(ExpandConstant('{src}\')+'ACDSeePortable');
DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{src}\')), True);
end;

Dodakaedr 04-11-2015 14:38 2571518

ZVSRus, где (как) вы используете процедуру dirBackClick?

ZVSRus 04-11-2015 17:56 2571591

Используется в function InitializeSetup(): Boolean;

Dodakaedr 04-11-2015 18:18 2571597

Цитата:

Цитата ZVSRus
Используется в function InitializeSetup(): Boolean; »

уже не правильно! Покажите ваш скрипт.

ZVSRus 04-11-2015 18:34 2571606

Вот весь скрипт
Скрытый текст

#define MyAppName "Almeza MultiSet Professional"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DirExistsWarning=no
Uninstallable=not PortableCheck
WizardImageFile=1.bmp
WizardSmallImageFile=57x57.bmp
ShowComponentSizes=yes
SetupIconFile=1.ico
OutputBaseFilename=ACDSee5_Setup
;AppSupportPhone=
AppCopyright=Copyright (C) 2003-2015 My Company, Inc.
;AppPublisher=My Company, Inc.
;AppPublisherURL=http://www.example.com/
OutputDir=.
DisableReadyPage=yes


[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"

[Files]
Source: rus.bmp; Flags: dontcopy solidbreak
Source: eng.bmp; Flags: dontcopy solidbreak
Source: Installer.bmp; Flags: dontcopy solidbreak
Source: Portable.bmp; Flags: dontcopy solidbreak

Source: "C:\Program Files (x86)\Inno Setup v.5.5.1\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: RusLang and InstallerCheck;
Source: "C:\Program Files (x86)\Inno Setup v.5.5.1\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: EngLang and InstallerCheck;

Source: "C:\Program Files (x86)\Inno Setup v.5.5.1\Examples\MyProg.exe"; DestDir: "{commondesktop}\Portable"; Flags: ignoreversion uninsrestartdelete; Check: RusLang and PortableCheck;
Source: "C:\Program Files (x86)\Inno Setup v.5.5.1\Examples\MyProg.exe"; DestDir: "{commondesktop}\Portable"; Flags: ignoreversion uninsrestartdelete; Check: EngLang and PortableCheck;

Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs; Check: RusLang and InstallerCheck;
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs; Check: RusLang and PortableCheck;


[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" ; Check: StartmenuCheck;
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; Check: StartmenuCheck;
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: IconsCheck;

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent; Check: RusLang and InstallerCheck;
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent; Check: EngLang and InstallerCheck;

Filename: "{commondesktop}\Portable\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent; Check: RusLang and PortableCheck;
Filename: "{commondesktop}\Portable\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent; Check: EngLang and PortableCheck;

[UninstallDelete]
Name: {app}\multiset.ini; Type: filesandordirs

[code]
var
Component: TWizardPage;
Portable,Installer,LangRus,LangEng: TNewRadioButton;
FlagImage,InstallerImage,PortableImage: TBitmapImage;
Lang,IconsLabel: TLabel;
Icons,Startmenu: TNewCheckBox;
InstallerGroupBox,IconsGroupBox,LanguageGroupBox: TNewGroupBox;

dirBrowseForm: TSetupForm;
dirBrowse, dirOK, dirNO, dirback: TButton;
DirTreeView: TFolderTreeView;
Edit: TNewEdit;
BrowseBevel: TBevel;
BrowsePanel: TPanel;
BrowsePanel2: TPanel;
BrowseBevel2,BrowseBevel3: TBevel;
BrowseForm : TSetupForm;


function InitializeSetup(): Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\rus.bmp')) then ExtractTemporaryFile('rus.bmp');
if not FileExists(ExpandConstant('{tmp}\eng.bmp')) then ExtractTemporaryFile('eng.bmp');
if not FileExists(ExpandConstant('{tmp}\Installer.bmp')) then ExtractTemporaryFile('Installer.bmp');
if not FileExists(ExpandConstant('{tmp}\Portable.bmp')) then ExtractTemporaryFile('Portable.bmp');
Result := True;
end;

function RusLang: Boolean;
begin
Result:= LangRus.Checked;
end;
function EngLang: Boolean;
begin
Result:= LangEng.Checked;
end;

function IconsCheck: Boolean;
begin
Result:= Icons.Checked;
end;
function StartmenuCheck: Boolean;
begin
Result:= Startmenu.Checked;
end;

function InstallerCheck: Boolean;
begin
Result := Installer.Checked;
end;
function PortableCheck: Boolean;
begin
Result := Portable.Checked;
end;

procedure CopmpClick(Sender: TObject);
begin
case TNewRadioButton(Sender) of
Portable:
begin
PortableImage.Show;
Icons.Checked:=False;
Icons.Enabled:= Icons.Checked;
Startmenu.Checked:=False;
Startmenu.Enabled:= Startmenu.Checked;
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + 'Almeza MultiSet Professional Portable';
//wizardform.GroupEdit.enabled:= false;
//wizardform.GroupBrowseButton.enabled:= false;
end;
Installer:
begin
PortableImage.Hide;
Icons.Checked:=True;
Icons.Enabled:= Icons.Checked;
Startmenu.Checked:=True;
Startmenu.Enabled:= Startmenu.Checked;
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf}')) + 'Almeza MultiSet Professional';
//wizardform.GroupEdit.enabled:= true;
//wizardform.GroupBrowseButton.enabled:= true;
end;
end;
end;

procedure LangClick(Sender: TObject);
begin
case TNewRadioButton(Sender) of
LangRus:
begin
FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\rus.bmp'));
FlagImage.Width := ScaleX(110);
FlagImage.Height := ScaleY(70);
FlagImage.Left := ScaleX(250);
end;
LangEng:
begin
FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\eng.bmp'));
FlagImage.Width := ScaleX(110);
FlagImage.Height := ScaleY(70);
FlagImage.Left := ScaleX(250);
end;
end;
end;

procedure dirOkclick(Sender: TObject);
begin
dirBrowseForm.Close;
WizardForm.Enabled:=True;
WizardForm.DirEdit.Text:=Edit.Text;
end;

procedure dirBackClick(Sender: TObject);
begin
Edit.Text:=AddBackslash(ExpandConstant('{pf}\')+'{#MyAppName}');
DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{pf}\')), True);
end;

procedure dirNOclick(Sender: TObject);
begin
dirBrowseForm.Close;
WizardForm.Enabled:=true;
end;

procedure DirFolderChange(Sender: TObject);
Begin
Edit.Text:=AddBackslash(DirTreeView.Directory) + '{#MyAppName}';
if Portable.Checked then
Edit.Text:=AddBackslash(DirTreeView.Directory) + 'Almeza MultiSet Professional Portable';
end;

procedure FormClosedir(Sender: TObject; var Action: TCloseAction);
begin
WizardForm.Enabled:=true;
end;

procedure BrowseClick(Sender: TObject);
begin
dirBrowseForm := CreateCustomForm();
with dirBrowseForm do begin
ClientWidth := ScaleX(352);
ClientHeight := ScaleY(388);
CenterInsideControl(WizardForm, False);
Caption:='Обзор папок';
onClose:=@FormClosedir;

with tlabel.create(dirBrowseForm) do begin
SetBounds(ScaleX(15),ScaleY(15),ScaleX(350),ScaleY(15));
caption:='Выберите папку из списка и нажмите «ОK».';
parent:=dirBrowseForm;
Font.Color:=clBlack;
Font.Size:=8;

BrowseBevel := TBevel.Create(WizardForm);
BrowseBevel.SetBounds(ScaleX(0),ScaleY(40),ScaleX(352),ScaleY(2));
BrowseBevel.parent:=dirBrowseForm;

BrowseBevel3 := TBevel.Create(WizardForm);
BrowseBevel3.SetBounds(ScaleX(0),ScaleY(342),ScaleX(352),ScaleY(2));
BrowseBevel3.parent:=dirBrowseForm;

BrowsePanel := TPanel.Create(WizardForm);
with BrowsePanel do
begin
parent:=dirBrowseForm;
Left := ScaleX(5);
Top := ScaleY(45);
Width := ScaleX(342);
Height := ScaleY(292);
Caption := '';
end;
BrowsePanel2 := TPanel.Create(WizardForm);
with BrowsePanel2 do
begin
BrowsePanel2.Parent := BrowsePanel;
Left := ScaleX(5);
Top := ScaleY(5);
Width := ScaleX(332);
Height := ScaleY(282);
BevelOuter := bvLowered;
Caption := '';
end;
BrowseBevel2 := TBevel.Create(WizardForm);
with BrowseBevel2 do
begin
BrowseBevel2.Parent := BrowsePanel2;
Left := ScaleX(5);
Top := ScaleY(5);
Width := ScaleX(322);
Height := ScaleY(272);
Style := bsRaised;
end;

Edit:= TNewEdit.Create(dirBrowseForm);
with edit do begin
SetBounds(ScaleX(10),ScaleY(10),ScaleX(311),ScaleY(21));
Text:=WizardForm.DirEdit.text;
Parent:= BrowsePanel2;
Font.Color:=clBlack;
end;

DirTreeView:= TFolderTreeView.Create(dirBrowseForm)
with DirTreeView do begin
SetBounds(ScaleX(10),ScaleY(35),ScaleX(311),ScaleY(235));
OnChange:=@DirFolderChange;
Parent:=BrowsePanel2;
end;

dirback:=tbutton.create(dirBrowseForm)
with dirback do begin
SetBounds(ScaleX(16),ScaleY(351),ScaleX(100),ScaleY(30));
parent:=dirBrowseForm;
Caption:='Сброс';
onclick:=@dirBackClick;
end;

dirok:=tbutton.create(dirBrowseForm)
with dirok do begin
SetBounds(ScaleX(126),ScaleY(351),ScaleX(100),ScaleY(30));
parent:=dirBrowseForm;
Caption:='OK';
onclick:=@dirOKclick;
end;

dirno:=tbutton.create(dirBrowseForm)
with dirno do begin
SetBounds(ScaleX(236),ScaleY(351),ScaleX(100),ScaleY(30));
parent:=dirBrowseForm;
Caption:='Отмена';
onclick:=@dirNOclick;
end;
end;
end;
DirTreeView.ChangeDirectory(AddBackslash(WizardForm.dirEdit.Text), true);
Edit.Text:=(DirTreeView.Directory);
dirBrowseForm.Show;
WizardForm.Enabled:=false;
end;

procedure InitializeWizard();
begin
WizardForm.DirBrowseButton.Visible:=false;
Component := CreateCustomPage(wpInfoBefore, 'Выбор типа и компонентов установки', '...');

FlagImage := TBitmapImage.Create(WizardForm);
with FlagImage do
begin
Name := 'FlagImage';
Parent := Component.Surface;
Left := ScaleX(250);
Top := ScaleY(167);
Width := ScaleX(110);
Height := ScaleY(70);
end;

InstallerImage := TBitmapImage.Create(WizardForm);
with InstallerImage do
begin
Name := 'InstallerImage';
Parent := Component.Surface;
Left := ScaleX(220);
Top := ScaleY(5);
Width := ScaleX(189);
Height := ScaleY(160);
InstallerImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Installer.bmp'));
end;

PortableImage := TBitmapImage.Create(WizardForm);
with PortableImage do
begin
Name := 'PortableImage';
Parent := Component.Surface;
Left := ScaleX(220);
Top := ScaleY(5);
Width := ScaleX(186);
Height := ScaleY(160);
PortableImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Portable.bmp'));
end;

InstallerGroupBox := TNewGroupBox.Create(WizardForm);
with InstallerGroupBox do
begin
Parent := Component.Surface;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(205);
Height := ScaleY(74);
Caption := 'Тип:';
end;

Portable := TNewRadioButton.Create(WizardForm);
with Portable do
begin
Parent := InstallerGroupBox;
Left := ScaleX(5);
Top := ScaleY(47);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Распаковка портативной версии';
OnClick:=@CopmpClick;
end;

IconsGroupBox := TNewGroupBox.Create(WizardForm);
with IconsGroupBox do
begin
Parent := Component.Surface;
Left := ScaleX(0);
Top := ScaleY(80);
Width := ScaleX(205);
Height := ScaleY(74);
Caption := 'Компоненты:';
end;

Icons := TNewCheckBox.Create(WizardForm);
with Icons do
begin
Parent := IconsGroupBox;
Left := ScaleX(5);
Top := ScaleY(20);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Ярлык(и) на «Рабочем столе»';
Checked:=True;
end;

Startmenu := TNewCheckBox.Create(WizardForm);
with Startmenu do
begin
Parent := IconsGroupBox;
Left := ScaleX(5);
Top := ScaleY(47);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Ярлык в меню «Пуск»';
Checked:=True;
end;

Installer := TNewRadioButton.Create(WizardForm);
with Installer do
begin
Parent := InstallerGroupBox;
Left := ScaleX(5);
Top := ScaleY(20);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Установка обычной версии';
OnClick:=@CopmpClick;
Checked:=True;
end;

LanguageGroupBox := TNewGroupBox.Create(WizardForm);
with LanguageGroupBox do
begin
Parent := Component.Surface;
Left := ScaleX(0);
Top := ScaleY(160);
Width := ScaleX(205);
Height := ScaleY(74);
Caption := 'Язык интерфейса:';
end;;

LangRus := TNewRadioButton.Create(WizardForm);
with LangRus do
begin
Parent := LanguageGroupBox;
Left := ScaleX(5);
Top := ScaleY(20);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Язык интерфейса Русский';
OnClick:=@LangClick;
Checked:=True;
end;

LangEng := TNewRadioButton.Create(WizardForm);
with LangEng do
begin
Parent := LanguageGroupBox;
Left := ScaleX(5);
Top := ScaleY(47);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Язык интерфейса Английский';
OnClick:=@LangClick;
end;

dirBrowse:=tbutton.create(WizardForm);
with dirBrowse do begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(342),ScaleY(80),ScaleX(75),ScaleY(23));
Caption:='Обзор...';
OnClick:=@BrowseClick;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean; // Должен пропустить страницу
begin
if Portable.Checked then
if (PageID = 8) then
Result:= True;
end;

procedure CurStepChanged(CurStep: TSetupStep); // Измененный шаг
begin
if (CurStep = ssPostInstall) then
if Installer.Checked and RusLang then
SetIniString('general', 'language', 'russian', ExpandConstant('{app}\multiset.ini'));
if Installer.Checked and EngLang then
SetIniString('general', 'language', 'english', ExpandConstant('{app}\multiset.ini'));
end;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer); // Измененная страница
begin
case CurPageID of
wpSelectDir:
if Portable.Checked then
begin
WizardForm.PageNameLabel.Caption:='Выбор папки распаковки';
WizardForm.PageDescriptionLabel.Caption:='В какую папку вы хотите распаковать {#SetupSetting("AppName")}?';
WizardForm.SelectDirLabel.Caption:='Программа распакует {#SetupSetting("AppName")} в следующую папку.';
WizardForm.SelectDirBrowseLabel.Caption:='Нажмите «Распаковать» чтобы начать распаковку. Если вы хотите выбрать другую папку, нажмите «Обзор».';
WizardForm.NextButton.Caption:='Распаковать';
WizardForm.Caption:= 'Распаковка — {#SetupSetting("AppName")}'
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + 'Almeza MultiSet Professional Portable';
end else begin
WizardForm.NextButton.Caption:= 'Далее';
WizardForm.PageNameLabel.Caption:= 'Выбор папки установки';
WizardForm.Caption:= 'Установка — {#SetupSetting("AppName")}';
WizardForm.PageDescriptionLabel.Caption:= 'В какую папку вы хотите установить {#SetupSetting("AppName")}?';
WizardForm.SelectDirLabel.Caption:= 'Программа установит {#SetupSetting("AppName")} в следующую папку.';
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf}')) + '{#SetupSetting("AppName")}';
WizardForm.SelectDirBrowseLabel.Caption:='Нажмите «Далее» чтобы продолжить. Если вы хотите выбрать другую папку, нажмите «Обзор».';
end;
//wpInstalling:
//begin
//WizardForm.PageNameLabel.Caption:='Распаковка';
//WizardForm.PageDescriptionLabel.Caption:='Пожалуйста, подождите, пока Almeza MultiSet Professional Portable распакуется на ваш компьютер.';
//end else begin
//WizardForm.PageNameLabel.Caption:='Установка';
//WizardForm.PageDescriptionLabel.Caption:='Пожалуйста, подождите, пока Almeza MultiSet Professional установится на ваш компьютер.';
//end;
//end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
wpSelectProgramGroup:
if Installer.Checked then
begin
WizardForm.NextButton.Caption:= 'Установить';
WizardForm.SelectStartMenuFolderBrowseLabel.Caption:= 'Нажмите «Установить», чтобы начать установку. Если вы хотите выбрать другую папку, нажмите «Обзор».';
end;
wpInstalling:
if Installer.Checked then
begin
WizardForm.PageNameLabel.Caption:='Установка';
WizardForm.PageDescriptionLabel.Caption:='Пожалуйста, подождите, пока Almeza MultiSet Professional установится на ваш компьютер.';
end else begin
WizardForm.PageNameLabel.Caption:='Распаковка';
WizardForm.PageDescriptionLabel.Caption:='Пожалуйста, подождите, пока Almeza MultiSet Professional Portable распакуется на ваш компьютер.';
end;
end;
end;

Dodakaedr 04-11-2015 19:08 2571619

Цитата:

Цитата ZVSRus
Есть код возвращения исходного пути установки и распаковки, не могу найти где ошибка.
Помогите исправить. »

Если в условии выполняется несколько команд то надо брать в begin ... end;
Код:

procedure dirBackClick(Sender: TObject);
begin
if Portable.Checked then begin
Edit.Text:=(ExpandConstant('{src}\')+'ACDSeePortable');
DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{src}\')), True) end else begin
Edit.Text:=AddBackslash(ExpandConstant('{pf}\')+'{#MyAppName}');
DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{pf}\')), True);
end;
end;


ZVSRus 04-11-2015 20:00 2571635

Большое спасибо помогло!

R.i.m.s.k.y. 05-11-2015 10:30 2571797

подскажите, пожалуйста, какие параметры в инно [setup] отвечают за цифровую подпись установщика?
когда-то помнил но вот подзабыл

Nordek 05-11-2015 10:50 2571804

R.i.m.s.k.y., Справка » Секция скриптов » Директивы секции [Setup] » SignTool

Также: "Справка » Вкладка "Указатель"
В окне под "Введите ключевое слово для поиска:", введите: signature

vadjliss 07-11-2015 11:50 2572400

ребята помогите с дополнительным по убираю галочку а по всё равно устанавливается

Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{04DDCE42-843E-4F36-81F7-2B5D2702C034}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\WW-W\Desktop\Freemake Video Converter\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: soft\MicrosoftVisualC.exe; DestDir: "{tmp}"

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

 [Types]
Name: "polnaya"; Description: "Полная установка"
Name: "viborochnaya"; Description: "Выборочная установка"; Flags: iscustom

[Components]
Name: "MicrosoftVisualC"; Description: "Microsoft Visual C++"; Types: polnaya viborochnaya

[Run]
FileName: "{tmp}\MicrosoftVisualC.exe"; StatusMsg: "Выполнение программы Microsoft Visual C++"; Flags: skipifsilent hidewizard


Nordek 07-11-2015 12:06 2572402

Цитата:

Цитата vadjliss
убираю галочку а по всё равно устанавливается »

Не увидел чтоб вы задействовали компонент.

Отметил красным жирным шрифтом:
Скрытый текст
Код:

[Components]
Name: "MicrosoftVisualC"; Description: "Microsoft Visual C++"; Types: polnaya viborochnaya

[Run]
FileName: "{tmp}\MicrosoftVisualC.exe"; StatusMsg: "Выполнение программы Microsoft Visual C++"; Flags: skipifsilent hidewizard; Components: MicrosoftVisualC


vadjliss 07-11-2015 12:27 2572405

Nordek

Спасибо

МИШАНЧИК 07-11-2015 13:51 2572421

Подскажите пожалуйста.
Создавал инсталятор с уменьшенными размерами формы(картинка 460х200).
Кусок скрипта:
Код:

with WizardForm do
begin
DirBrowseButton.Left:= ScaleX(360); //Местоположение кнопки "Обзор" от левого края, на странице выбора пути установки
DirBrowseButton.Top:= ScaleY(90); //Местоположение кнопки "Обзор" сверху, на странице выбора пути установки
DirEdit.Left:= DirEdit.Left + ScaleX(147); //Местоположение панели, где отображается путь от левого края, на странице выбора пути установки
DirEdit.Top:= ScaleY(90); //Местоположение панели, где отображается путь сверху, на странице выбора пути установки
DirEdit.Width:=ScaleX(205);

При изменении размера шрифта в windows(средний 125%) вся форма нормальная, но кнопка обзор не на месте. При обычном отображении(мелкий 100%) все на месте. Как правильно задать координаты в форме чтоб при любом изменении размеров шрифта все компоненты формы были на своих местах?

ZVSRus 08-11-2015 12:50 2572675

Dodakaedr
Есть страница SelectDirPage на которой отображены компоненты со страницы SelectProgramGroupPage т.е. GroupEdit, GroupBrowseButton и т.д. Как сделать чтобы при выборе InstallerRadioButton страница отображалась как есть, а при выборе PortableRadioButton компоненты относящиеся к SelectProgramGroupPage не отображались.

Сам скрипт
Скрытый текст

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030108704000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010 D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D6550616765084E65787450616765070D4 36F6D706F6E656E74506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F 110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6 963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6 F7465626F6F6B506167650B4C6963656E7365506167650C50726576696F757350616765070D436F6D706F6E656E745061676 50D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6 F6B506167650D53656C656374446972506167650D4578706C69636974576964746803A1010E4578706C69636974486569676 87403ED00000010544E65774E6F7465626F6F6B506167650D436F6D706F6E656E74506167650743617074696F6E142400000 0D092D18BD0B1D0BED18020D182D0B8D0BFD0B020D183D181D0B0D0BDD0BED0B2D0BAD0B80B4465736372697074696F6E142 A000000D092D18BD0B1D0B5D180D0B8D182D0B520D182D0B8D0BF20D183D181D182D0B0D0BDD0BED0B2D0BAD0B80C5072657 6696F757350616765070B57656C636F6D6550616765084E65787450616765070B4C6963656E736550616765000C544E65774 7726F7570426F7811496E7374616C6C657247726F7570426F78044C656674020003546F70020005576964746803CD0006486 56967687402460743617074696F6E1419000000D0A2D0B8D0BF20D183D181D182D0B0D0BDD0BED0B2D0BAD0B8085461624F7 26465720200000F544E6577526164696F427574746F6E09496E7374616C6C6572044C656674020A03546F700210055769647 46803BE000648656967687402110743617074696F6E142E000000D0A3D181D182D0B0D0BDD0BED0B2D0BAD0B020D0BED0B1D 18BD187D0BDD0BED0B920D0B2D0B5D180D181D0B8D0B807436865636B656409085461624F726465720200074F6E436C69636 B070E496E7374616C6C6572436C69636B00000F544E6577526164696F427574746F6E08506F727461626C65044C656674020 A03546F70022B05576964746803BE000648656967687402110743617074696F6E1438000000D0A0D0B0D181D0BFD0B0D0BAD 0BED0B2D0BAD0B020D0BFD0BED180D182D0B0D182D0B8D0B2D0BDD0BED0B920D0B2D0B5D180D181D0B8D0B8085461624F726 465720201074F6E436C69636B070D506F727461626C65436C69636B0000000000000000448656967687403ED000000F11054 4E65774E6F7465626F6F6B506167650D53656C656374446972506167650D4578706C69636974576964746803A1010E457870 6C6963697448656967687403ED00000010544E65774E6F7465626F6F6B506167650D436F6D706F6E656E7450616765074361 7074696F6E1426000000D092D18BD0B1D0BED18020D182D0B8D0BFD0B020D183D181D182D0B0D0BDD0BED0B2D0BAD0B80B44 65736372697074696F6E142A000000D092D18BD0B1D0B5D180D0B8D182D0B520D182D0B8D0BF20D183D181D182D0B0D0BDD0 BED0B2D0BAD0B80C50726576696F757350616765070B57656C636F6D6550616765084E65787450616765070B4C6963656E73 6550616765000C544E657747726F7570426F7811496E7374616C6C657247726F7570426F78044C656674020003546F700200 05576964746803CD000648656967687402460743617074696F6E1419000000D0A2D0B8D0BF20D183D181D182D0B0D0BDD0BE D0B2D0BAD0B8085461624F726465720200000F544E6577526164696F427574746F6E09496E7374616C6C6572044C65667402 0A03546F70021005576964746803BE000648656967687402110743617074696F6E142E000000D0A3D181D182D0B0D0BDD0BE D0B2D0BAD0B020D0BED0B1D18BD187D0BDD0BED0B920D0B2D0B5D180D181D0B8D0B807436865636B656409085461624F7264 657202000754616253746F7009074F6E436C69636B070E496E7374616C6C6572436C69636B00000F544E6577526164696F42 7574746F6E08506F727461626C65044C656674020A03546F70022B05576964746803BE000648656967687402110743617074 696F6E1438000000D0A0D0B0D181D0BFD0B0D0BAD0BED0B2D0BAD0B020D0BFD0BED180D182D0B0D182D0B8D0B2D0BDD0BED0 B920D0B2D0B5D180D181D0B8D0B8085461624F726465720201074F6E436C69636B070D506F727461626C65436C69636B0000 000000000000

[code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
ComponentPage: TWizardPage;
InstallerGroupBox: TNewGroupBox;
Installer: TNewRadioButton;
Portable: TNewRadioButton;

procedure InstallerClick(Sender: TObject); forward;
procedure PortableClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
{ Creates custom wizard page }
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', 'Выберите тип установки');

{ InstallerGroupBox }
InstallerGroupBox := TNewGroupBox.Create(WizardForm);
with InstallerGroupBox do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(205);
Height := ScaleY(70);
Caption := 'Тип установки';
end;

{ Installer }
Installer := TNewRadioButton.Create(WizardForm);
with Installer do
begin
Parent := InstallerGroupBox;
Left := ScaleX(10);
Top := ScaleY(16);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Установка обычной версии';
Checked := True;
OnClick := @InstallerClick;
end;

{ Portable }
Portable := TNewRadioButton.Create(WizardForm);
with Portable do
begin
Parent := InstallerGroupBox;
Left := ScaleX(10);
Top := ScaleY(43);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Распаковка портативной версии';
OnClick := @PortableClick;
end;

Installer.TabOrder := 0;
Portable.TabOrder := 1;

InstallerGroupBox.TabOrder := 0;

{ ReservationBegin }
// Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;


procedure PortableClick(Sender: TObject);
begin

end;

procedure InstallerClick(Sender: TObject);
begin

end;

////////////////////////////////////////////////////////////////////////////////
var //
StartMenuIcon,DesktopIcon: TCheckBox; //
//
function MakeDesktopIcon: Boolean; begin Result:=DesktopIcon.Checked; end; //
function MakeStartMenuIcon: Boolean; begin Result:=StartMenuIcon.Checked;end; //
//
procedure NoStartMenuIcon(Sender: TObject); //
begin //
if StartMenuIcon.Checked = true then //
begin //
wizardform.GroupEdit.enabled:= false; //
wizardform.GroupBrowseButton.enabled:= false; //
end else begin //
wizardform.GroupEdit.enabled:= true; //
wizardform.GroupBrowseButton.enabled:= true; //
end; //
end; //
////////////////////////////////////////////////////////////////////////////////

procedure InitializeWizard();
begin
RedesignWizardForm;
WizardForm.DiskSpaceLabel.Hide;
//////////////////////////////////////////////////////////////////////////////////////////////
begin //
//
wizardform.SelectDirBrowseLabel.top:= wizardform.GroupEdit.top - ScaleY(48); //
wizardform.SelectDirLabel.left:= wizardform.GroupEdit.left + ScaleY(40); //
//
wizardform.GroupEdit.parent:= wizardform.SelectDirPage; //
wizardform.GroupEdit.top:= wizardform.GroupEdit.top + ScaleY(71); //
//
wizardform.GroupBrowseButton.parent:= wizardform.SelectDirPage; //
wizardform.GroupBrowseButton.top:= wizardform.GroupBrowseButton.top + ScaleY(70); //
//
wizardform.DirEdit.top:= wizardform.GroupEdit.top - ScaleY(90); //
wizardform.DirBrowseButton.top:= wizardform.GroupEdit.top - ScaleY(92); //
//
wizardform.SelectGroupBitmapImage.parent:= wizardform.SelectDirPage; //
wizardform.SelectGroupBitmapImage.left:= wizardform.GroupEdit.left + ScaleY (0); //
wizardform.SelectGroupBitmapImage.top:= wizardform.GroupEdit.top - ScaleY(64); //
//
wizardform.SelectStartMenuFolderLabel.parent:= wizardform.SelectDirPage; //
wizardform.SelectStartMenuFolderLabel.left:= wizardform.GroupEdit.left + ScaleY (40); //
wizardform.SelectStartMenuFolderLabel.top:= wizardform.GroupEdit.top - ScaleY(56); //
//
wizardform.SelectStartMenuFolderBrowseLabel.parent:= wizardform.SelectDirPage; //
wizardform.SelectStartMenuFolderBrowseLabel.left:= wizardform.GroupEdit.left + ScaleY (0); //
wizardform.SelectStartMenuFolderBrowseLabel.top:= wizardform.GroupEdit.top - ScaleY(30); //
//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////
DesktopIcon := TCheckBox.Create(WizardForm); //
DesktopIcon.Parent := WizardForm.SelectDirPage; //
DesktopIcon.Caption := 'Добавить ярлык на Рабочий стол'; //
DesktopIcon.SetBounds(ScaleX(0),WizardForm.DirEdit.Top+ScaleY(140),ScaleX(300),ScaleY(25)); //
DesktopIcon.TabOrder := 0; //
DesktopIcon.Checked:= true; //
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
StartMenuIcon := TCheckBox.Create(WizardForm); //
StartMenuIcon.Parent := WizardForm.SelectDirPage; //
StartMenuIcon.Caption := 'Не создавать папку в меню Пуск'; //
StartMenuIcon.SetBounds(ScaleX(220),WizardForm.DirEdit.Top+ScaleY(140),ScaleX(300),ScaleY(25)); //
StartMenuIcon.TabOrder := 0; //
StartMenuIcon.Checked:= false; //
StartMenuIcon.OnClick:= @NoStartMenuIcon; //
end; //
//////////////////////////////////////////////////////////////////////////////////////////////////
end;

Dodakaedr 08-11-2015 13:01 2572678

Цитата:

Цитата ZVSRus
при выборе PortableRadioButton компоненты относящиеся к SelectProgramGroupPage не отображались. »

Добавьте это
Скрытый текст
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectDir:
      begin
        if Portable.Checked then
          begin
            WizardForm.GroupEdit.Hide;
            WizardForm.GroupBrowseButton.Hide;
            StartMenuIcon.Hide;
            wizardform.SelectGroupBitmapImage.Hide;
            wizardform.SelectStartMenuFolderLabel.Hide;
            wizardform.SelectStartMenuFolderBrowseLabel.Hide;
            //DesktopIcon.Checked := False;
            //DesktopIcon.Hide;
          end else begin
            WizardForm.GroupEdit.Show;
            WizardForm.GroupBrowseButton.Show;
            StartMenuIcon.Show;
            wizardform.SelectGroupBitmapImage.Show;
            wizardform.SelectStartMenuFolderLabel.Show;
            wizardform.SelectStartMenuFolderBrowseLabel.Show;
            //DesktopIcon.Checked := True;
            //DesktopIcon.Show;
          end;
      end;
  end;
end;


ZVSRus 08-11-2015 13:42 2572682

Dodakaedr, Большое спасибо!

vadjliss 08-11-2015 19:39 2572800

ребята подскажите как сделать что бы инсталлятор запускался от администратора

Nordek 08-11-2015 20:32 2572826

vadjliss, Справка » Секция скриптов » Директивы секции [Setup] » PrivilegesRequired
Скрытый текст
Цитата:

Цитата PrivilegesRequired
[Setup]: PrivilegesRequired

Возможные значения: none, poweruser, admin или lowest

Значение по умолчанию: admin

Описание:
Эффект данной директивы зависит от версии Windows, на котором работает инсталлятор:

На Windows Vista и позднее:
Эта директива определяет, требуются ли повышенные права (через диалоговое окно Управления учетной записью пользователя) для выполнения установки.

При значении admin (значение по умолчанию) или poweruser, инсталлятор всегда будет работать с административными полномочиями. Если инсталлятор был запущен непривилегированным пользователем, Windows спросит пароль к учётной записи, у которой есть административные полномочия и инсталлятор тогда будет работать в соответствии с этой учётной записью.

При значении lowest, инсталлятор не будет запрашивать административных полномочий для выполнения, даже если он был запущен пользователем группы "Администраторы". Дополнительно, корневой ключ удаления всегда будет HKEY_CURRENT_USER и "общие" формы констант папки Shell отображаться на форме "пользователи", даже если административные полномочия доступны. Не используйте это значение, если Вы не уверены, что Ваш инсталлятор будет работать успешно на непривилегированных учетных записях.

На ранних версиях Windows:
Эта директива определяет минимальные пользовательские полномочия, требуемые для выполнения инсталлятора.

При значении admin (по умолчанию), инсталлятор выполнится, если пользователь будет членом группы "Администраторы", иначе выведет на экран следующее сообщение и закончит свою работу: "Вы должны быть зарегистрированы как администратор, чтобы установить эту программу."

При значении poweruser, инсталлятор будет работать, если пользователь является членом группы "Администраторы" или Продвинутых пользователей, иначе выведет на экран следующее сообщение и закончит свою работу: "Вы должны быть зарегистрированы как администратор или как член группы Продвинутых пользователей, чтобы установить эту программу."

При значении lowest инсталлятор не будет проверять состав группы пользователя. Дополнительно, корневой ключ удаления всегда будет HKEY_CURRENT_USER и "общие" формы констант папки Shell отображаться на форме "пользователи", даже если административные полномочия доступны. Не используйте это значение, если Вы не уверены, что Ваш инсталлятор будет работать успешно на непривилегированных учётных записях.

Примечание:
Независимо от версии Windows, only if the installation is per-user (PrivilegesRequired=lowest) you may touch Windows' per-user areas from your script.


МИШАНЧИК 10-11-2015 08:29 2573243

Подскажите пожалуйста.
Можно как-то сделать чтоб при установке в WelcomeLabel дописывалась разрядность устанавливаемого приложения(если есть файлы NOT IsWin64 и IsWin64)?
И чтоб потом в "Установка и удаление программ" в названии программы тоже стояла разрядность?

МИШАНЧИК 10-11-2015 16:35 2573386

kotyarko@fb, спасибо.

Цитата:

Цитата kotyarko@fb
IsWin64 - это не файлы. »

Я имел ввиду что имеются файлы предназначенные для разной разрядности и которые будут копироваться в зависимости от флага NOT IsWin64 или IsWin64.

kotyarko@fb, как-то у меня не очень коректно работает:
1. Не отрабатывает "AppName"-пишет просто "Вас приветствует мастер установки х32.
2. В установка и удаление в имени программы отсутствует х64(х86).
3. В таком виде как Вы дали при запуске в виндовс х64 и х86 пишет "Вас приветствует мастер установки х32".
4. У меня свой WelcomeLabel1 указанный в [CustomMessages] и он с ним не срабатывает, только со стандартным.
Подскажите пожалуйста как исправить, или может есть другой вариант как задать данный параметр?

kotyarko@fb 10-11-2015 17:21 2573395

МИШАНЧИК, я неправильно понял ваше сообщение, и привёл нерабочий пример (не было возможности проверить). Когда понял - удалил своё сообщение, но, видимо, вы его ещё застали.

Цитата:

Цитата МИШАНЧИК
У меня свой WelcomeLabel1 указанный в [CustomMessages] »

Пример сделан с секцией [Messages], но такой способ подойдёт и для [CustomMessages]:
Код:

[Messages]
BeveledLabel=Архитектура ЦП: ({#GetEnv("PROCESSOR_ARCHITECTURE")})

Для изменения имени приложения в "установке и удалении программ" нужно изменять параметр AppVerName, секции [Setup].

Dodakaedr 10-11-2015 22:04 2573493

Цитата:

Цитата МИШАНЧИК
Можно как-то сделать чтоб при установке в WelcomeLabel дописывалась разрядность устанавливаемого приложения »

Можно, исправляйте под свои нужды
Скрытый текст
Код:

[setup]
appname=App
appversion=1.1
UninstallDisplayName={code:GetUnName}
DefaultDirName={sd}\Apps

[CustomMessages]
Welcx32=Установка {#SetupSetting("AppName")} x32
Welcx64=Установка {#SetupSetting("AppName")} x64
UnName32=Удалить {#SetupSetting("AppName")} x32
UnName64=Удалить {#SetupSetting("AppName")} x64

[Code]
function GetUnName(uname: string): string;
begin
  if IsWin64 then uname := CustomMessage('UnName64') else uname := CustomMessage('UnName32');
  Result := uname;
end;

procedure InitializeWizard();
begin
  if IsWin64 then
    begin
      WizardForm.WelcomeLabel1.Caption := CustomMessage('welcx64');
      WizardForm.Caption := WizardForm.WelcomeLabel1.Caption;
    end
    else
    begin
      WizardForm.WelcomeLabel1.Caption := CustomMessage('welcx32');
      WizardForm.Caption := WizardForm.WelcomeLabel1.Caption;
    end;
end;


МИШАНЧИК 11-11-2015 10:27 2573597

Dodakaedr, спасибо.
Все хорошо, только теперь еще Welcx... прописывается в SetupWindowTitle, вместо моего SetupWindowTitle указанного в [Messages]. Т.е. если в [CustomMessages] Welcx... задать значение: "Будет установлена программа х", то эта же надпись будет и в самом верху инсталятора в SetupWindowTitle, а не только в WelcomeLabel1. Можно как-то избавиться от этого в SetupWindowTitle?

Dodakaedr 11-11-2015 10:31 2573601

МИШАНЧИК, удалите строку WizardForm.Caption := WizardForm.WelcomeLabel1.Caption;

habib2302 13-11-2015 12:48 2574341

Как организовать подхват настроек через раздел Files с проверкой и без копирования в инсаллятор?

ZVSRus 13-11-2015 18:41 2574449

Dodakaedr, Как правильно зарегестрировать программу. Прописывать в секции [Registry] все записи найденные в реестре или только те строки что относятся к ключу. Или можно как-то прописать в скрипте reg файл.

Dodakaedr 13-11-2015 22:21 2574516

ZVSRus, если программа не делает прочих проверок, то достаточно записи ключа: экспортируете из реестра ключ и через конвертер, который в шапке темы есть, конвертируете в формат inno, потом копируете строки в свой скрипт в секцию [Registry].

habib2302, если правильно помню, то как-то так:
Код:

[Files]
Source: {src}\FILE.reg; Flags: external

В любом случаи все это написано в справке в секции Files. Проверку можно сделать через check функцию, вроде тебе же и писал пример, либо через флаг, в справке найдешь.

Nordek 14-11-2015 01:47 2574571

Цитата:

Цитата habib2302
Как организовать подхват настроек через раздел Files с проверкой и без копирования в инсаллятор? »

Код:

[Files]
Source: {src}\Settings.ini; DestDir: {userappdata}\MyProg; Flags: external skipifsourcedoesntexist

external - Внешний. Это значит что файлы будут браться с внешнего источника. В Source, присутствие константы {src} обязательно.
skipifsourcedoesntexist - Пропустить, если источник отсутствует. Т.е пропускает файл или каталог, если таковые отсутствуют.


Цитата:

Цитата ZVSRus
Или можно как-то прописать в скрипте reg файл. »

Код:

[Run]
Filename: regedit.exe; Parameters: "/S ""{src}\MyRegistryFile.reg"""


ZVSRus 17-11-2015 13:02 2575696

Вопрос ко-всем знающим форум-чанам. Как правильно экспортировать ключ реестра. Какими программами лучше всего пользоваться для снятия снимков реестра. Как это делается. Не могу сделать ACDSee 5.0 PowerPack зарегестрированной, не могу корректно экспортировать из реестра данные. Опишите как все это делается на своих конкретных примерах.

Dodakaedr 17-11-2015 13:08 2575699

ZVSRus, Любая программа по работе с реестром. Но можно и стандартным способом: кнопка "Пуск" > "Выполнить" вводите regedit > жмете "Enter", перед вами появится стандартный обозреватель реестра.
Скрытый текст


Цитата:

Цитата ZVSRus
не могу корректно экспортировать »

а как оно экспортируется?

ZVSRus 17-11-2015 13:50 2575716

Dodakaedr, Экспортирую как на вашем рисунке. В regedit в строке поиск ввожу название программы, выдает список в около 1000 строк, все экспортирую в reg файл. Далее делаю в секции [Run]
Filename: regedit.exe; Parameters: "/S ""{src}\MyRegistryFile.reg""" в итоге выдает ошибки при запуске программы. Или ACDSee 5.0 такая хитрозадая или что-то делаю неправильно с реестром. За 2 дня всю голову сломал.

ZVSRus 17-11-2015 14:04 2575724

Так программа вносит данные в реестр

Dodakaedr 17-11-2015 14:36 2575739

ZVSRus, чтобы вам помочь, надо знакомится с работой программы, на что сейчас нету времени.

ZVSRus 17-11-2015 15:48 2575757

Dodakaedr, Как правильно сделать чтобы ярлыки реально закреплялись на панели задач и в меню пуск

habib2302 17-11-2015 21:29 2575884

Помогите решить проблему

Nordek 17-11-2015 21:44 2575890

Цитата:

Цитата ZVSRus
зарегестрированной »

На примере ACDSee 5 Pro:
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\ACD Systems\ACDSee Pro\50\InTouch2]
"LicenseKey"="XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX"
"Trial"=dword:00000000
"KeyCount"=dword:00000001

Вместо "XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX" - Ваш регистрационный ключ.

Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\ACD Systems\ACDSee Pro\50\LClient]
"md"=hex:***********

Вместо звёздочек конечное содержимое.

Не показывать Quick Start Guide:
Код:

[HKEY_CURRENT_USER\Software\ACD Systems\ACDSee Pro\50]
"ShowStartupWizard"=dword:00000000


Nordek 17-11-2015 22:02 2575898

Цитата:

Цитата habib2302
Помогите решить проблему »

habib2302, Не ленитесь сюда приводить текстовый вид: Содержимое [Icons] в месте ошибки.

Код:

[Icons]
Name: {group}\{cm:UninstallProgram,Alcohol 120%25}; Filename: {uninstallexe}


МИШАНЧИК 19-11-2015 14:39 2576490

Dodakaedr, подскажите пожалуйста, а как сделать:
1. чтоб разрядность отображалась и в SetupWindowTitle
2. убрать слово моя программа setup в описании инсталятора создаваемого инно, или заменить его на программа и т.п.?

Dodakaedr 19-11-2015 18:20 2576587

1.
Цитата:

Цитата МИШАНЧИК
Все хорошо, только теперь еще Welcx... прописывается в SetupWindowTitle »

Цитата:

Цитата Dodakaedr
удалите строку WizardForm.Caption := WizardForm.WelcomeLabel1.Caption; »

2.
Код:

[Setup]
VersionInfoDescription=бла-бла


МИШАНЧИК 20-11-2015 08:50 2576851

Цитата:

Цитата Dodakaedr
WizardForm.Caption := WizardForm.WelcomeLabel1.Caption; »

тогда полностью копируется строка WelcomeLabel1.Caption, а можно как-то задать туда другую надпись?

ZVSRus 20-11-2015 09:31 2576865

Какой Flags нужно подставить чтобы эти две папки устанавливались в данных директориях, но их не было видно,
а чтобы появлялись они только после первого запуска программы. Или нужно сделать что-то другое.

Код:

Source: C:\Installer\Roaming\ACD Systems\ImageDB\*; DestDir: {userappdata}\ACD Systems\ImageDB; Flags: ignoreversion recursesubdirs createallsubdirs; Check: RusLang and InstallerCheck
Source: C:\Installer\CommonAppData\ACD Systems\*; DestDir: {commonappdata}\ACD Systems; Flags: ignoreversion recursesubdirs createallsubdirs; Check: RusLang and InstallerCheck


Dodakaedr 20-11-2015 21:45 2577175

Цитата:

Цитата МИШАНЧИК
а можно как-то задать туда другую надпись? »

А что вам мешает добавить её?
Скрытый текст
Код:

[setup]
appname=App
appversion=1.1
UninstallDisplayName={code:GetUnName}
DefaultDirName={sd}\Apps

[CustomMessages]
Welcx32=Установка {#SetupSetting("AppName")} x32
Welcx64=Установка {#SetupSetting("AppName")} x64
UnName32=Удалить {#SetupSetting("AppName")} x32
UnName64=Удалить {#SetupSetting("AppName")} x64
Title32={#SetupSetting("AppName")} x32
Title64={#SetupSetting("AppName")} x64


[Code]
function GetUnName(uname: string): string;
begin
  if IsWin64 then uname := CustomMessage('UnName64') else uname := CustomMessage('UnName32');
  Result := uname;
end;

procedure InitializeWizard();
begin
  if IsWin64 then
    begin
      WizardForm.WelcomeLabel1.Caption := CustomMessage('welcx64');
      WizardForm.Caption := CustomMessage('Title64');
    end
    else
    begin
      WizardForm.WelcomeLabel1.Caption := CustomMessage('welcx32');
      WizardForm.Caption := CustomMessage('Title32');
    end;
end;



Цитата:

Цитата ZVSRus
Какой Flags нужно подставить »

никакой
Цитата:

Цитата ZVSRus
чтобы появлялись они только после первого запуска программы »

при отсутствии программа сама создаст их. Если там что-то необходимо для работы программы, например, какие-то настройки, лицензии, то их можно и до запуска программы устанавливать.

ZVSRus 21-11-2015 09:32 2577306

Dodakaedr, Есть программа (Ваша) Windows Player 3.0.0.0 RePack Portable by Dodakaedr вместо страницы финиша появляется окно.
Код:

if MsgBox
Как сделать как на картинке.

МИШАНЧИК 21-11-2015 16:12 2577411

Dodakaedr, подскажите пожалуйста. Пытался заменить окно "о прграмме" этим скриптом:
скрипт
[Files]
Source: compiler:CallbackCtrl.dll; Flags: dontcopy

[code]
type
TWFProc = function(h:hWnd;Msg,wParam,lParam:Longint):Longint;

function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function WrapWFProc(Callback: TWFProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';

var
OldProc:Longint;

procedure AboutSetupClick;
begin
//здесь обрабатываем нажатие на пункт меню "О программе ..."
MsgBox('bla-bla-bla', mbInformation, MB_OK);
end;

function WFWndProc(h:HWND;Msg,wParam,lParam:Longint):Longint;
begin
if (Msg=$112) and (wParam=9999) then begin
Result:=0;
AboutSetupClick;
end else begin
if Msg=$2 then SetWindowLong(WizardForm.Handle,-4,OldProc);
Result:=CallWindowProc(OldProc,h,Msg,wParam,lParam);
end;
end;

procedure InitializeWizard;
begin
OldProc:=SetWindowLong(WizardForm.Handle,-4,WrapWFProc(@WFWndProc,4));
end;

и на windows 7 х86 при отказе от дальнейшей установки(скрипт скомпилирован в 7х64) и закрытии инсталятора, выдает ошибку:

Dodakaedr 21-11-2015 20:05 2577495

Цитата:

Цитата МИШАНЧИК
при отказе от дальнейшей установки(скрипт скомпилирован в 7х64) и закрытии инсталятора, выдает ошибку »

Попробуйте так
Скрытый текст
Код:

[Files]
Source: compiler:Dll Pack\CallbackCtrl.dll; Flags: dontcopy

[code]
type
TWFProc = function(h:hWnd;Msg,wParam,lParam:Longint):Longint;

function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function WrapWFProc(Callback: TWFProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';

var
OldProc:Longint;
free: boolean;

procedure AboutSetupClick;
begin
//здесь обрабатываем нажатие на пункт меню "О программе ..."
MsgBox('bla-bla-bla', mbInformation, MB_OK);
end;

function WFWndProc(h:HWND;Msg,wParam,lParam:Longint):Longint;
begin
if (Msg=$112) and (wParam=9999) then begin
Result:=0;
AboutSetupClick;
end else begin
if Msg=$2 then SetWindowLong(WizardForm.Handle,-4,OldProc);
Result:=CallWindowProc(OldProc,h,Msg,wParam,lParam);
end;
end;

procedure InitializeWizard;
begin
free := true;
OldProc:=SetWindowLong(WizardForm.Handle,-4,WrapWFProc(@WFWndProc,4));
end;

procedure DeinitializeSetup();
begin
  if free <> false then WizardForm.Free;
end;


Цитата:

Цитата ZVSRus
Как сделать как на картинке. »

чтобы так сделать нужна ботва с модулем для неё. Наверняка все это у вас уже есть. Положите все что необходимо рядом с инсталлятором и раскомментируйте строки в скрипте
Скрытый текст
Код:

;#include "botva2.iss"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DisableFinishedPage=yes
//SetupIconFile=icon.ico //иконка слева вверху окна инсталлятора

//[files]
//Source: "b2p.dll"; DestDir: "{tmp}"; Flags: dontcopy
//Source: "botva2.dll"; DestDir: "{tmp}"; Flags: dontcopy

[code]
//function InitializeSetup(): Boolean;
//begin
//if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
//if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
//Result := True;
//end;

function ShowFinishedForm(): Boolean;
var
  FinishedForm: TSetupForm;
begin
  FinishedForm := CreateCustomForm;
  FinishedForm.Position:=poScreenCenter;
  try
    FinishedForm.ClientWidth := ScaleX(310);
    FinishedForm.ClientHeight := ScaleY(133);
    FinishedForm.BorderStyle := bsSingle;
    FinishedForm.BorderIcons := [biSystemMenu];
    FinishedForm.Caption := 'Установка My Application';
    FinishedForm.CenterInsideControl(WizardForm, False);

    //установка иконки, требуется ботва
    //ImgLoad(FinishedForm.Handle, ExpandConstant('{tmp}\icon.png'), ScaleX(20), ScaleY(20), ScaleX(46), ScaleY(40), True, False);
    //ImgApplyChanges(FinishedForm.Handle);

    with TNewButton.Create(FinishedForm) do
    begin
      Parent := FinishedForm;
      SetBounds(ScaleX(110), ScaleY(100), ScaleX(90), ScaleY(25));
      ModalResult := mrYes;
      Caption := SetupMessage(msgButtonYes);
    end;
    with TNewStaticText.Create(FinishedForm) do
    begin
      Parent:= FinishedForm;
      Caption:='Всё готово, приятного пользования!'+ #13#10 +
      ''+ #13#10 +
      'Запустить программу сейчас?';
      Left:=70;
      Top:=20;
      Font.Name:= 'Tahoma';
      Font.Size:= 9;
      Font.Color:=clBlack;;
      end;
    with TNewButton.Create(FinishedForm) do
    begin
      Parent := FinishedForm;
      SetBounds(ScaleX(210), ScaleY(100), ScaleX(90), ScaleY(25));
      ModalResult := mrNo;
      Caption := SetupMessage(msgButtonNo);
    end;

    Result := (FinishedForm.ShowModal = mrYes);
  finally
    FinishedForm.Free;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
    case CurStep of
    ssDone:
    if ShowFinishedForm then
    Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
    end;
end;


ZVSRus 21-11-2015 21:29 2577534

Dodakaedr, Сделал как описано. Все иконки на своих местах. Но почему то программа не запускается. Путь к файлу прописан вручную.

Разобрался.

Exec(ExpandConstant('{pf}\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode); при этом пути запуск происходит.
Exec(ExpandConstant('Program Files (x86)\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode); при этом пути запуск не происходит.
В чём разница подскажите?

Nordek 21-11-2015 22:09 2577543

Цитата:

Цитата ZVSRus
при этом пути запуск не происходит.
В чём разница подскажите? »

Как по вашему будет работать, если путь к диску не указан?
В
Код:

Exec(ExpandConstant('Program Files (x86)\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
укажите корень диска, т.е
Код:

Exec(ExpandConstant('C:\Program Files (x86)\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
В инсталляторе, константа {pf} в 32-разрядной Windows: переводит путь в "C:\Program Files"; в 64-разрядной Windows: в "C:\Program Files (x86)"; если инсталлятор работает в 64-разрядном режиме: в "C:\Program Files".

Можно жёстко указать:
{pf32} - Путь для 32-разрядного системного каталога Program Files
{pf64} - Путь для 64-разрядного системного каталога Program Files

ZVSRus 21-11-2015 22:51 2577553

Забыл выставить C:\ Блин глаз за мылился.

nik1967 21-11-2015 22:58 2577555

Цитата:

Цитата Dodakaedr
чтобы так сделать нужна ботва с модулем для неё. »

Dodakaedr, а так не проще?
Скрытый текст
Код:

#ifndef IS_ENHANCED
  #error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[Files]
Source: 1.ico; Flags: dontcopy;

[code]
function LoadImage(hInst: THandle; ImageName: PansiChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle;
  external 'LoadImageA@user32.dll stdcall delayload';
 
procedure InitializeWizard;
begin
  ExtractTemporaryFile('1.ico');
  MsgBoxEx(0, 'Проверка', 'Заголовок проверки', MB_YESNO, LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010), 0);
end;


Nordek 21-11-2015 23:35 2577562

Цитата:

Цитата nik1967
а так не проще? »

И я о том же подумал:
Скрытый текст
Код:

#define icon "myicon.ico"

[Files]
Source: {#icon}; DestDir: {tmp}; Flags: dontcopy;

[Code]
var
  IconImage1: TNewIconImage;

procedure InitializeWizard();
begin
  IconImage1 := TNewIconImage.Create(WizardForm);
  with IconImage1 do
  begin
   
Parent := WizardForm;
    SetBounds(ScaleX(40), ScaleY(313), ScaleX(105), ScaleY(105));
    ExtractTemporaryFile('{#icon}');
    Icon.LoadFromFile(ExpandConstant('{tmp}\{#icon}'));
  end;
end;


ZVSRus 22-11-2015 09:33 2577627

Nordek, Так проще, но как к этому прикрурить этот скрипт.
Скрытый текст
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code ]
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
if MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!' + #10#10#13 + 'Запустить ' + '{#SetupSetting("AppName")}' + '?' , mbInformation, MB_YESNO) = IDYES then
Exec(ExpandConstant('{app}\bin\XR_3DA.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;


vadjliss 22-11-2015 09:50 2577629

парни помогите решить проблему надо что бы создался 1 файл ехе. а в этом скрипте создаётся ехе. и bin. то есть 2 файла
Код:

#define MyAppName "CorelCAD 2016"
#define MyAppVersion "16.0.0.1079"
#define MyAppPublisher "Corel"
#define MyAppURL ""
#define MainExe "{app}\CorelCAD 2016\BIN\CorelCAD.exe"
#define MainExe64 "{app}\CorelCAD 2016\BIN\CorelCAD.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)

[Setup]
AppId={{2F983EE9-A521-4D68-83F4-626DEC61E945}
AppVersion=16.0.0.1079
VersionInfoVersion=16.0.0.1079
AppName={#MyAppName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
VersionInfoDescription=CorelCAD 2016 Build 16.0.0.1079 x86-x64
OutputDir=C:\Users\\WW-W\Desktop\скрипт
OutputBaseFilename=CorelCAD 2016 Build 16.0.0.1079 x86-x64 RUS
SetupIconFile=C:\Users\\WW-W\Desktop\скрипт\image\1.ico
PrivilegesRequired=admin
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=image\1.bmp
WizardSmallImageFile=image\2.bmp
UsePreviousGroup=False
DisableProgramGroupPage=yes
UninstallRestartComputer=yes
ArchitecturesInstallIn64BitMode=x64
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=728760320



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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
;Source: C:\Users\WW-W\Desktop\64\ProgramFiles64Folder\*; DestDir: {app}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Users\WW-W\Desktop\64\ProgramFiles64Folder\*; DestDir: {app}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Users\WW-W\Desktop\32\ProgramFilesFolder\*; DestDir: {app}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
// C:\ProgramData
;Source: ..\64\LocalAppDataFolder\*; DestDir: {commonappdata}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
// CommonAppDataFolder
Source: ..\64\CommonAppDataFolder\*; DestDir: {localappdata}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
 // CommonFiles
;Source: ..\64\CommonFilesFolder\*; DestDir: {cf}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
//Application Data
Source: ..\64\AppDataFolder\*; DestDir: {userappdata}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs

// C:\ProgramData
;Source: ..\32\LocalAppDataFolder\*; DestDir: {commonappdata}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
// CommonAppDataFolder
Source: ..\32\CommonAppDataFolder\*; DestDir: {localappdata}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
 // CommonFiles
Source: ..\32\CommonFilesFolder\*; DestDir: {cf}; Check: not IsWin64; Flags:  ignoreversion recursesubdirs createallsubdirs
//Application Data
Source: ..\32\AppDataFolder\*; DestDir: {userappdata}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{userdesktop}\{#MyAppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#MyAppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64


nik1967 22-11-2015 09:55 2577630

ZVSRus, чукча не читатель, чукча писатель.
Скрытый текст
Код:

#ifndef IS_ENHANCED
  #error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[Files]
Source: 1.ico; Flags: dontcopy;

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
function LoadImage(hInst: THandle; ImageName: PansiChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload';
 
procedure InitializeWizard;
begin
  ExtractTemporaryFile('1.ico');
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: Integer;
begin
  if CurStep = ssDone then
  if MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Запустить '+'{#SetupSetting("AppName")}'+'?',
  'Установка — '+'{#SetupSetting("AppName")}',MB_YESNO,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010),0) = IDYES then
    Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;



vadjliss,
из справки Inno
[Setup]: DiskSpanning
Возможные значения:
yes или no
Значение по умолчанию:
no

Опмсание:
При значении yes будет производиться разбиение на диски. Определяет, создавать ли компилятору один файл SETUP.EXE, или делить его на файлы (SETUP-*.BIN), которые помещаются на дискету, CD-ROM, DVD-ROM или другой носитель.

vadjliss 22-11-2015 10:26 2577635

как совместить если имеется уже уже токая строка procedure CurStepChanged(CurStep: TSetupStep);

kotyarko@fb 22-11-2015 12:32 2577667

vadjliss,
Код:

Procedure CurStepChanged1(CurStep: TSetupStep);
begin
 ...
end;

Procedure CurStepChanged2(CurStep: TSetupStep);
begin
 ...
end;

Procedure CurStepChanged(CurStep: TSetupStep);
begin
 CurStepChanged1(CurStep);
 CurStepChanged2(CurStep);
end;


ZVSRus 22-11-2015 15:53 2577733

nik1967, Все хорошо. Только не отображается иконка в левом верхнем углу на бордюре.
И второй вопрос. Можно ли к данному скрипту прикрутить InstallerCheck и PortableCheck
Скрытый текст
#ifndef IS_ENHANCED
#error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[Files]
Source: 1.ico; Flags: dontcopy;

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
function LoadImage(hInst: THandle; ImageName: PansiChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('1.ico');
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
if MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Запустить '+'{#SetupSetting("AppName")}'+'?',
'Установка — '+'{#SetupSetting("AppName")}',MB_YESNO,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010), 0) = IDYES then
Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;

Dodakaedr 23-11-2015 08:07 2577935

Цитата:

Цитата ZVSRus
Все хорошо. Только не отображается иконка в левом верхнем углу на бордюре. »

Будьте повнимательней
Код:

[Setup]
SetupIconFile=icon.ico //иконка слева вверху окна инсталлятора

Цитата:

Цитата ZVSRus
И второй вопрос. Можно ли к данному скрипту прикрутить InstallerCheck и PortableCheck »

Можно все что угодно
Скрытый текст
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
if InstallerCheck then begin
if MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Запустить '+'{#SetupSetting("AppName")}'+'?',
'Установка — '+'{#SetupSetting("AppName")}',MB_YESNO,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010), 0) = IDYES then
Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end else
MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Приятного пользования!,
'Установка — '+'{#SetupSetting("AppName")}',MB_OK,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010), 0);
end;


ZVSRus 23-11-2015 11:58 2578015

Dodakaedr, Не отображается иконка в левом верхнем углу на бордюре в данном куске скрипта
т.е. на бордюре маленького окошечка вместо финишной страницы от nik1967
Скрытый текст
Код:

#ifndef IS_ENHANCED
  #error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.
SetupIconFile=Icon.ico
UsePreviousAppDir=no
UsePreviousGroup=no

[Files]
Source: 1.ico; Flags: dontcopy;

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code ]
function LoadImage(hInst: THandle; ImageName: PansiChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
  ExtractTemporaryFile('1.ico');  // Извлечение временных файлов
end;

procedure CurStepChanged(CurStep: TSetupStep);  // Изменение Шага
var
  ResultCode: Integer;
begin
  if CurStep = ssDone then
  if MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Запустить '+'{#SetupSetting("AppName")}'+'?',
  'Установка — '+'{#SetupSetting("AppName")}',MB_YESNO,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010),0) = IDYES then
    Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;


Dodakaedr 24-11-2015 07:43 2578361

Цитата:

Цитата ZVSRus
Не отображается иконка в левом верхнем углу на бордюре в данном куске скрипта
т.е. на бордюре маленького окошечка вместо финишной страницы от nik1967 »

Скорее всего никак.

Bartron 25-11-2015 12:17 2578736

Вложений: 1
Подскажите, пожалуйста. Решил сделать собственное окно выхода из инсталла, кнопки сделал через ботву. На всех страницах окно выхода работает нормально, но на странице установки при нажатии "отмена" появляется ошибка Ничего не могу понять. Скрипт прикрепил.

TryRooM 25-11-2015 14:41 2578771

Bartron, http://rghost.ru/79vcWlr9H
Пробуйте.

Bartron 25-11-2015 14:55 2578776

TryRooM, всё равно та же ошибка на странице установки...

TryRooM 25-11-2015 15:04 2578778

Вот скриншот страницы установки. Проверял на Ansi и Unicode версии от Restools

Bartron 25-11-2015 15:27 2578783

TryRooM, у вас на скриншоте Readypage, а ошибка появляется непосредственно на Installingpage (когда уже идёт сама установка).

TryRooM 25-11-2015 15:41 2578786

Bartron, http://rghost.ru/6tRGNZ995
Тогда так. Стандартная установка, ошибки нет.

Bartron 25-11-2015 16:01 2578787

TryRooM, не помогает. Что странно, если прикрутить распаковку через Isdone, то окно работает нормально, ошибки нет, но если распаковка стандартная (что мне и нужно), то появляется ошибка; и если ботву убрать, окно тоже работает нормально, ничего понять не могу...

TryRooM 25-11-2015 16:13 2578791

Bartron, При стандартной установке, скрипт работает. А понять, что у вас не клеится, я не телепат.

habib2302 25-11-2015 16:27 2578796

Помогите решить проблему

Код:

Filename: regedit; Parameters: "/s ""{src}\WinRAR\Settings.reg"""; Check: "FileExists (ExpandConstant('{src}\WinRAR\Settings.reg'))"; Components: WRAR\I;

TryRooM 25-11-2015 16:59 2578812

habib2302,
Исходя из вашего кода, файл Settings.reg должен находиться, в папке WinRAR, тогда, ошибки не будет.

ZVSRus 25-11-2015 17:07 2578816

Dodakaedr, Как это все реализовать

habib2302 25-11-2015 17:11 2578818

TryRooM, он там и лежит. Тем более вы сами подумайте зачем я делаю еще проверку на файл??

TryRooM 25-11-2015 17:23 2578824

Вложений: 1
habib2302, Вот ваш пример. Скомпилируйте и посмотрите.

Dodakaedr 25-11-2015 20:07 2578858

Цитата:

Цитата ZVSRus
Как это все реализовать »

ручками) Все ответы есть в основном в предыдущей части темы и в справке.

habib2302 26-11-2015 17:49 2579094

Цитата:

Цитата ZVSRus
Как это все реализовать »

меня больше всего интересует оформление
ZVSRus,
вот код для закрепления
Код:


[Tasks]
Name: ic; Description: {cm:AdditionalIcons}; Components: AIDA64\I;
Name: ic\taskbar; Description: Закрепить в панели управления; MinVersion: 0.0,6.1.7600; Flags: unchecked
Name: ic\startmenu; Description: Закрепить в пуске; MinVersion: 0.0,6.1.7600; Flags: unchecked

[code]
function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to executable file
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

    { String resources }
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        res := 5386;        { Pin to Tas&kbar }
    end else res := 5387;  { Unpin from Tas&kbar }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

function PinToStartMenu(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to exe- or lnk-file
// IsPin......: False - unpin from StartMenu, True - pin to StartMenu
var
    hInst: THandle;
    buf: array [0..259] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if not FileExists(szFilename) then Exit;
    if GetWindowsVersion > $06020000 then Exit; { Window 8 and above }

    { Windows 7 }
    if (GetWindowsVersion >= $06010000) and boolean(SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0)) then
    begin
        while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
        if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\') + ExtractFileName(strLnk)) then Exit;
    end;

    { String resources }
    if IsPin then
        res := 5381    { Pin to Start Men&u }
    else
        res := 5382;    { Unpin from Start Men&u }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');

            { below Windows 7 }
            if GetWindowsVersion < $06010000 then
            begin
                objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).InvokeVerb(strVerb);
                Result := True;
            end;

            { Windows 7 }
            if GetWindowsVersion >= $06010000 then
            begin
                colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
                for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
                begin
                    colVerbs.Item[i].DoIt;
                    Result := True;
                    Break;
                end;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
    wpFinished:
        begin
      if IsTaskSelected('icons\taskbaricon') then
        PinToTaskbar(ExpandConstant('{app}\app.exe'), True);
      if IsTaskSelected('icons\startmenuicon') then
        PinToStartMenu(ExpandConstant('{app}\app.exe'), True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall:
      begin
      PinToTaskbar(ExpandConstant('{app}\app.exe'), False);
      PinToStartMenu(ExpandConstant('{app}\app.exe'), False);
      end;
    end;
end;


ZVSRus 26-11-2015 19:08 2579125

Цитата:

Цитата habib2302
меня больше всего интересует оформление

Вы имеете ввиду скрипт?.

habib2302 26-11-2015 19:46 2579136

ZVSRus, ага

ZVSRus 26-11-2015 20:04 2579141

Цитата:

Цитата habib2302
ага

Скрипта как токового еще нет.
Есть наброски, т.е. на вновь созданной странице прикрутить 2 чекбокса.
И сразу 2 вопрос, где-то в справке находил как закрепить в меню пуск. {userstartmenu} & {commonstartmenu} Путь к "корню" меню Пуск.
А закрепить на панели задач никак. 2 вопрос заключается в том, можно-ли закрепить ярлык на панели задач через секцию [Icons], чтобы реально закреплялся.
Сам скрипт.
Скрытый текст
Код:

[Setup]
 AppName=ACDSee 5.0 Power Pack
 AppVersion=ACDSee 5.0 Power Pack
 DefaultDirName={pf}\ACD Systems
 DefaultGroupName=ACD Systems
 OutputDir=.
 UsePreviousAppDir=no
 UsePreviousGroup=no
 OutputBaseFilename=setup
 Compression=lzma
 SolidCompression=yes
 
[Languages]
 Name: "english"; MessagesFile: "compiler:Languages\English.isl"
 Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
 
[Files]
 Source: "C:\Program Files (x86)\Inno Setup v.5.5.1\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
// Name: "{group}\{AppName}"; Filename: "{app}\{AppExeName}" 
// Name: "{group}\{cm:UninstallProgram,{AppName}}"; Filename: "{uninstallexe}"
// Name: "{commondesktop}\{AppName}"; Filename: "{app}\{AppExeName}"; Tasks: desktopicon
// Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{AppName}"; Filename: "{app}\{AppExeName}"; Tasks: quicklaunchicon

[Run]
//Filename: "{app}\{AppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[Code ]
 var
  ComponentPage: TWizardPage;
 
  InstallerImage: TBitmapImage;
  PortableImage: TBitmapImage;
  FlagImage: TBitmapImage;
 
  InstallerGroupBox: TNewGroupBox;
  InstallerRadioButton: TNewRadioButton;
  PortableRadioButton: TNewRadioButton;
 
  IconsGroupBox: TNewGroupBox;
  DesktopIconCheck: TNewCheckBox;
  PuskIconCheck: TNewCheckBox;
  PanelZadachCheck: TNewCheckBox;
  PanelPuskCheck: TNewCheckBox;
 
  LangGroupBox: TNewGroupBox;
  LangRUS: TNewRadioButton;
  LangENG: TNewRadioButton;
 

procedure InitializeWizard();
begin
begin
  ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', '...');

  InstallerImage := TBitmapImage.Create(WizardForm);
  with InstallerImage do
  begin
    Parent := ComponentPage.Surface;
    Left := ScaleX(227);
    Top := ScaleY(5);
    Width := ScaleX(190);
    Height := ScaleY(160);
  end;

  PortableImage := TBitmapImage.Create(WizardForm);
  with PortableImage do
  begin
    Parent := ComponentPage.Surface;
    Left := ScaleX(227);
    Top := ScaleY(5);
    Width := ScaleX(190);
    Height := ScaleY(160);
  end;

  FlagImage := TBitmapImage.Create(WizardForm);
  with FlagImage do
  begin
    Parent := ComponentPage.Surface;
    Left := ScaleX(252);
    Top := ScaleY(167);
    Width := ScaleX(110);
    Height := ScaleY(70);
  end;

  InstallerGroupBox := TNewGroupBox.Create(WizardForm);
  with InstallerGroupBox do
  begin
    Parent := ComponentPage.Surface;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(205);
    Height := ScaleY(64);
    Caption := 'Тип установки:';
  end;

  InstallerRadioButton := TNewRadioButton.Create(WizardForm);
  with InstallerRadioButton do
  begin
    Parent := InstallerGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(14);
    Width := ScaleX(190);
    Height := ScaleY(17);
    Caption := 'Установка обычной версии';
    Checked := True;
    TabStop := True;
    OnClick := @InstallerRadioButtonClick;
  end;

  PortableRadioButton := TNewRadioButton.Create(WizardForm);
  with PortableRadioButton do
  begin
    Parent := InstallerGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(39);
    Width := ScaleX(190);
    Height := ScaleY(17);
    Caption := 'Распаковка портативной версии';
    OnClick := @PortableRadioButtonClick;
  end;

  IconsGroupBox := TNewGroupBox.Create(WizardForm);
  with IconsGroupBox do
  begin
    Parent := ComponentPage.Surface;
    Left := ScaleX(0);
    Top := ScaleY(74);
    Width := ScaleX(205);
    Height := ScaleY(114);
    Caption := 'Дополнительно:';
  end;

  DesktopIconCheck := TNewCheckBox.Create(WizardForm);
  with DesktopIconCheck do
  begin
    Parent := IconsGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(14);
    Width := ScaleX(190);
    Height := ScaleY(17);
    Caption := 'Ярлык(и) на рабочем столе';
    OnClick := @DesktopIconCheckClick;
    Checked := True;
  end;

  PuskIconCheck := TNewCheckBox.Create(WizardForm);
  with PuskIconCheck do
  begin
    Parent := IconsGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(39);
    Width := ScaleX(190);
    Height := ScaleY(17);
    Caption := 'Ярлык(и) в меню пуск';
    OnClick := @PuskIconCheckClick;
    Checked := True;
  end;

  PanelZadachCheck := TNewCheckBox.Create(WizardForm);
  with PanelZadachCheck do
  begin
    Parent := IconsGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(64);
    Width := ScaleX(190);
    Height := ScaleY(17);
    Caption := 'Закрепить ярлык в панели задач';
    OnClick := @PanelZadachCheckClick;
  end;

  PanelPuskCheck := TNewCheckBox.Create(WizardForm);
  with PanelPuskCheck do
  begin
    Parent := IconsGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(89);
    Width := ScaleX(190);
    Height := ScaleY(17);
    Caption := 'Закрепить ярлык в меню пуск';
    OnClick := @PanelPuskCheckClick;
  end;

  LangGroupBox := TNewGroupBox.Create(WizardForm);
  with LangGroupBox do
  begin
    Parent := ComponentPage.Surface;
    Left := ScaleX(0);
    Top := ScaleY(197);
    Width := ScaleX(205);
    Height := ScaleY(39);
    Caption := 'Язык интерфейса:';
  end;

  LangRUS := TNewRadioButton.Create(WizardForm);
  with LangRUS do
  begin
    Parent := LangGroupBox;
    Left := ScaleX(40);
    Top := ScaleY(14);
    Width := ScaleX(40);
    Height := ScaleY(17);
    Caption := 'RUS';
    Checked := True;
  end;

  LangENG := TNewRadioButton.Create(WizardForm);
  with LangENG do
  begin
    Parent := LangGroupBox;
    Left := ScaleX(130);
    Top := ScaleY(14);
    Width := ScaleX(40);
    Height := ScaleY(17);
    Caption := 'ENG';
  end;
end;
end;


habib2302 27-11-2015 09:18 2579295

Доброе время суток. Помогите с кодом. Пытаюсь выполнить удаление файлов через unlocker, но происходит "exit code: 1" после запуска
Код:

[Files]
Source: unlock\*; Flags: dontcopy;

[code]
var
  RC: integer;
  lpBuff: String;

function InitializeSetup(): Boolean;
begin
    ExtractTemporaryFile('Unlocker.exe');
    ExtractTemporaryFile('UnlockerCOM.dll');
    ExtractTemporaryFile('UnlockerDriver5.sys');
    ExtractTemporaryFile('UnlockerInject32.exe');
    if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver', 'InstallLocation', lpBuff) then
    Exec(ExpandConstant('{tmp}\Unlocker.exe'), ' "lpBuff\RarExt.dll" /S /D', '', SW_HIDE, ewWaitUntilTerminated, RC)
    Exec(ExpandConstant('{tmp}\Unlocker.exe'), ' "lpBuff\RarExt32.dll" /S /D', '', SW_HIDE, ewWaitUntilTerminated, RC)
    Exec(ExpandConstant('{tmp}\Unlocker.exe'), ' "lpBuff\RarLng.dll" /S /D', '', SW_HIDE, ewWaitUntilTerminated, RC)
end;

https://yadi.sk/d/6b-vcZyIkmjcy

El Sanchez 27-11-2015 14:36 2579379

Цитата:

Цитата habib2302
Пытаюсь выполнить удаление файлов через unlocker, но происходит "exit code: 1" после запуска »

habib2302, а с чего это имя переменной lpBuff, а не её значение, входит в комстроку? Нужно так:
Код:

Exec(ExpandConstant('{tmp}\Unlocker.exe'), Format('"%s\RarExt.dll" /S /D', [lpBuff]), '', SW_HIDE, ewWaitUntilTerminated, RC)
Да и все 3 вызова не помешало бы в блок begin - end обернуть после условия.

habib2302 27-11-2015 19:20 2579435

El Sanchez, и можно как то пропустить этот момент

т.к инсталлятор ругается на отсутствие файлов
Цитата:

Found pending rename or delete that matches one of our files: c:\program files\winrar\rarext.dll

mouri 28-11-2015 02:33 2579514

Подскажите, как проверить синтаксис ввода. Через edit забиваются параметры в конфиг, должны соответствовать шаблону --param1 --param2 и т.д.

BMODS 28-11-2015 21:13 2579674

Всем привет, нужны компоненты с галочкой без галочки с кружочком и зачеркнутые компоненты с галочкой и кружочком.

BMODS 29-11-2015 10:27 2579785

Не у кого нет примеров компонентов что ли?

kotyarko@fb 29-11-2015 11:02 2579788

Цитата:

Цитата BMODS
Всем привет, нужны компоненты с галочкой без галочки с кружочком и зачеркнутые компоненты с галочкой и кружочком. »

Например:
Скрытый текст
Код:

[Components]
Name: a; Description: Компонент 1.;
Name: b; Description: Компонент 2.; Flags: exclusive;
Name: c; Description: Компонент 3.; Flags: exclusive;
Name: d; Description: Компонент 4.; Flags: fixed;
Name: e; Description: Компонент 5.; Flags: fixed;
Name: f; Description: Компонент 6.; Flags: fixed exclusive;
Name: g; Description: Компонент 7.; Flags: fixed exclusive;

[*Code]
Procedure InitializeWizard();
var
 I: Integer;
begin
 with WizardForm.ComponentsList do
  for I := 0 to ItemCount - 1 do
  if not ItemEnabled[i] then
    ItemFontStyle[i] := [fsStrikeOut];
end;


BMODS 29-11-2015 11:53 2579793

kotyarko@fb, а как со снятыми галочками выставить

kotyarko@fb 29-11-2015 12:14 2579799

Цитата:

Цитата BMODS
а как со снятыми галочками выставить »

Не понял вопроса.

ZVSRus 29-11-2015 13:34 2579813

Всем Доброго времени суток.
Есть скрипт где на странице Welcome присутствует кнопка "Назад" при нажатии ничего не происходит.
Можно ли как-то реализовать эту кнопку, чтобы она возвращала назад на диалоговое окно выбора языка.
Скрипт
Скрытый текст
Код:

[Setup]
 AppName=My Application
 AppVersion=1.5
 DefaultDirName={pf}\My Application

[Languages]
 Name: "english"; MessagesFile: "compiler:Languages\English.isl"
 Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
 
[Code*]
 Procedure CurPageChanged(CurPageID: Integer);
 begin
  case CurPageID of
  wpWelcome:
  begin
  WizardForm.BackButton.Show;
  WizardForm.BackButton.Enabled:= True; //False;
  end
  else
  WizardForm.BackButton.Enabled := True;
  end;
 end;


sergey3695 29-11-2015 16:33 2579856

Цитата:

Цитата ZVSRus
чтобы она возвращала назад на диалоговое окно выбора языка.
Скрипт »

если только перезапуск установщика только, тогда будет диалоговое окошко.

ZVSRus 29-11-2015 16:59 2579861

Цитата:

Цитата sergey3695
если только перезапуск установщика

То что перезапуск установщика, это понятно. Кто делал данный скрипт т.е. вернул кнопку
на стр. Приветствия наверное что-то имел ввиду. А так для чего это все.

BMODS 29-11-2015 18:01 2579869

kotyarko@fb, Все норм спасибо большое

Bartron 29-11-2015 18:07 2579871

Всем привет. Нашёл функции для определения типа дисков
Скрытый текст
function REMOVABLE(Drive: String): Boolean;
begin
Result:= GetDriveType(Drive) = 2;
end;

function REMOTE(Drive: String): Boolean;
begin
Result:= GetDriveType(Drive) = 4;
end;

function CDROM(Drive: String): Boolean;
begin
Result:= GetDriveType(Drive) = 5;
end;
Можно ли их как-нибудь объединить в общуу функцию?

El Sanchez 30-11-2015 10:08 2579995

Цитата:

Цитата habib2302
и можно как то пропустить этот момент
т.к инсталлятор ругается на отсутствие файлов»

habib2302, нет, он ругается на то, что при деинсталляции файлы помечены для удаления после перезагрузки. Скрин демонстрирует, что перезагрузки не было. Just do it.
Цитата:

Цитата ZVSRus
Можно ли как-то реализовать эту кнопку, чтобы она возвращала назад на диалоговое окно выбора языка. »

ZVSRus, нет.
Цитата:

Цитата ZVSRus
Кто делал данный скрипт т.е. вернул кнопку
на стр. Приветствия наверное что-то имел ввиду. »

ZVSRus, тот, кто вернул кнопку, головой не думает.

ZVSRus 30-11-2015 13:37 2580036

Цитата:

Цитата El Sanchez
тот, кто вернул кнопку, головой не думает

Спасибо за подсказку. Встречал скрипт с кнопкой Назад на финишной странице.
Наверное из того же репертуара.

habib2302 30-11-2015 13:50 2580041

Цитата:

Цитата El Sanchez
нет, он ругается на то, что при деинсталляции файлы помечены для удаления после перезагрузки. Скрин демонстрирует, что перезагрузки не было. Just do it. »

не могу въехать. но, перезагрузка ничего не дает. т.е по прежнему вылезает эта страница после повторного запуска инсталлятора. и как это понять
Цитата:

помечены для удаления после перезагрузки.

kotyarko@fb 30-11-2015 19:07 2580153

Цитата:

Цитата ZVSRus
Встречал скрипт с кнопкой Назад на финишной странице.
Наверное из того же репертуара »

Не факт. Ведь есть InfoAfterFile или какая-либо кастомная страница, перед финишной.

ZVSRus 30-11-2015 21:05 2580182

Цитата:

Цитата kotyarko@fb
Не факт. Ведь есть InfoAfterFile

Я имел ввиду InstallingPage или более ранние стандартные страницы

habib2302 01-12-2015 08:51 2580260

Как сделать проверку наличие папок с любым названием и чтобы инсталлятор копировал из {src} в {app}?

kotyarko@fb 01-12-2015 09:54 2580273

Цитата:

Цитата habib2302
Как сделать проверку наличие папок с любым названием и чтобы инсталлятор копировал из {src} в {app}? »

Если я правильно вас понял:
Код:

Procedure CurStepChanged(CurStep: TSetupStep);
var
 TFR: TFindRec;
begin
 if CurStep = ssInstall then
  if FindFirst(ExpandConstant('{src}\') + '*', TFR) then
  try
    repeat
    if (TFR.Name <> '.') and (TFR.Name <> '..') then
      if TFR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then
      MsgBox(ExpandConstant('{src}\') + TFR.Name, mbInformation, MB_OK);
    until not FindNext(TFR);
  finally
    FindClose(TFR);
  end;
end;

Вместо MsgBox`а пропишите копирование папки, например, с помощью SHFileOperation.

habib2302 01-12-2015 12:01 2580303

kotyarko@fb, и как на файлы
а что нибудь попроще допустим через DirExists

kotyarko@fb 01-12-2015 16:04 2580366

Цитата:

Цитата habib2302
а что нибудь попроще допустим через DirExists »

Если проще, то можете попробовать из того же SHFile применить функцию CopyDir и указать что-то типа: '{src}\*'. Т.к. там есть то же условие (if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY), то может получится.

El Sanchez 01-12-2015 17:25 2580379

Цитата:

Цитата habib2302
Как сделать проверку наличие папок с любым названием и чтобы инсталлятор копировал из {src} в {app}? »

habib2302, пример:
Код:

[Run]
Filename: {cmd}; Parameters: "/c for /D %? in (*) do xcopy ""%?"" ""{app}\%?"" /ECIHRZY"; WorkingDir: {src}; Flags: runhidden


kotovb 03-12-2015 14:34 2581052

При компиляции выводится ошибка из-за апострофа в названии (Alan Wake's American Nightmare). Как можно скомпилировать скрипт не убирая его?

Код:

function ApplicationName(Default:String):String;
begin
#define ApplicationName ReadIni(SourcePath        + "\Temp\Setup.ini", "Application", "Name", "")
Result:='{Alan Wake's American Nightmare}';
end;

_______________________________________________________________________________

Всё, разобрался. Нужно было два апострофа делать и тогда всё нормально.

ZVSRus 03-12-2015 20:03 2581139

Знающие люди подскажите, как под стандартные "DirEdit и DirBrowseButton" сделать подложку "TNewGroupBox"

Dodakaedr 03-12-2015 20:43 2581157

ZVSRus, В свойствах DirEdit и DirBrowseButton задайте parent TNewGroupBox

ZVSRus 03-12-2015 21:15 2581172

Dodakaedr, А можно поподробнее

vint56 04-12-2015 11:34 2581326

ZVSRus,
Скрытый текст
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DisableProgramGroupPage=yes

[code]
var
GroupBox1,GroupBox2: TNewGroupBox;

procedure InitializeWizard();
begin
GroupBox1 := TNewGroupBox.Create(WizardForm);
with GroupBox1 do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(75);
Width := ScaleX(417);
Height := ScaleY(65);
end;
GroupBox2 := TNewGroupBox.Create(WizardForm);
with GroupBox2 do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(150);
Width := ScaleX(417);
Height := ScaleY(65);
end;
with WizardForm.DirEdit do
begin
Left := ScaleX(10);
Top := ScaleY(20);
Width := ScaleX(310);
Parent := GroupBox1;
end;
with WizardForm.DirBrowseButton do
begin
Left := ScaleX(330);
Top := ScaleY(20);
Parent := GroupBox1;
end;
with WizardForm.GroupEdit do
begin
Left := ScaleX(10);
Top := ScaleY(20);
Width := ScaleX(310);
Parent := GroupBox2;
end;
with WizardForm.GroupBrowseButton do
begin
Top := ScaleY(20);
Left := ScaleX(330);
Parent := GroupBox2;
end;
end;

ZVSRus 04-12-2015 23:11 2581537

Ребята помогите пожалуйста.
Скрипт
Скрытый текст
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.
UsePreviousAppDir=no
UsePreviousGroup=no

[Code ]
var
 Component: TWizardPage;

  Panel1: TPanel;
  Bevel1: TBevel;

  InstallerGroupBox: TNewGroupBox;
  Installer: TNewRadioButton;
  Portable: TNewRadioButton;

  IconsGroupBox: TNewGroupBox;
  DesktopIcon: TNewCheckBox;
  PuskIcon: TNewCheckBox;
  PanelZadach: TNewCheckBox;
  PanelPusk: TNewCheckBox;

  function InstallerCheck: Boolean;
 begin
 
Result := Installer.Checked;
 end;

 function PortableCheck: Boolean;
 begin
 
Result := Portable.Checked;
 end;

 function DesktopIconCheck: Boolean;
 begin
 
Result:= DesktopIcon.Checked;
 end;

 function PuskIconCheck: Boolean;
 begin
 
Result:= PuskIcon.Checked;
 end;

function PanelZadachCheck: Boolean;
 begin
 
Result:= PanelZadach.Checked;
 end;

 procedure CompClick(Sender: TObject);
 begin
  case
TNewRadioButton(Sender) of
 
Portable:
  begin
 
DesktopIcon.Checked:=False;
  DesktopIcon.Enabled:= DesktopIcon.Checked;
  PuskIcon.Checked:=False;
  PuskIcon.Enabled:= PuskIcon.Checked;
  PanelZadach.Checked:=False;
  PanelZadach.Enabled:= PanelZadach.Checked;
  PanelPusk.Checked:=False;
  PanelPusk.Enabled:= PanelPusk.Checked;
  end;

  Installer:                                                                         
  begin
 
DesktopIcon.Checked:=True;
  DesktopIcon.Enabled:= DesktopIcon.Checked;
  PuskIcon.Checked:=True;
  PuskIcon.Enabled:= PuskIcon.Checked;
  PanelZadach.Checked:=true;
  PanelZadach.Enabled:= PanelZadach.Checked;
  PanelPusk.Checked:=True;
  PanelPusk.Enabled:= PanelPusk.Checked;
  end;
 end;
end;

procedure InitializeWizard();
begin
 
Component := CreateCustomPage(wpWelcome, 'Выбор типа установки', '...');

  with WizardForm.InnerNotebook do
  begin
   
Left := ScaleX(20);
    Top := ScaleY(60);
    Width := ScaleX(457);
    Height := ScaleY(250);
  end;

    Panel1 := TPanel.Create(WizardForm);
  with Panel1 do
  begin
   
Parent := Component.Surface;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(457);
    Height := ScaleY(250);
  end;

  Bevel1 := TBevel.Create(WizardForm);
  with Bevel1 do
  begin
   
Parent := Panel1;
    Left := ScaleX(5);
    Top := ScaleY(5);
    Width := ScaleX(447);
    Height := ScaleY(240);
  end;

  InstallerGroupBox := TNewGroupBox.Create(WizardForm);
  with InstallerGroupBox do
  begin
   
Parent := Panel1;
    Left := ScaleX(10);
    Top := ScaleY(8);
    Width := ScaleX(210);
    Height := ScaleY(64);
    Caption := 'Тип установки:';
  end;

  Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
   
Parent := InstallerGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(14);
    Width := ScaleX(195);
    Height := ScaleY(17);
    Caption := 'Установка обычной версии';
    Checked := True
    OnClick:=@CompClick;
  end;

  Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
   
Parent := InstallerGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(39);
    Width := ScaleX(195);
    Height := ScaleY(17);
    Caption := 'Распаковка портативной версии';
    OnClick:=@CompClick;
  end;

  IconsGroupBox := TNewGroupBox.Create(WizardForm);
  with IconsGroupBox do
  begin
   
Parent := Panel1;
    Left := ScaleX(10);
    Top := ScaleY(80);
    Width := ScaleX(210);
    Height := ScaleY(114);
    Caption := 'Компоненты:';
  end;

  DesktopIcon := TNewCheckBox.Create(WizardForm);
  with DesktopIcon do
  begin
   
Parent := IconsGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(14);
    Width := ScaleX(195);
    Height := ScaleY(17);
    Caption := 'Ярлык на рабочем столе';
    Checked := True
  end;

  PuskIcon := TNewCheckBox.Create(WizardForm);
  with PuskIcon do
  begin
   
Parent := IconsGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(39);
    Width := ScaleX(195);
    Height := ScaleY(17);
    Caption := 'Ярлык в меню Пуск';
    Checked := True
  end;

  PanelZadach := TNewCheckBox.Create(WizardForm);
  with PanelZadach do
  begin
   
Parent := IconsGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(64);
    Width := ScaleX(195);
    Height := ScaleY(17);
    Caption := 'Закрепить на панели задач';
    Checked := False
  end;

  PanelPusk := TNewCheckBox.Create(WizardForm);
  with PanelPusk do
  begin
   
Parent := IconsGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(89);
    Width := ScaleX(195);
    Height := ScaleY(17);
    Caption := 'Закрепить в меню Пуск';
    Checked := False
 end;
end;


Как сделать что-бы при возвращении с Portable распаковки на Installer установку
два нижних чекбокса были видны но галочки не стояли.
Нужно что-то поменять, не знаю что.

TryRooM 04-12-2015 23:45 2581549

ZVSRus, Так
Скрытый текст
Код:

Installer:
  begin
  DesktopIcon.Checked:=True;
  DesktopIcon.Enabled:= DesktopIcon.Checked;
  PuskIcon.Checked:=True;
  PuskIcon.Enabled:= PuskIcon.Checked;
  PanelZadach.Checked:=False;
  PanelZadach.Enabled:=True;
  PanelPusk.Checked:=False;
  PanelPusk.Enabled:= True;
  end;
 end;
end;


habib2302 05-12-2015 18:18 2581748

помогите переместить на задний план NewGroupBox1
NewGroupBox1
Код:

[Code]
var
  NewGroupBox1: TNewGroupBox;

procedure InitializeWizard;
begin
  with WizardForm.DirBrowseButton do
  begin
    Left := ScaleX(326);
    Top := ScaleY(128);
  end;

  with WizardForm.DirEdit do
  begin
    Left := ScaleX(16);
    Top := ScaleY(129);
    Width := ScaleX(300);
  end;

  { NewGroupBox1 }
  NewGroupBox1 := TNewGroupBox.Create(WizardForm);
  with NewGroupBox1 do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(0);
    Top := ScaleY(104);
    Width := ScaleX(417);
    Height := ScaleY(57);
    Caption := 'NewGroupBox1';
  end;

  NewGroupBox1.TabOrder := 5;
end;



Мой скрипт

TryRooM 05-12-2015 19:37 2581771

habib2302,
Пробуйте
http://rghost.ru/8td6vQNGj

ZVSRus 05-12-2015 19:48 2581776

Цитата:

Цитата habib2302
помогите переместить на задний план NewGroupBox1

Если Вы имеете ввиду NewCroupBox1 сделать подложкой под стандартные диалоги,
то чуть выше скрипт от vint56

ZVSRus 12-12-2015 22:05 2584217

Всем Доброе время суток.
Может кто знает, как в оригинальный INNO установщик запихнуть DLL,ку,
и прописать ее в реестре, что-бы при деинсталляции она удалялась.

vadjliss 13-12-2015 14:17 2584357

парни что сделать если программа больше 5 гигов,а то выдаёт ошибку
я в setap прописал DiskSliceSize=1987570657
результат нулевой

kotyarko@fb 13-12-2015 20:46 2584491

vadjliss,
Код:

[Setup]
DiskSpanning=yes


Stealthmax 13-12-2015 21:55 2584515

Цитата:

Цитата habib2302
Доброе время суток. Помогите с кодом. Пытаюсь выполнить удаление файлов через unlocker, но происходит "exit code: 1" после запуска »

Дружище, зачем такой изврат? Все банальнее и проще:
Код:

[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  ErrorCode: Integer;
begin
  case CurUninstallStep of
    usPostUninstall:
    begin
    //отмена регистрации *.dll
    Exec(ExpandConstant('{sys}')+'\regsvr32.exe', '/u /s ' + ExpandConstant('{pf}') + '\WinRar\RarExt.dll', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
    //освобождаем dll-ку перезапуском Проводника
    Exec('cmd', '/C WMIC PROCESS WHERE Name="explorer.exe" delete & WMIC PROCESS WHERE Name="explorer.exe" call SetPriority 64', '', sw_hide, ewWaitUntilTerminated, ErrorCode);
    //Exec('cmd', '/C WMIC PROCESS WHERE Name="explorer.exe" CALL Terminate', '', sw_hide, ewWaitUntilTerminated, ErrorCode); // либо этот вариант
    //далее удаляем папки, файлы
    end;
end;

В любом случае, Unlocker при выполнении команды принудительно перезапустит оболочку Проводника. Так что лишние телодвижения ни к чему.

ZVSRus 16-12-2015 18:14 2585465

Парни подскажите, как сделать чтобы файл удалялся вместе со всеми файлами при деинсталляции.
Файл (DLL) добавлен в дистрибутив отдельно для регистрации.

sergey3695 17-12-2015 17:14 2585802

ZVSRus,
Код:

[UninstallDelete]
Type: FilesAndOrDirs; Name: {app};


ZVSRus 17-12-2015 18:31 2585831

sergey3695,
[UninstallDelete]
Type: FilesAndOrDirs; Name: {app};
Результат нулевой, как не удалялся, так и не удаляется.
Наверное надо как-то через скрипт.

Nordek 17-12-2015 20:01 2585856

Цитата:

Цитата ZVSRus
Файл (DLL) добавлен в дистрибутив отдельно для регистрации. »

Смотрите флаг regserver - При установке регистрирует, при деинсталляции отменяет регистрацию.
Т.е:
Код:

[Files]
Source: example.dll; DestDir: {app}; Flags: regserver


ZVSRus 17-12-2015 20:44 2585872

Цитата:

Цитата Nordek
Source: example.dll; DestDir: {app}; Flags: regserver

Результат нулевой. Деинстоллятором не удаляется. Вручную легко.
Когда msimg32.dll находится в папке с программой, программа становится зарегестрированной.
Если ее убрать программа не зарегестрирована.
Прога Light Image Resizer 4.7.6.1

TryRooM 17-12-2015 21:19 2585884

ZVSRus,
Цитата:

Цитата ZVSRus
Наверное надо как-то через скрипт. »

Код:

Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usPostUninstall)  then
UnloadDLL(ExpandConstant('{app}\msimg32.dll'));
DeleteFile(ExpandConstant('{app}\msimg32.dll'));
end;


ZVSRus 17-12-2015 21:40 2585893

Цитата:

Цитата TryRooM
Наверное надо как-то через скрипт

DLL,ка удалилась но остались папки в которой она находилась.
наверное надо что-то дописать к процедуре.

Nordek 17-12-2015 23:06 2585937

Цитата:

Цитата ZVSRus
msimg32.dll »

GDIEXT Client DLL уже есть и в Windows XP и в Windows 7 в папке System32.

Цитата:

Цитата ZVSRus
наверное надо что-то дописать »

Код:

DelTree(ExpandConstant('{app}'), True, True, True);

ZVSRus 17-12-2015 23:28 2585947

Цитата:

Цитата Nordek
Код:

DelTree(ExpandConstant('{app}'), True, True, True);

Удаляет все в чистую в таком виде:
Код:

  UnloadDLL(ExpandConstant('{app}\msimg32.dll'));
  DeleteFile(ExpandConstant('{app}\msimg32.dll'));
  DelTree(ExpandConstant('{app}'), True, True, True);
  RemoveDir(ExpandConstant('{app}'));
  RemoveDir(ExpandConstant('{pf}\ObviousIdea'));

Но только почему то, как и да этой процедуры выдает сообщение,
что часть элементов осталась, вы можете остальное удалить вручную.
Хотя ничего нет, все удалилось.

ZVSRus 18-12-2015 09:03 2586044

Как убрать это сообщение:

BMODS 18-12-2015 12:12 2586108

Как в компоненты добавить установку шрифтов в папку Windows fonts.

kotyarko@fb 18-12-2015 12:36 2586117

BMODS,
Код:

[Files]
Source: "Font.otf"; DestDir: "{fonts}"; FontInstall: "Font_Real_Name"; Flags: fontisnttruetype onlyifdoesntexist uninsneveruninstall
Source: "Font2.ttf"; DestDir: "{fonts}"; FontInstall: "Font2_Real_Name"; Flags: onlyifdoesntexist uninsneveruninstall

Всё это есть в справке.

BMODS 18-12-2015 13:40 2586141

kotyarko@fb, а путь как указать ?

BMODS 18-12-2015 13:58 2586155

Примеры тут были знаю может кто скинуть :)

kotyarko@fb 18-12-2015 14:40 2586172

Цитата:

Цитата BMODS
а путь как указать ? »

Путь чего?

Dodakaedr 18-12-2015 16:49 2586203

Подскажите, как можно заменить несколько десятков значений на свое в ini файле?
Имеется ini файл на 1130 строк и в разных секциях в разных ключах есть определенное значение (%Programm Path%) вот и требуется его заменить. Через секцию [INI] не вариант.

Цитата:

Цитата ZVSRus
Но только почему то, как и да этой процедуры выдает сообщение,
что часть элементов осталась, вы можете остальное удалить вручную.
Хотя ничего нет, все удалилось. »

Так пробовали?
Скрытый текст
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[UninstallDelete]
Type: FilesAndOrDirs; Name: {app};

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then // или usUninstall
    begin
    UnloadDLL(ExpandConstant('{app}\msimg32.dll'));
    DeleteFile(ExpandConstant('{app}\msimg32.dll'));
    end;
  //if CurUninstallStep = usDone then DelTree(ExpandConstant('{app}'), True, True, True);
end;


ZVSRus 18-12-2015 18:28 2586228

Цитата:

Цитата Dodakaedr
Так пробовали?

Так помогло. Только выдает сообщение, картинка чуть выше.
Где-то в системе наверное остались папки, (или в реестре записи) не могу найти.
Это сообщение напрягает.

Dodakaedr 18-12-2015 21:08 2586282

Цитата:

Цитата ZVSRus
Только выдает сообщение, картинка чуть выше. »

Если хвостов действительно нет, то можно вот так сделать:
Скрытый текст
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Messages]
UninstalledMost=Программа My Application была полностью удалена с вашего компьютера.

[UninstallDelete]
Type: FilesAndOrDirs; Name: {app};

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then // или usUninstall
    begin
    UnloadDLL(ExpandConstant('{app}\msimg32.dll'));
    DeleteFile(ExpandConstant('{app}\msimg32.dll'));
    end;
  //if CurUninstallStep = usDone then DelTree(ExpandConstant('{app}'), True, True, True);
end;


ZVSRus 18-12-2015 21:57 2586296

Цитата:

Цитата Dodakaedr
Если хвостов действительно нет

Скорее всего остались хвосты после этих записей.
Код:

Name: "{userstartmenu}\Light Image Resizer 4"; Filename: "{app}\{#MyAppExeName}"; Check: PanelPuskCheck and UserIconCheck;
 Name: "{commonstartmenu}\Light Image Resizer 4"; Filename: "{app}\{#MyAppExeName}"; Check: PanelPuskCheck and AllUserIconCheck;

Как зайти в эти папки?
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ObviousIdea\Light Image Resizer 4\Light Image Resizer 4.lnk
C:\Users\ZVSRus\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\ObviousIdea\Light Image Resizer 4\Light Image Resizer 4.lnk
Если так:
Код:

Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if (CurUninstallStep = usPostUninstall)  then
  UnloadDLL(ExpandConstant('{app}\msimg32.dll'));
  DeleteFile(ExpandConstant('{app}\msimg32.dll'));
  DelTree(ExpandConstant('{app}'), True, True, True);
  RemoveDir(ExpandConstant('{pf}\ObviousIdea'));
  RemoveDir(ExpandConstant('{userstartmenu}\ObviousIdea'));
  RemoveDir(ExpandConstant('{commonstartmenu}\ObviousIdea'));
end;

Так папки удалятся или нет

Dodakaedr 18-12-2015 22:10 2586300

Цитата:

Цитата ZVSRus
Так папки удалятся или нет »

Возьмите и проверьте. Но ярлыки если создавались инсталлятором, то они и будут удалены созданным деинсталлятором.

ZVSRus 19-12-2015 14:38 2586439

В секции Run есть ссылка на запуск интернет страницы через чекбокс на финишной странице.
Как прикрутить эту ссылку к кнопкам на диалоговом окне вместо финишной страницы. (FinishedPage) пропущена.
Код:

[Run]
 Filename: "http://www.obviousidea.com/windows-software/light-image-resizer/how-to-resize-a-photo/"; Description: "{cm:LaunchGuide,Light Image Resizer 4}"; MinVersion: 0.0,5.0; Flags: shellexec postinstall skipifsilent nowait


Dodakaedr 19-12-2015 18:34 2586504

Цитата:

Цитата ZVSRus
Как прикрутить эту ссылку к кнопкам на диалоговом окне вместо финишной страницы »

Создайте задачу в tasks либо отдельно чекбокс и открывайте ссылку по окончанию установки.
Так
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DisableReadyPage=yes
DisableFinishedPage=yes

[Code]
var
LinkProg: TNewCheckBox;

procedure InitializeWizard();
begin
  LinkProg := TNewCheckBox.Create(WizardForm);
  LinkProg.Parent := WizardForm.SelectDirPage;
  LinkProg.Caption := 'Посетить сайт программы';
  LinkProg.SetBounds(ScaleX(1), ScaleY(WizardForm.DirEdit.Top + 25), ScaleX(148), ScaleY(20));
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
r: integer;
begin
  if CurStep = ssDone then
  begin
    MsgBox('Установка завершена', mbInformation, MB_OK);
    if LinkProg.Checked then
    ShellExec('', 'http://www.obviousidea.com/windows-software/light-image-resizer/how-to-resize-a-photo/', '','', SW_SHOW, ewNoWait, r);
  end;
end;


Либо так
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DisableFinishedPage=yes

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
r: integer;
begin
  if CurStep = ssDone then
  begin
    if MsgBox('Установка завершена!'+#13#10'Посетить сайт программы?', mbInformation, MB_YESNO) = IDYES then
      ShellExec('', 'http://www.obviousidea.com/windows-software/light-image-resizer/how-to-resize-a-photo/', '','', SW_SHOW, ewNoWait, r);
  end;
end;


Кнопку на диалоговом окне, насколько я знаю не создать.

vadjliss 19-12-2015 21:04 2586557

парни помогите или подскажите скрипт

ZVSRus 19-12-2015 21:30 2586563

Цитата:

Цитата Dodakaedr
Кнопку на диалоговом окне, насколько я знаю не создать.

Оба скрипта работают. Все хорошо.
Но хотелось бы запуск страницы прикрутить к скрипту ниже.
Прикрутить к чекбоксу.
Скрипт
Скрытый текст

Код:

//#include "botva2.iss"

[Setup]
AppName=ACDSee 5.0 Power Pack
AppVersion=ACDSee 5.0 Power Pack
DefaultDirName={pf}\ACD Systems
DisableFinishedPage=yes
OutputDir=.
UsePreviousAppDir=no
UsePreviousGroup=no
//SetupIconFile=icon.ico

[files]
//Source: "b2p.dll"; DestDir: "{tmp}"; Flags: dontcopy
//Source: "botva2.dll"; DestDir: "{tmp}"; Flags: dontcopy
//Source: "Icon.png"; DestDir: "{tmp}"; Flags: dontcopy

[ Code]
//function InitializeSetup(): Boolean;
//begin
//if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
//if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
//if not FileExists(ExpandConstant('{tmp}\icon.png')) then ExtractTemporaryFile('icon.png');
//Result := True;
//end;

function ShowFinishedForm(): Boolean;
var
  FinishedForm: TSetupForm;
begin
  FinishedForm := CreateCustomForm;
  FinishedForm.Position:=poScreenCenter;
try
  FinishedForm.ClientWidth := ScaleX(310);
  FinishedForm.ClientHeight := ScaleY(133);
  FinishedForm.BorderStyle := bsSingle;
  FinishedForm.BorderIcons := [biSystemMenu];
  FinishedForm.Caption := 'Установка — ACDSee 5.0 Power Pack';
  FinishedForm.CenterInsideControl(WizardForm, False);

//  ImgLoad(FinishedForm.Handle, ExpandConstant('{tmp}\icon.png'), ScaleX(20), ScaleY(22), ScaleX(40), ScaleY(40), True, False);
//  ImgApplyChanges(FinishedForm.Handle);

  with TNewButton.Create(FinishedForm) do
  begin
    Parent := FinishedForm;
    SetBounds(ScaleX(110), ScaleY(100), ScaleX(90), ScaleY(25));
    ModalResult := mrYes;
    Caption := SetupMessage(msgButtonYes);
  end;
  with TNewStaticText.Create(FinishedForm) do
  begin
    Parent:= FinishedForm;
    Caption:='Все готово, приятного пользования!'+ #13#10 +
    ''+ #13#10 +
    'Запустить программу сейчас?';
    Left:=70;
    Top:=20;
    Font.Name:= 'Tahoma';
    Font.Size:= 9;
    Font.Color:=clBlack;;
  end;
  with TNewButton.Create(FinishedForm) do
  begin
    Parent := FinishedForm;
    SetBounds(ScaleX(210), ScaleY(100), ScaleX(90), ScaleY(25));
    ModalResult := mrNo;
    Caption := SetupMessage(msgButtonNo);
  end;
  with TNewCheckBox.Create(FinishedForm) do
  begin
  Parent := FinishedForm;
  Caption := 'Посетить сайт программы';
  SetBounds(ScaleX(10), ScaleY(70), ScaleX(150), ScaleY(25));
  end;

    Result := (FinishedForm.ShowModal = mrYes);
      finally
    FinishedForm.Free;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
//r: integer;
begin
  case CurStep of
  ssDone:
  if ShowFinishedForm then
  Exec(ExpandConstant('{pf}\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
//  if MsgBox('Посетить сайт программы?', mbInformation, MB_YESNO) = IDYES then
//  ShellExec('http://www.obviousidea.com/windows-software/light-image-resizer/how-to-resize-a-photo/', '','', SW_SHOW, ewNoWait, r);
  end;
end;


Nordek 20-12-2015 01:56 2586603

Цитата:

Цитата vadjliss
помогите или подскажите скрипт »

OuterNotebook:

vadjliss 20-12-2015 07:58 2586634

мне нужно саму рамку увеличить не внутриннию а наружную

nik1967 20-12-2015 08:38 2586636

vadjliss, кликаешь на любое место WizardForm и растягиваешь, как тебе надо.

vadjliss 20-12-2015 08:43 2586637

пишет что блокировано

Nordek 20-12-2015 09:29 2586642

Цитата:

Цитата vadjliss
мне нужно саму рамку увеличить не внутриннию а наружную »

Цитата:

Цитата vadjliss
пишет что блокировано »

На снимке вы показываете именно то:


что я вам ответил в #1176 сообщении.

Или, как вы собрались увеличивать OuterNotebook, если WizardForm не увеличена? Т.е у WizardForm не хватает области для дальнейшего растягивания, чтобы растянуть OuterNotebook нужно сначала растянуть WizardForm:


а уже тогда растягивать OuterNotebook:


Или вы на столько изменили форму, что невозможно определить что вам нужно, и в действительности вам нужно растянуть InnerNotebook?
InnerNotebook:

Dodakaedr 20-12-2015 19:54 2586828

Цитата:

Цитата ZVSRus
Но хотелось бы запуск страницы прикрутить к скрипту ниже.
Прикрутить к чекбоксу. »

И в чем собственно проблема? В примере я вам уже показывал как создать чекбокс и привязать к нему ссылку...
Скрытый текст
Код:

[Setup]
AppName=ACDSee 5.0 Power Pack
AppVersion=ACDSee 5.0 Power Pack
DefaultDirName={pf}\ACD Systems
DisableFinishedPage=yes
OutputDir=.
UsePreviousAppDir=no
UsePreviousGroup=no

[Code]
var
LinkProg: TNewCheckBox;

function ShowFinishedForm(): Boolean;
var
  FinishedForm: TSetupForm;
begin
  FinishedForm := CreateCustomForm;
  FinishedForm.Position:=poScreenCenter;
try
  FinishedForm.ClientWidth := ScaleX(310);
  FinishedForm.ClientHeight := ScaleY(133);
  FinishedForm.BorderStyle := bsSingle;
  FinishedForm.BorderIcons := [biSystemMenu];
  FinishedForm.Caption := 'Установка — ACDSee 5.0 Power Pack';
  FinishedForm.CenterInsideControl(WizardForm, False);

  with TNewButton.Create(FinishedForm) do
  begin
    Parent := FinishedForm;
    SetBounds(ScaleX(110), ScaleY(100), ScaleX(90), ScaleY(25));
    ModalResult := mrYes;
    Caption := SetupMessage(msgButtonYes);
  end;
  with TNewStaticText.Create(FinishedForm) do
  begin
    Parent:= FinishedForm;
    Caption:='Все готово, приятного пользования!'+ #13#10 +
    ''+ #13#10 +
    'Запустить программу сейчас?';
    Left:=70;
    Top:=20;
    Font.Name:= 'Tahoma';
    Font.Size:= 9;
    Font.Color:=clBlack;;
  end;
  with TNewButton.Create(FinishedForm) do
  begin
    Parent := FinishedForm;
    SetBounds(ScaleX(210), ScaleY(100), ScaleX(90), ScaleY(25));
    ModalResult := mrNo;
    Caption := SetupMessage(msgButtonNo);
  end;

  LinkProg := TNewCheckBox.Create(FinishedForm);
  LinkProg.Parent := FinishedForm;
  LinkProg.Caption := 'Посетить сайт программы';
  LinkProg.SetBounds(ScaleX(50), ScaleY(70), ScaleX(150), ScaleY(20));

    Result := (FinishedForm.ShowModal = mrYes);
      finally
    FinishedForm.Free;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
r: integer;
begin
  case CurStep of
    ssDone:
      begin
        if ShowFinishedForm then
          begin
            Exec(ExpandConstant('{pf}\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
          end;
            if LinkProg.Checked then
            ShellExec('', 'http://www.obviousidea.com/windows-software/light-image-resizer/how-to-resize-a-photo/', '','', SW_SHOW, ewNoWait, r);
      end;
  end;
end;


ZVSRus 20-12-2015 20:46 2586848

Цитата:

Цитата Dodakaedr
В примере я вам уже показывал как создать чекбокс и привязать к нему ссылку...

Все гениально и просто.
Чекбокс создал, скрипт прикрутить не смог.
Большое спасибо.

vadjliss 21-12-2015 21:21 2587200

парни подскажите как сделать что бы программа добавлялась в контекстное меню
в справке не нашёл
и ещё ни как не могу понять в чём причина

[code][Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

Код:

type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
        {Win9x}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
        {WinNT}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 1800;
  NeedVideoRAM = 128;
  NeedSoundCard = 'Creative X-Fi';
  NeedMB = 512;
  NeedPageFile = 1024;

var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
    Result := (Bytes/Multiple + 1)*Multiple
  else
    Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
 if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
 else
                if Bytes < 1024 then
      Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
                        if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
      else
                                        if Bytes/oneMB < 1024 then
            Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
            if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
            else
                                                          Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
 while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
 Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
 Result := Lo
 if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2
 for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
        String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)        // Количество ядер
        for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
        if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
        Exit
  else
    Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
        MemoryEx.dwLength := SizeOf(MemoryEx)
        if not GlobalMemoryStatusEx(MemoryEx) then
        MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
          if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
        Exit
    else
        Result := True
end;

procedure CreateCheckForm();
begin

  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».'
    Font.Color := clBlack
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)

  // Операционная система:
  SystemVersionPanel.Color := $CCFFCC

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
        RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
    DeviceName := DeviceName + ' ' + DeviceKey
        StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                            '.' + IntToStr(Version.Build)

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
    begin
      SystemVersionPanel.Color := $CCCCFF
      ChangeText := True
    end

  // Процессор:
  ProcessorMHzPanel.Color := $CCFFCC

  if not CheckCPU(NeedMHz) then
    begin
      ProcessorMHzPanel.Color := $CCCCFF
      ChangeText := True
    end

  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
    ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := $CCFFCC

  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
        n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
        for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
        StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
                for n := 1 to Length(DeviceName) do
      begin
        DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
        errCode := errCode*$100
      end
  else
    if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
    else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
        DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
    begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := $CCCCFF
      ChangeText := True
    end
  if (DeviceValue/oneMB < NeedVideoRAM) then
    begin
      VideoRAMPanel.Color := $CCCCFF
      ChangeText := True
    end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := $CCFFCC

  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
                  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
                  for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
                  SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

        if GetArrayLength(Keys) > 1 then
    begin
    AudioPanel.Text := 'Звуковые карты'
    // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
    AudioNamePanel.Text := ''
    for n := 1 to GetArrayLength(Keys) do
        AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
  else
    if GetArrayLength(Keys) = 0 then
    begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := $CCCCFF
      ChangeText := True
    end
      else
      AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
    AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := $CCFFCC
  if not CheckMemorySize(NeedMB) then
    begin
      RAMTotalPanel.Color := $CCCCFF
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

  // Виртуальная память:
  PageFileTotalPanel.Color := $CCFFCC
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                  ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                            Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
      PageFileTotalPanel.Color := $CCCCFF
      ChangeText := True
    end

  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям.' #13
                        'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      WizardForm.NextButton.Enabled := True
    end

end;

procedure InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;


nik1967 23-12-2015 21:07 2587846

Цитата:

Цитата vadjliss
и ещё ни как не могу понять в чём причина »

Код:

Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб';
Точку с запятой поставь в конце строки. Компилишь же на Unicode - версия критична к точкам с запятой в конце строк.

vadjliss 25-12-2015 22:23 2588406

подскажите как убрать последнюю страницу инсталлятара

ToBeLife 26-12-2015 05:31 2588448

Доброго времени суток.
Прошу помочь
1. Свернуть дерево компонентов - что необходимо прописать кроме флага Collapsed в [Components]?
2. Как изменить код "запрет установки в пустое место", чтобы можно было продолжить установку после предупреждения, и вместо ок - выдавало запрос:все равно продолжить? - да/нет
Скрытый текст

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
if not FileExists(ExpandConstant('{app}\file.xxx')) then begin
MsgBox('Установка невозможна. Проверьте правильность указаного пути!' #13#13'Installation is not possible. Check the correctness of the specified path!', mbError, MB_OK);
Result := False;
end;
end;
end;

3. Отображение компонентов в зависимости от языка.
Если выбирается Русский, то в последствии видны компоненты только А В С, если английский, то только D E F

sergey3695 26-12-2015 10:51 2588462

vadjliss,
Код:

[setup]
DisableFinishedPage=yes

[Setup]: DisableFinishedPage
ToBeLife,
1. Не знаю и думаю это не хорошая идея.
2.
Код:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
case CurPageID of
  wpSelectDir:
if not FileExists(ExpandConstant('{app}\file.xxx')) then begin
if  not (MsgBox('Установка невозможна. Проверьте правильность указаного пути!' #13#13'Installation is not possible. Check the correctness of the specified path!', mbError, MB_OKCANCEL)=mrOk) then
  Result := False;
end;
end;
end;

3.
Код:

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

[Components]
Name: Mode; Description: mode; Types: custom; Languages: rus; flags: fixed
Name: Mode/A; Description: A; Languages: rus; Flags:  disablenouninstallwarning
Name: Mode/B; Description: B; Languages: rus; Flags: disablenouninstallwarning
Name: Mode/C; Description: C; Languages: rus; Flags: disablenouninstallwarning
Name: Mode2; Description: mode; Types: custom; Languages: eng; flags: fixed
Name: Mode2/D; Description: D; Languages: eng; Flags: disablenouninstallwarning
Name: Mode2/E; Description: E; Languages: eng; Flags: disablenouninstallwarning
Name: Mode2/F; Description: F; Languages: eng; Flags: disablenouninstallwarning


kotyarko@fb 26-12-2015 22:32 2588653

Цитата:

Цитата ToBeLife
1. Свернуть дерево компонентов - что необходимо прописать кроме флага Collapsed в [Components]? »

Код:

[Setup]
ComponentsListTVStyle=yes


vadjliss 02-01-2016 11:31 2590475

ребята нашёл скрипт отключение музыки кнопкой там стоит файл waw, а у меня mp3 как исправить , а то выдаёт ошибку менял на mp3 толку нет

[code]
[Files]
Source: compiler:sound.wav; DestDir: "{tmp}"; Flags: dontcopy nocompression

Код:


function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

procedure StopSound(Sender: TObject);
begin
sndPlaySound(ExpandConstant(''), $0001 or $0008);
end;

procedure InitializeWizard();
var
ButtonStop: TButton;
begin
ExtractTemporaryFile(ExpandConstant('sound.wav'));
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008);

ButtonStop := TButton.Create(WizardForm);
with ButtonStop do
begin
Parent := WizardForm;
Caption :='stop';
Left := ScaleX(8);
Top :=320
Width := ScaleX(43);
Height := ScaleY(33);
TabOrder := 0;
OnClick:=@StopSound
end;
end;


Nordek 02-01-2016 20:13 2590601

Цитата:

Цитата vadjliss
а у меня mp3 »

См. BASS_Module

ZVSRus 03-01-2016 19:09 2590833

Требуется помощь исправления пути под кнопкой Обзор... программной группы.
Скрипт
Скрытый текст

Код:

#include "Include\botva2.iss"

 #define MyAppName "Comfy File Recovery 3.7"
 #define MyAppVersion "3.7"
 #define MyAppPublisher "Comfy Software"
 #define MyAppURL "http://repaircorruptedfiles.ru/file-repair/how-to.html"
 #define MyAppExeName "Comfy File Recovery.exe"

[Setup]
 AppId={{7C6237DF-DD6A-4CA1-AA8D-62B087CA3D07}
 AppName={#MyAppName}
 AppVersion={#MyAppVersion}
 AppVerName=Comfy File Recovery 3.7
 AppPublisher={#MyAppPublisher}
 AppPublisherURL={#MyAppURL}
 DefaultDirName={pf}\Comfy Software\Comfy File Recovery 3.7
 DefaultGroupName=Comfy Software\Comfy File Recovery 3.7
 OutputBaseFilename=comfy_file_recovery_3.7_setup
 ChangesAssociations=yes
 
 DirExistsWarning=no
 Uninstallable=not PortableCheck
 DisableProgramGroupPage=yes

 WizardImageFile=Include\1.bmp
 WizardSmallImageFile=Include\2.bmp
 SetupIconFile=Include\Icon.ico
 UninstallDisplayIcon={app}\Comfy File Recovery.exe
 UninstallIconFile=Include\Uninstall.ico

 Compression=lzma/ultra64
 SolidCompression=true
 InternalCompressLevel=ultra64
 
 OutputDir=.
 UsePreviousAppDir=no
 UsePreviousGroup=no

[Languages]
 Name: "english"; MessagesFile: "compiler:Languages\English.isl"
 Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[ Code]
var
  ComponentPage: TWizardPage;

  InstallerGroupBox: TNewGroupBox;
  Installer: TNewRadioButton;
  Portable: TNewRadioButton;

  StartMenuIcon: TNewCheckBox;

  DirPageBox: TNewGroupBox;
  ProgramGroupPageBox: TNewGroupBox;
 
  LinkProg: TNewCheckBox;
/////////////////////////////////////////////////////
  dirBrowseForm: TSetupForm;                      //
  dirBrowse, dirOK, dirNO, dirback: TButton;      //
  DirTreeView: TFolderTreeView;                    //
  Edit: TNewEdit;                                  //
  BrowseBevel: TBevel;                            //
  BrowsePanel: TPanel;                            //
  BrowsePanel2: TPanel;                            //
  BrowseBevel2,BrowseBevel3: TBevel;              //
  BrowseForm : TSetupForm;                        //
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); //
begin                                                                          //
Confirm:=False;                                                                //  Закрытие без подтверждения
end;                                                                          //
/////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////
function InstallerCheck: Boolean;    //
 begin                                //
  Result := Installer.Checked;      //
 end;                                //
////////////////////////////////////////
 function PortableCheck: Boolean;    //
 begin                                //
  Result := Portable.Checked;        //
 end;                                //
////////////////////////////////////////

/////////////////////////////////////////////////////
 procedure CompClick(Sender: TObject);            //
 begin                                            //
  case TNewRadioButton(Sender) of                  //
  Portable:                                        //
 begin                                            //
  WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + 'ComfyFileRecoveryPortable';
  WizardForm.Caption:= FmtMessage(ExpandConstant('Распаковка — %1'), [ExpandConstant('{#SetupSetting("AppName")}')]);  //Распаковка
 end;                                              //
  Installer:                                      //
 begin                                            //
  WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf}')) + 'Comfy Software\Comfy File Recovery 3.7';
  WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);  //Установка
  end;                                            //
 end;                                              //
end;                                              //
/////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
 procedure dirOkclick(Sender: TObject);                                      //
  begin                                                                      //
  dirBrowseForm.Close;                                                      //
  WizardForm.Enabled:=True;                                                  //
  WizardForm.DirEdit.Text:=Edit.Text;                                        //
  end;                                                                        //
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
 procedure dirBackClick(Sender: TObject);                                                    //
 begin                                                                                      //  начало
 if Portable.Checked then begin                                                              //  если Portable.Checked тогда начать
  Edit.Text:=AddBackslash(ExpandConstant('{src}\')+'ComfyFileRecoveryPortable');            //
  DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{src}\')), True);                //
  end else begin                                                                            //  конец еще начать
  Edit.Text:=AddBackslash(ExpandConstant('{pf}\')+'Comfy Software\Comfy File Recovery 3.7'); //
  DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{pf}\')), True);                  //
 end;                                                                                        //
end;                                                                                        //  конец
///////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
 procedure dirNOclick(Sender: TObject);                                      //
  begin                                                                      //
  dirBrowseForm.Close;                                                      //
  WizardForm.Enabled:=true;                                                  //
  end;                                                                        //
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
 procedure DirFolderChange(Sender: TObject);                                                  //
  Begin                                                                                      //
  Edit.Text:=AddBackslash(DirTreeView.Directory) + 'Comfy Software\Comfy File Recovery 3.7'; //
  if Portable.Checked then                                                                    //
  Edit.Text:=AddBackslash(DirTreeView.Directory) + 'ComfyFileRecoveryPortable';              //
  end;                                                                                        //
////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
 procedure FormClosedir(Sender: TObject; var Action: TCloseAction);          //
  begin                                                                      //
  WizardForm.Enabled:=true;                                                  //
  end;                                                                        //
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////
 procedure BrowseClick(Sender: TObject);      //
  begin                                        //
  dirBrowseForm := CreateCustomForm();        //
  with dirBrowseForm do begin                  //
  ClientWidth := ScaleX(352);                //
  ClientHeight := ScaleY(388);                //
  CenterInsideControl(WizardForm, False);    //
  Caption:='Обзор папок';                    //
  onClose:=@FormClosedir;                    //
///////////////////////////////////////////////////////////////
  with tlabel.create(dirBrowseForm) do begin                //
  SetBounds(ScaleX(15),ScaleY(15),ScaleX(350),ScaleY(15));  //
  caption:='Выберите папку из списка и нажмите «ОK».';      //
  parent:=dirBrowseForm;                                    //
  Font.Color:=clBlack;                                      //
  Font.Size:=8;                                            //
//////////////////////////////////////////////////////////////////////////
  BrowseBevel := TBevel.Create(WizardForm);                            //
  BrowseBevel.SetBounds(ScaleX(0),ScaleY(40),ScaleX(352),ScaleY(2));  //
  BrowseBevel.parent:=dirBrowseForm;                                  //
                                                                        //
  BrowseBevel3 := TBevel.Create(WizardForm);                          //
  BrowseBevel3.SetBounds(ScaleX(0),ScaleY(342),ScaleX(352),ScaleY(2)); //
  BrowseBevel3.parent:=dirBrowseForm;                                  //
//////////////////////////////////////////////////////////////////////////
  BrowsePanel := TPanel.Create(WizardForm);    //
  with BrowsePanel do                          //
  begin                                        //
  parent:=dirBrowseForm;                      //
  Left := ScaleX(5);                          //
  Top := ScaleY(45);                          //
  Width := ScaleX(342);                        //
  Height := ScaleY(292);                      //
  Caption := '';                              //
  end;                                          //
  BrowsePanel2 := TPanel.Create(WizardForm);  //
  with BrowsePanel2 do                          //
  begin                                        //
  BrowsePanel2.Parent := BrowsePanel;          //
  Left := ScaleX(5);                          //
  Top := ScaleY(5);                            //
  Width := ScaleX(332);                        //
  Height := ScaleY(282);                      //
  BevelOuter := bvLowered;                    //
  Caption := '';                              //
  end;                                          //
  BrowseBevel2 := TBevel.Create(WizardForm);  //
  with BrowseBevel2 do                          //
  begin                                        //
  BrowseBevel2.Parent := BrowsePanel2;        //
  Left := ScaleX(5);                          //
  Top := ScaleY(5);                            //
  Width := ScaleX(322);                        //
  Height := ScaleY(272);                      //
  Style := bsRaised;                          //
  end;                                          //
//////////////////////////////////////////////////////////////////
  Edit:= TNewEdit.Create(dirBrowseForm);                      //
  with edit do begin                                            //
  SetBounds(ScaleX(10),ScaleY(10),ScaleX(311),ScaleY(21));    //
  Text:=WizardForm.DirEdit.text;                              //
  Parent:= BrowsePanel2;                                      //
  Font.Color:=clBlack;                                        //
  end;                                                          //
                                                                //
  DirTreeView:= TFolderTreeView.Create(dirBrowseForm)          //
  with DirTreeView do begin                                    //
  SetBounds(ScaleX(10),ScaleY(35),ScaleX(311),ScaleY(235));    //
  OnChange:=@DirFolderChange;                                  //
  Parent:=BrowsePanel2;                                        //
  end;                                                          //
///////////////////////////////////////////////////////////////////////////////
  dirback:=tbutton.create(dirBrowseForm)                                    //
  with dirback do begin                                                      //
  SetBounds(ScaleX(16),ScaleY(351),ScaleX(100),ScaleY(30));                //
  parent:=dirBrowseForm;                                                    //
  Caption:='Сброс';                                                        //
  onclick:=@dirBackClick;                                                  //
  end;                                                                      //
///////////////////////////////////////////////////////////////////////////////
  dirok:=tbutton.create(dirBrowseForm)                                      //
  with dirok do begin                                                        //
  SetBounds(ScaleX(126),ScaleY(351),ScaleX(100),ScaleY(30));                //
  parent:=dirBrowseForm;                                                    //
  Caption:='OK';                                                            //
  onclick:=@dirOKclick;                                                    //
  end;                                                                      //
///////////////////////////////////////////////////////////////////////////////
  dirno:=tbutton.create(dirBrowseForm)                                      //
  with dirno do begin                                                        //
  SetBounds(ScaleX(236),ScaleY(351),ScaleX(100),ScaleY(30));                //
  parent:=dirBrowseForm;                                                    //
  Caption:='Отмена';                                                        //
  onclick:=@dirNOclick;                                                    //
  end;                                                                      //
  end;                                                                      //
  end;                                                                      //
///////////////////////////////////////////////////////////////////////////////
  DirTreeView.ChangeDirectory(AddBackslash(WizardForm.dirEdit.Text), true); //
  Edit.Text:=(DirTreeView.Directory);                                      //
  dirBrowseForm.Show;                                                      //
  WizardForm.Enabled:=false;                                                //
  end;                                                                      //
///////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
procedure StartMenuIcon_OnClick(Sender: TObject);                  //
begin                                                              //  Процедура для CheckBox
  WizardForm.NoIconsCheck.Checked:= TNewCheckBox(Sender).Checked;  //  "Не создавать папку в меню Пуск"
end;                                                              //
/////////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);  //Изменить Страницу
begin
  case CurPageID of  //делать CurPageID из
    wpSelectDir:
  begin
  if Portable.Checked then  //если Portable.Checked тогда
  begin
      ProgramGroupPageBox.Hide;
      WizardForm.GroupEdit.Hide;
      WizardForm.GroupBrowseButton.Hide;
      StartMenuIcon.Hide;
      WizardForm.SelectGroupBitmapImage.Hide;
      WizardForm.SelectStartMenuFolderLabel.Hide;
      WizardForm.SelectStartMenuFolderBrowseLabel.Hide;
      WizardForm.NextButton.Caption:= 'Распаковать';
      DirPageBox.Caption:= 'Папка распаковки:';
  WizardForm.Caption:= FmtMessage(ExpandConstant('Распаковка — %1'), [ExpandConstant('{#SetupSetting("AppName")}')]);  //Распаковка
  WizardForm.PageNameLabel.Caption:= ExpandConstant('Выбор папки распаковки');
  WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('Программа распакует %1 в следующую папку.'), [ExpandConstant('{#SetupSetting("AppName")}')]);
  WizardForm.SelectDirBrowseLabel.Caption:= 'Нажмите «Распаковать», чтобы началась распаковка. Если вы хотите выбрать другую папку, нажмите «Обзор».'
  if Installer.Checked then  //если Installer.Checked тогда
  end else begin  //конец еще начать
      ProgramGroupPageBox.Show;
      WizardForm.GroupEdit.Show;
      WizardForm.GroupBrowseButton.Show;
      StartMenuIcon.Show;
      WizardForm.SelectGroupBitmapImage.Show;
      WizardForm.SelectStartMenuFolderLabel.Show;
      WizardForm.SelectStartMenuFolderBrowseLabel.Show;
      WizardForm.NextButton.Caption:= 'Установить'
      DirPageBox.Caption:= 'Папка установки:';
  WizardForm.Caption:= FmtMessage(ExpandConstant('Установка — %1'), [ExpandConstant('{#SetupSetting("AppName")}')]);  //Установка
  WizardForm.PageNameLabel.Caption:= ExpandConstant('Выбор папки установки');
  WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('Программа установит %1 в следующую папку.'), [ExpandConstant('{#SetupSetting("AppName")}')]);
  WizardForm.SelectDirBrowseLabel.Caption:= 'Нажмите «Установить», чтобы началась установка. Если вы хотите выбрать другую папку, нажмите «Обзор».'
  WizardForm.SelectStartMenuFolderBrowseLabel.Caption:= 'Нажмите «Установить», чтобы началась установка. Если вы хотите выбрать другую папку, нажмите «Обзор».'
  end;
end;
    wpInstalling:
  if Installer.Checked then
 begin
  WizardForm.PageNameLabel.Caption:= ExpandConstant('Установка');
 end else begin
  WizardForm.PageNameLabel.Caption:= ExpandConstant('Распаковка');
 end;
    wpFinished:
  if Portable.Checked then
 begin
        WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('Завершение распаковки'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('Программа %1 распакована на Ваш компьютер.'#10#13''#10#13'Нажмите «Завершить», чтобы выйти из программы распаковки.'), [ExpandConstant('{#SetupSetting("AppName")}')]);
 end else begin
  WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('Завершение установки'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('Программа %1 установлена на Ваш компьютер.'#10#13''#10#13'Нажмите «Завершить», чтобы выйти из программы установки.'), [ExpandConstant('{#SetupSetting("AppName")}')]);
 end;
 end;
 end;

procedure InitializeWizard();
begin
  WizardForm.DiskSpaceLabel.Hide;
  ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа, компонентов и дополнительных задач', '...');

  InstallerGroupBox := TNewGroupBox.Create(WizardForm);
  with InstallerGroupBox do
  begin
    Parent := ComponentPage.Surface;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(210);
    Height := ScaleY(64);
    Caption := 'Тип установки:';
  end;

  Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := InstallerGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(39);
    Width := ScaleX(195);
    Height := ScaleY(17);
    Caption := 'Распаковка портативной версии';
    OnClick:=@CompClick;
  end;

  Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := InstallerGroupBox;
    Left := ScaleX(10);
    Top := ScaleY(14);
    Width := ScaleX(195);
    Height := ScaleY(17);
    Caption := 'Установка обычной версии';
    OnClick:=@CompClick;
    Checked := True
  end;

 DirPageBox := TNewGroupBox.Create(WizardForm);
 with DirPageBox do
 begin
 Parent := WizardForm.SelectDirPage;
 Left := ScaleX(0);
 Top := ScaleY(0);
 Width := ScaleX(417);
 Height := ScaleY(107);
 Caption := 'Папка установки:';
 end;

 ProgramGroupPageBox := TNewGroupBox.Create(WizardForm);
 with ProgramGroupPageBox do
 begin
 Parent := WizardForm.SelectDirPage;
 Left := ScaleX(0);
 Top := ScaleY(112);
 Width := ScaleX(417);
 Height := ScaleY(107);
 Caption := 'Папка в меню Пуск:';
 end;

 with WizardForm.DirEdit do
 begin
 Left := ScaleX(5);
 Top := ScaleY(78);
 Width := ScaleX(325);
 Parent := DirPageBox;
 end;

 with WizardForm.DirBrowseButton do
 begin
 Left := ScaleX(337);
 Top := ScaleY(77);
 Parent := DirPageBox;
 OnClick:=@BrowseClick;
 end;

 with WizardForm.SelectDirBitmapImage do
 begin
 Left := ScaleX(2);
 Top := ScaleY(15);
 Width := ScaleX(32);
 Height := ScaleY(32);
 Parent := DirPageBox;
 end;

 with WizardForm.SelectDirLabel do
 begin
 Left := ScaleX(34);
 Top := ScaleY(23);
 Width := ScaleX(381);
 Height := ScaleY(14);
 Parent := DirPageBox;
 end;

 with WizardForm.SelectDirBrowseLabel do
 begin
 Left := ScaleX(5);
 Top := ScaleY(48);
 Width := ScaleX(410);
 Height := ScaleY(27);
 Parent := DirPageBox;
 end;

 with WizardForm.GroupEdit do
 begin
 Left := ScaleX(5);
 Top := ScaleY(78);
 Width := ScaleX(325);
 Parent := ProgramGroupPageBox;
 end;

 with WizardForm.GroupBrowseButton do
 begin
 Left := ScaleX(337);
 Top := ScaleY(77);
 Parent := ProgramGroupPageBox;
 OnClick:=@BrowseClick;
 end;

 with WizardForm.SelectGroupBitmapImage do
 begin
 Left := ScaleX(5);
 Top := ScaleY(15);
 Width := ScaleX(32);
 Height := ScaleY(32);
 Parent := ProgramGroupPageBox;
 end;

 with WizardForm.SelectStartMenuFolderLabel do
 begin
 Left := ScaleX(37);
 Top := ScaleY(23);
 Width := ScaleX(378);
 Height := ScaleY(14);
 Parent := ProgramGroupPageBox;
 end;

 with WizardForm.SelectStartMenuFolderBrowseLabel do
 begin
 Left := ScaleX(5);
 Top := ScaleY(48);
 Width := ScaleX(410);
 Height := ScaleY(27);
 Parent := ProgramGroupPageBox;
 end;
/////////////////////////////////////////////////////////////////
 begin                                                        //
  StartMenuIcon:= TNewCheckBox.Create(WizardForm);            //
  with StartMenuIcon do                                        //
  begin                                                        //
        Parent:= WizardForm.SelectDirPage;                          //  "Не создавать папку в меню Пуск"
        SetBounds(ScaleX(10), ScaleY(219), ScaleX(200), ScaleY(17)); //
  Caption := 'Не создавать папку в меню Пуск';                //
  OnClick:=@StartMenuIcon_OnClick;                            //
  end;                                                        //
/////////////////////////////////////////////////////////////////
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
 begin
  if (PageID = 8) or(PageID = 10) or(PageID = 14) then
  Result:= True;                                                                                   
 end;


vadjliss 04-01-2016 08:57 2590937

парни что то не могу понять в чём дело не удаляется программа пишет ошибку в справке тоже ни чего не нашёл

vadjliss 04-01-2016 09:39 2590946

всё разабрался

Dodakaedr 04-01-2016 17:24 2591108

ZVSRus, вопрос не ясен.

ZVSRus 04-01-2016 18:07 2591117

Цитата:

Цитата Dodakaedr
вопрос не ясен

В скрипте при нажатии на кнопку Обзор (выбор папки в меню пуск), нет правильного пути установки и возвращении пути по умолчанию.

vadjliss 05-01-2016 19:27 2591444

парни вопрос запись в host вот этот код работает только на 32 битной системе а как сделать что бы и на 64 битную записывала
if exist %systemroot%\SysWOW64 (
set hosts=%systemroot%\SysWOW64\drivers\etc\hosts
) else (
set hosts=%systemroot%\System32\drivers\etc\hosts
)
cacls %hosts% /E /G All:F
cacls %hosts% /E /G ‚бҐ:F
attrib -s -r -h %hosts%
(echo.
echo #
echo 127.0.0.1 cap.cyberlink.com
echo 127.0.0.1 activation.cyberlink.com
echo #
)>>%hosts%
cacls %hosts% /E /R All
cacls %hosts% /E /R ‚бҐ
ipconfig /flushdns

dimantv_wot@vk 05-01-2016 22:04 2591508

Всем привет может кто скинуть простой скрипт.

kotyarko@fb 05-01-2016 23:57 2591563

dimantv_wot@vk, краткость, может быть, и сестра таланта, но не в данном случае.
Вот вам самый простой скрипт:
Код:

[Setup]
AppName=Program
AppVerName=1
DefaultDirName={app}

Какой вопрос - такой ответ.

dimantv_wot@vk 06-01-2016 12:44 2591678

kotyarko@fb, почти точто нужно но как можно включить начальную страницу для смены картинки слева сбоку

kotyarko@fb 06-01-2016 13:12 2591694

Цитата:

Цитата dimantv_wot@vk
почти точто нужно »

lol.

Цитата:

Цитата dimantv_wot@vk
но как можно включить начальную страницу для смены картинки слева сбоку »

В версиях Inno Setup ниже 5.5.7, WelcomePage по-умолчанию уже включена, и никаких дополнительных действий делать не нужно. Если вы используете 5.5.7, то для отображения этой страницы нужно:
Код:

[Setup]
DisableWelcomePage=no


vadjliss 06-01-2016 22:19 2591896

парни подскажите скрипт вот такой проверка системы очень надо

kotyarko@fb 06-01-2016 23:25 2591916

vadjliss, http://forum.oszone.net/post-1230777-185.html
http://krinkels.org/threads/isutils.1948/
http://krinkels.org/threads/iswmi.2448/

vadjliss 07-01-2016 08:45 2591966

Вложений: 1
да спасибо промучился так и не сделал помогите кто знает как совместить эти 2 кода чтобы получилось так

dimantv_wot@vk 07-01-2016 12:41 2592017

Как по умолчанию выставить свой путь к установки вроде что то типо того .\

dimantv_wot@vk 07-01-2016 12:45 2592020

Каков размер етой иконки?

Nordek 07-01-2016 13:12 2592027

Цитата:

Цитата vadjliss
как совместить эти 2 кода чтобы получилось так »

Наверное так:
Код:

[Code]
procedure RedesignWizardForm;
begin
  with
WizardForm.WelcomePage do
  begin
   
Enabled := False;
  end;
  WizardForm.SelectDirBrowseLabel.Top := ScaleY(33);
  WizardForm.DirEdit.Top := ScaleY(60);
  WizardForm.DirBrowseButton.Top := ScaleY(59);
  WizardForm.DiskSpaceLabel.Top := ScaleY(224);
  WizardForm.SelectStartMenuFolderBrowseLabel.Top := ScaleY(33);
  WizardForm.GroupEdit.Top := ScaleY(60);
  WizardForm.GroupBrowseButton.Top := ScaleY(59);
end;

Function GetTotalRam: integer; external 'GetTotalRam@files:isutils.dll stdcall';
Function GetVideoName: PANSICHAR; external 'GetVideoName@files:isutils.dll stdcall';
Function GetVideoRam: integer; external 'GetVideoRam@files:isutils.dll stdcall';
Function GetProcessorName: PANSICHAR; external 'GetProcessorName@files:isutils.dll stdcall';
Function GetProcessorFreq: integer; external 'GetProcessorFreq@files:isutils.dll stdcall';
Function GetProcessorCoreCount: integer; external 'GetProcessorCoreCount@files:isutils.dll stdcall';
Function GetSoundCards: integer; external 'GetSoundCards@files:isutils.dll stdcall';
Function GetSoundCardName: PANSICHAR; external 'GetSoundCardName@files:isutils.dll stdcall';
Function GetOsName: PANSICHAR; external 'GetOsName@files:isutils.dll stdcall';
function GetOsNumber: integer; external 'GetOsNumber@files:isutils.dll stdcall';
function GetOsBit: integer; external 'GetOsBit@files:isutils.dll stdcall';
var
 
RequirementsLbl: TLabel;
 Processor, coreCount, VideoRam, Ram, OpSystem, OpSystemBit:integer;
 ProcessorID1, ProcessorID2, VideoCardID1, VideoCardID2, SoundCardID1, SoundCardID2, RAMID1, RAMID2, OSID1, OSID2: TNewMemo;

procedure InitializeWizard();
begin
 
RedesignWizardForm;
  Processor:=2000;
  VideoRam:=64;
  Ram:=500;
  OpSystem:=513;
 
  RequirementsLbl := TLabel.Create(WizardForm);
  with RequirementsLbl do begin
   
AutoSize:=False;
    SetBounds(ScaleX(5), ScaleY(87), ScaleX(487), ScaleY(27));
    Transparent:=True;
    WordWrap:=True;
    //Alignment := taCenter;
   
Font.Color:=$000000;
    Font.size:=9;
    Font.Style:=[fsBold];
    Caption := 'Программа установки обнаружила следующие компоненты';
    Parent:=WizardForm.SelectDirPage;
  end;
 
//================= Начало - Процессор =================//
  { ProcessorID1 }
 
ProcessorID1 := TNewMemo.Create(WizardForm);
  with ProcessorID1 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(5), ScaleY(105), ScaleX(99), ScaleY(20));
    Alignment := taCenter;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Color := clBtnFace;
    Lines.Text := 'Процессор';
    ReadOnly := True;
  end;

  { ProcessorID2 }
 
ProcessorID2 := TNewMemo.Create(WizardForm);
  with ProcessorID2 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(107), ScaleY(105), ScaleX(310), ScaleY(20));
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := GetProcessorName+' @' + IntToStr(GetProcessorFreq) + ' MHz';
    ReadOnly := True;
  end;

  if (GetProcessorFreq*GetProcessorCoreCount) < Processor then
  begin
   
RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    ProcessorID2.font.color:=clred;
  end;
//================= Конец - Процессор =================//

//================= Начало - Видеоадаптер =================//
  { VideoCardID1 }
 
VideoCardID1 := TNewMemo.Create(WizardForm);
  with VideoCardID1 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(5), ScaleY(128), ScaleX(99), ScaleY(20));
    Alignment := taCenter;
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := 'Видеоадаптер';
    ReadOnly := True;
  end;

  { VideoCardID2 }
 
VideoCardID2 := TNewMemo.Create(WizardForm);
  with VideoCardID2 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(107), ScaleY(128), ScaleX(310), ScaleY(20));
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := GetVideoName+' '+inttostr(GetVideoRam)+' Mb';
    ReadOnly := True;
  end;

  if GetVideoRam < VideoRam then begin
   
RequirementsLbl.Caption:='Компоненты, выделенные красным, не удовлетворяют требованиям';
    VideoCardID2.font.color:=clred;
  end;

//================= Конец - Видеоадаптер =================//

//================= Начало - Звуковая карта =================//
  { SoundCardID1 }
 
SoundCardID1 := TNewMemo.Create(WizardForm);
  with SoundCardID1 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(5), ScaleY(151), ScaleX(99), ScaleY(20));
    Alignment := taCenter;
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := 'Звуковая карта';
    ReadOnly := True;
  end;

  { SoundCardID2 }
 
SoundCardID2 := TNewMemo.Create(WizardForm);
  with SoundCardID2 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(107), ScaleY(151), ScaleX(310), ScaleY(20));
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := GetSoundCardName;
    ReadOnly := True;
  end;
 
 
  if GetSoundCards=0 then begin
   
RequirementsLbl.Caption:='Компоненты, выделенные красным, не удовлетворяют требованиям';
    SoundCardID2.font.color:=clred;
    SoundCardID2.Lines.Text := 'Звуковая карта отсутствует';
  end;
//================= Конец - Звуковая карта =================//

//================= Начало - ОЗУ =================//

 { RAMID1 }
 
RAMID1 := TNewMemo.Create(WizardForm);
  with RAMID1 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(5), ScaleY(174), ScaleX(99), ScaleY(20));
    Alignment := taCenter;
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := 'ОЗУ';
    ReadOnly := True;
  end;

  { RAMID2 }
 
RAMID2 := TNewMemo.Create(WizardForm);
  with RAMID2 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(107), ScaleY(174), ScaleX(310), ScaleY(20));
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := IntToStr(GetTotalRam + 1) + ' Mb';
    ReadOnly := True;
  end;

  if (GetTotalRam+1)<RAM then begin
   
RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    RAMID2.font.color:=clred;
  end;

//================= Конец - ОЗУ =================//

//================= Начало - Операционная система =================//

  { OSID1 }
 
OSID1 := TNewMemo.Create(WizardForm);
  with OSID1 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(5), ScaleY(197), ScaleX(99), ScaleY(20));
    Alignment := taCenter;
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := 'Система';
    ReadOnly := True;
  end;

  { OSID2 }
 
OSID2 := TNewMemo.Create(WizardForm);
  with OSID2 do
  begin
   
Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(107), ScaleY(197), ScaleX(310), ScaleY(20));
    Color := clBtnFace;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$000000;
    Lines.Text := GetOsName+' '+inttostr(GetOsBit)+' Bit';
    ReadOnly := True;
  end;

  if OpSystem > GetOsNumber then begin
   
RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    OSID2.font.color:=clred;
  end;
 
//================= Конец - Операционная система =================//
end;


Цитата:

Цитата dimantv_wot@vk
Каков размер етой иконки? »

Размер Этой картинки: 55x55

vadjliss 07-01-2016 13:38 2592031

всё грамотно спасибо Nordek

dimantv_wot@vk 07-01-2016 16:10 2592063

Как в DefaultDirName= выставить пустой путь не создавая лишние папки т.е что бы в компонентах распаковывался путь как прописываю в file

Nordek 07-01-2016 16:28 2592068

Цитата:

Цитата dimantv_wot@vk
Как в DefaultDirName= выставить »

В [Setup] добавь
Код:

CreateAppDir=no

dimantv_wot@vk 07-01-2016 17:06 2592083

Как из страницы Компонентов отключить [Types]

Nordek 07-01-2016 17:16 2592086

Цитата:

Цитата dimantv_wot@vk
Как из страницы Компонентов отключить [Types] »

Удалите [Types], включая связанные с ней данные и оставьте секцию [Components].
Пример
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultGroupName=My Program
CreateAppDir=no

[Components]
Name: mycomp; Description: Компонент

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {pf}\My Program; Flags: ignoreversion; Components: mycomp


vadjliss 07-01-2016 19:01 2592121

нужна помощь

парни сделал побольше инсталлятор теперь ни как не могу растянуть картинку баковую на весь инсталлятор что бы она отображалась на всех страницах

Код:

#define A = (Defined UNICODE) ? "W" : "A"
const
    SPI_GETWORKAREA = $0030;

// Large Integer Functions
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';
// Configuration Reference
function SystemParametersInfo(uiAction, uiParam: UINT; var pvParam: TRect; fWinIni: UINT): BOOL; external 'SystemParametersInfo{#A}@user32.dll stdcall';

////////////////////////////////////////////////////////////////////////////
procedure RecreateWizardForm(const cx, cy: Longint; const IsDelta: Boolean);
// IsDelta : True - cx, cy is delta width/height, False - cx, cy is width/height
// cx......: delta width / width
// cy......: delta height / height
var
    rt: TRect;
    dx, dy: Longint;
begin
    { get deltas }
    if not IsDelta then
    begin
        cx := cx - WizardForm.Width;
        cy := cy - WizardForm.Height;
    end;

    { check deltas }
    if SystemParametersInfo(SPI_GETWORKAREA, 0, rt, 0) then
    begin
        { check delta width }
        if (cx < -WizardForm.Width) or (cx > rt.Right - WizardForm.Width) then
        begin
            if IsDelta then
                MsgBox(FmtMessage(CustomMessage('WizardDeltaWidthInvalid'), [IntToStr(-WizardForm.Width), IntToStr(rt.Right - WizardForm.Width)]), mbError, MB_OK)
            else
                MsgBox(FmtMessage(CustomMessage('WizardWidthInvalid'), [IntToStr(rt.Right)]), mbError, MB_OK);
            Exit;
        end;

        { check delta height }
        if (cy < -WizardForm.Height) or (cy > rt.Bottom - WizardForm.Height) then
        begin
            if IsDelta then
                MsgBox(FmtMessage(CustomMessage('WizardDeltaHeightInvalid'), [IntToStr(-WizardForm.Height), IntToStr(rt.Bottom - WizardForm.Height)]), mbError, MB_OK)
            else
                MsgBox(FmtMessage(CustomMessage('WizardHeightInvalid'), [IntToStr(rt.Bottom)]), mbError, MB_OK);
            Exit;
        end;
    end;

    { WizardForm }
    with WizardForm do
    begin
        { WizardForm }
        Width := Width + cx;
        Height := Height + cy;

        { buttons }
        CancelButton.Left := CancelButton.Left + cx;
        CancelButton.Top := CancelButton.Top + cy;
        NextButton.Left := NextButton.Left + cx;
        NextButton.Top := NextButton.Top + cy;
        BackButton.Left := BackButton.Left + cx;
        BackButton.Top := BackButton.Top + cy;

        { common }
        OuterNotebook.ClientWidth := ClientWidth;
        OuterNotebook.ClientHeight := OuterNotebook.ClientHeight + cy;
        InnerNotebook.Width := InnerNotebook.Width + cx;
        InnerNotebook.Height := InnerNotebook.Height + cy;
        MainPanel.ClientWidth := ClientWidth;
        WizardSmallBitmapImage.Left := WizardSmallBitmapImage.Left + cx;
        PageNameLabel.Width := PageNameLabel.Width + cx;
        PageDescriptionLabel.Width := PageDescriptionLabel.Width + cx;
        Bevel1.Width := Bevel1.Width + cx;
        Bevel.Width := Bevel.Width + cx;
        Bevel.Top := Bevel.Top + cy;
        BeveledLabel.Top := BeveledLabel.Top + cy;

        { wpWelcome }
        dx := MulDiv(cy, WizardBitmapImage.Width, WizardBitmapImage.Height);
        WizardBitmapImage.Width := WizardBitmapImage.Width + dx;
        WizardBitmapImage.Height := WizardBitmapImage.Height + cy;
        WelcomeLabel1.Left := WelcomeLabel1.Left + dx;
        WelcomeLabel1.Width := WelcomeLabel1.Width + cx - dx;
        dy := WelcomeLabel1.Height;
        WelcomeLabel1.AdjustHeight;
        dy := WelcomeLabel1.Height - dy;
        WelcomeLabel2.Top := WelcomeLabel2.Top + dy;
        WelcomeLabel2.Left := WelcomeLabel2.Left + dx;
        WelcomeLabel2.Width := WelcomeLabel2.Width + cx - dx;
        WelcomeLabel2.AdjustHeight;

        { wpLicense }
        LicenseLabel1.Width := LicenseLabel1.Width + cx;
        dy := LicenseLabel1.Height;
        LicenseLabel1.AdjustHeight;
        dy := LicenseLabel1.Height - dy;
        LicenseMemo.Top := LicenseMemo.Top + dy;
        LicenseMemo.Width := LicenseMemo.Width + cx;
        LicenseMemo.Height := LicenseMemo.Height + cy - dy;
        LicenseAcceptedRadio.Top := LicenseAcceptedRadio.Top + cy;
        LicenseAcceptedRadio.Width := LicenseAcceptedRadio.Width + cx;
        LicenseNotAcceptedRadio.Top := LicenseNotAcceptedRadio.Top + cy;
        LicenseNotAcceptedRadio.Width := LicenseNotAcceptedRadio.Width + cx;

        { wpPassword }
        PasswordLabel.Width := PasswordLabel.Width + cx;
        dy := PasswordLabel.Height;
        PasswordLabel.AdjustHeight;
        dy := PasswordLabel.Height - dy;
        PasswordEditLabel.Top := PasswordEditLabel.Top + dy;
        PasswordEditLabel.Width := PasswordEditLabel.Width + cx;
        PasswordEdit.Top := PasswordEdit.Top + dy;
        PasswordEdit.Width := PasswordEdit.Width + cx;

        { wpInfoBefore }
        InfoBeforeClickLabel.Width := InfoBeforeClickLabel.Width + cx;
        dy := InfoBeforeClickLabel.Height;
        InfoBeforeClickLabel.AdjustHeight;
        dy := InfoBeforeClickLabel.Height - dy;
        InfoBeforeMemo.Top := InfoBeforeMemo.Top + dy;
        InfoBeforeMemo.Width := InfoBeforeMemo.Width + cx;
        InfoBeforeMemo.Height := InfoBeforeMemo.Height + cy - dy;

        { wpUserInfo }
        UserInfoNameLabel.Width := UserInfoNameLabel.Width + cx;
        UserInfoNameEdit.Width := UserInfoNameEdit.Width + cx;
        UserInfoOrgLabel.Width := UserInfoOrgLabel.Width + cx;
        UserInfoOrgEdit.Width := UserInfoOrgEdit.Width + cx;
        UserInfoSerialLabel.Width := UserInfoSerialLabel.Width + cx;
        UserInfoSerialEdit.Width := UserInfoSerialEdit.Width + cx;

        { wpSelectDir }
        SelectDirLabel.Width := SelectDirLabel.Width + cx;
        SelectDirLabel.AdjustHeight;
        SelectDirBrowseLabel.Width := SelectDirBrowseLabel.Width + cx;
        dy := SelectDirBrowseLabel.Height;
        SelectDirBrowseLabel.AdjustHeight;
        dy := SelectDirBrowseLabel.Height - dy;
        DirEdit.Top := DirEdit.Top + dy;
        DirEdit.Width := DirEdit.Width + cx;
        DirBrowseButton.Top := DirBrowseButton.Top + dy;
        DirBrowseButton.Left := DirBrowseButton.Left + cx;
        DiskSpaceLabel.Width := DiskSpaceLabel.Width + cx;
        dy := DiskSpaceLabel.Height;
        DiskSpaceLabel.AdjustHeight;
        dy := DiskSpaceLabel.Height - dy;
        DiskSpaceLabel.Top := DiskSpaceLabel.Top + cy - dy;

        { wpSelectComponents }
        SelectComponentsLabel.Width := SelectComponentsLabel.Width + cx;
        dy := SelectComponentsLabel.Height;
        SelectComponentsLabel.AdjustHeight;
        dy := SelectComponentsLabel.Height - dy;
        TypesCombo.Top := TypesCombo.Top + dy;
        TypesCombo.Width := TypesCombo.Width + cx;
        ComponentsList.Top := ComponentsList.Top + dy;
        ComponentsList.Width := ComponentsList.Width + cx;
        ComponentsList.Height := ComponentsList.Height + cy - dy;
        ComponentsDiskSpaceLabel.Width := ComponentsDiskSpaceLabel.Width + cx;
        dy := ComponentsDiskSpaceLabel.Height;
        ComponentsDiskSpaceLabel.AdjustHeight;
        dy := ComponentsDiskSpaceLabel.Height - dy;
        ComponentsDiskSpaceLabel.Top := ComponentsDiskSpaceLabel.Top + cy - dy;

        { wpSelectProgramGroup }
        SelectStartMenuFolderLabel.Width := SelectStartMenuFolderLabel.Width + cx;
        SelectStartMenuFolderLabel.AdjustHeight;
        SelectStartMenuFolderBrowseLabel.Width := SelectStartMenuFolderBrowseLabel.Width + cx;
        dy := SelectStartMenuFolderBrowseLabel.Height;
        SelectStartMenuFolderBrowseLabel.AdjustHeight;
        dy := SelectStartMenuFolderBrowseLabel.Height - dy;
        GroupEdit.Top := GroupEdit.Top + dy;
        GroupEdit.Width := GroupEdit.Width + cx;
        GroupBrowseButton.Top := GroupBrowseButton.Top + dy;
        GroupBrowseButton.Left := GroupBrowseButton.Left + cx;
        NoIconsCheck.Top := NoIconsCheck.Top + cy;
        NoIconsCheck.Width := NoIconsCheck.Width + cx;

        { wpSelectTasks }
        SelectTasksLabel.Width := SelectTasksLabel.Width + cx;
        dy := SelectTasksLabel.Height;
        SelectTasksLabel.AdjustHeight;
        dy := SelectTasksLabel.Height - dy;
        TasksList.Top := TasksList.Top + dy;
        TasksList.Width := TasksList.Width + cx;
        TasksList.Height := TasksList.Height + cy - dy;

        { wpReady }
        ReadyLabel.Width := ReadyLabel.Width + cx;
        dy := ReadyLabel.Height;
        ReadyLabel.AdjustHeight;
        dy := ReadyLabel.Height - dy;
        ReadyMemo.Top := ReadyMemo.Top + dy;
        ReadyMemo.Width := ReadyMemo.Width + cx;
        ReadyMemo.Height := ReadyMemo.Height + cy - dy;

        { wpPreparing }
        PreparingLabel.Width := PreparingLabel.Width + cx;
        PreparingMemo.Width := PreparingMemo.Width + cx;
        PreparingMemo.Height := PreparingMemo.Height + cy;

        { wpInstalling }
        StatusLabel.Width := StatusLabel.Width + cx;
        FilenameLabel.Width := FilenameLabel.Width + cx;
        ProgressGauge.Width := ProgressGauge.Width + cx;

        { wpInfoAfter }
        InfoAfterClickLabel.Width := InfoAfterClickLabel.Width + cx;
        dy := InfoAfterClickLabel.Height;
        InfoAfterClickLabel.AdjustHeight;
        dy := InfoAfterClickLabel.Height - dy;
        InfoAfterMemo.Top := InfoAfterMemo.Top + dy;
        InfoAfterMemo.Width := InfoAfterMemo.Width + cx;
        InfoAfterMemo.Height := InfoAfterMemo.Height + cy - dy;

        { wpFinished }
        WizardBitmapImage2.Width := WizardBitmapImage2.Width + dx;
        WizardBitmapImage2.Height := WizardBitmapImage2.Height + cy;
        FinishedHeadingLabel.Left := FinishedHeadingLabel.Left + dx;
        FinishedHeadingLabel.Width := FinishedHeadingLabel.Width + cx - dx;
        dy := FinishedHeadingLabel.Height;
        FinishedHeadingLabel.AdjustHeight;
        dy := FinishedHeadingLabel.Height - dy;
        FinishedLabel.Top := FinishedLabel.Top + dy;
        FinishedLabel.Left := FinishedLabel.Left + dx;
        FinishedLabel.Width := FinishedLabel.Width + cx - dx;
        FinishedLabel.AdjustHeight;
        RunList.Left := RunList.Left + dx;
        RunList.Width := RunList.Width + cx - dx;
        dy := RunList.Top;
        RunList.Top := FinishedPage.Height - RunList.Height;
        dy := RunList.Top - dy;
        YesRadio.Top := YesRadio.Top + dy;
        YesRadio.Left := YesRadio.Left + dx;
        YesRadio.Width := YesRadio.Width + cx - dx;
        NoRadio.Top := NoRadio.Top + dy;
        NoRadio.Left := NoRadio.Left + dx;
        NoRadio.Width := NoRadio.Width + cx - dx;

        { new position }
        Center;
    end;
end;

///////////////////////////
procedure InitializeWizard;
begin
    RecreateWizardForm(150, 50, True);
end;


Serjione 08-01-2016 16:32 2592477

Собрал инсталлятор. Есть-ли возможность указать в скрипте, чтобы в Programs and Features не указывалась версия продукта, и наименование было взято не из MyAppName ?

Serjione 08-01-2016 18:18 2592521

Нашел - UninstallDisplayName

ToBeLife 09-01-2016 18:24 2592835

Подскажите, как правильно реализовать описание компонентов, когда часть из них доступно только для определенного языка.
Варианты для русской локализации скрыты, а описание к ним остается. В примере вместо описания английских компонентов E и F описываются скрытые компоненты В и С.

Скрытый текст


[Components]
Name: Mode; Description: mode; Types: custom; Languages: rus; flags: fixed
Name: Mode/A; Description: {cm:C1}; Languages: rus; Flags: disablenouninstallwarning
Name: Mode/B; Description: {cm:C2}; Languages: rus; Flags: disablenouninstallwarning
Name: Mode/C; Description: {cm:C3}; Languages: rus; Flags: disablenouninstallwarning
Name: Mode/D; Description: {cm:C4} Languages: rus; Flags: disablenouninstallwarning
Name: Mode/E; Description: {cm:C5}; Languages: rus; Flags: disablenouninstallwarning

Name: Mode2; Description: mode; Types: custom; Languages: eng; flags: fixed
Name: Mode2/A; Description: {cm:C1}; Languages: eng; Flags: disablenouninstallwarning
Name: Mode2/E; Description: {cm:C5}; Languages: eng; Flags: disablenouninstallwarning
Name: Mode2/F; Description: {cm:C6} Languages: eng; Flags: disablenouninstallwarning

[_code]

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';


var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup3();
begin
disabledesc();
end;

procedure InitializeWizard3();
begin
WizardForm.TypesCombo.Visible:=True;
//WizardForm.TypesCombo.Height := ScaleY(20)
WizardForm.TypesCombo.Top := ScaleY(45);
WizardForm.TypesCombo.Width := ScaleX(417);

WizardForm.ComponentsList.Height := ScaleY(186) - WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Top := ScaleY(68);
WizardForm.ComponentsList.Width := ScaleX(417);

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := ScaleY(2);
InfoPanel.Left := ScaleX(0);
InfoPanel.Width := ScaleX(418);
InfoPanel.Height := ScaleY(42);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(7);
InfoCaption.Top := InfoPanel.Top - ScaleY(6);
InfoCaption.Font.Color := clActiveCaption;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(403);
Info.Top := ScaleY(6);
Info.Height := ScaleY(26);
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,

ExpandConstant('{cm:W1};')+
ExpandConstant('{cm:W2};')+
ExpandConstant('{cm:W3};')+
ExpandConstant('{cm:W4};')+
ExpandConstant('{cm:W5};')+
ExpandConstant('{cm:W6};')
// ExpandConstant('{cm:W7};')+
// ExpandConstant('{cm:W8};')+
// ExpandConstant('{cm:W9};')
);
end;

ТимКрай 09-01-2016 21:06 2592908

Скрытый текст
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"
//---Сюда вставлять include---\\
#include "SHFileOperation.iss";



[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{FD7CFF3B-3C19-4FAE-A164-CA3A90B2C135}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[code]
//---Сюда вставлять скрипт---\\
var
BackupPage: TWizardPage;
DeleteRadioButton, MoveRadioButton, NoneRadioButton: TNewRadioButton;

const
BackupDescText =
'Во избежание проблем совместимости и конфликтов между модификациями рекомендуется удалить уже установленные на данный момент в игровом клиенте.' #13#13 'Выберите необходимый пункт из представленных. При этом будет очищено содержимое папки "res_mods\0.8.11", удалена папка "res_mods\xvm" или созданы резервные копии Ваших файлов.';
DeleteDescText =
'Установщик удалит все файлы в папках.';
MoveDescText =
'Установщик сделает резервную копию всех файлов в папках.';
NoneDescText =
'Установщик оставит всё как есть.';

function BackupCheck_1(): Boolean;
var
BackupDescLabel, DeleteDescLabel, MoveDescLabel, NoneDescLabel: TLabel;
begin
BackupPage:=CreateCustomPage(wpWelcome, 'Создание резервных копий файлов перед установкой', 'Пожалуйста, прочтите следующую важную информацию перед тем, как продолжить.');
BackupDescLabel:=TLabel.Create(WizardForm);
BackupDescLabel.Parent:=BackupPage.Surface;
BackupDescLabel.Left:=0;
BackupDescLabel.Top:=0;
BackupDescLabel.Width:=BackupPage.SurfaceWidth;
BackupDescLabel.Height:=90;
BackupDescLabel.AutoSize:=False;
BackupDescLabel.Wordwrap:=True;
BackupDescLabel.Caption:=BackupDescText;

DeleteRadioButton:=TNewRadioButton.Create(WizardForm);
DeleteRadioButton.Parent:=BackupPage.Surface;
DeleteRadioButton.Checked:=False;
DeleteRadioButton.Top:=95;
DeleteRadioButton.Width:=BackupPage.SurfaceWidth;
DeleteRadioButton.Font.Style:=[fsBold];
DeleteRadioButton.Font.Size:=9;
DeleteRadioButton.Caption:='Удалить файлы'
DeleteDescLabel:=TLabel.Create(WizardForm);
DeleteDescLabel.Parent:=BackupPage.Surface;
DeleteDescLabel.Left:=18;
DeleteDescLabel.Top:=DeleteRadioButton.Top + DeleteRadioButton.Height + 4;
DeleteDescLabel.Width:=BackupPage.SurfaceWidth;
DeleteDescLabel.Height:=40;
DeleteDescLabel.AutoSize:=False;
DeleteDescLabel.Wordwrap:=True;
DeleteDescLabel.Caption:=DeleteDescText;

MoveRadioButton:=TNewRadioButton.Create(WizardForm);
MoveRadioButton.Parent:=BackupPage.Surface;
MoveRadioButton.Checked:=True;
MoveRadioButton.Top:=140;
MoveRadioButton.Width:=BackupPage.SurfaceWidth;
MoveRadioButton.Font.Style:=[fsBold];
MoveRadioButton.Font.Size:=9;
MoveRadioButton.Caption:='Сделать резервную копию файлов'
MoveDescLabel:=TLabel.Create(WizardForm);
MoveDescLabel.Parent:=BackupPage.Surface;
MoveDescLabel.Left:=18;
MoveDescLabel.Top:=MoveRadioButton.Top + MoveRadioButton.Height + 4;
MoveDescLabel.Width:=BackupPage.SurfaceWidth;
MoveDescLabel.Height:=40;
MoveDescLabel.AutoSize:=False;
MoveDescLabel.Wordwrap:=True;
MoveDescLabel.Caption:=MoveDescText;

NoneRadioButton:=TNewRadioButton.Create(WizardForm);
NoneRadioButton.Parent:=BackupPage.Surface;
NoneRadioButton.Checked:=False;
NoneRadioButton.Top:=185;
NoneRadioButton.Width:=BackupPage.SurfaceWidth;
NoneRadioButton.Font.Style:=[fsBold];
NoneRadioButton.Font.Size:=9;
NoneRadioButton.Caption:='Ничего не трогать'
NoneDescLabel:=TLabel.Create(WizardForm);
NoneDescLabel.Parent:=BackupPage.Surface;
NoneDescLabel.Left:=18;
NoneDescLabel.Top:=NoneRadioButton.Top + NoneRadioButton.Height + 4;
NoneDescLabel.Width:=BackupPage.SurfaceWidth;
NoneDescLabel.Height:=40;
NoneDescLabel.AutoSize:=False;
NoneDescLabel.Wordwrap:=True;
NoneDescLabel.Caption:=NoneDescText;
end;

function BackupCheck_2(): Boolean;
begin
If DeleteRadioButton.Checked then
begin
DelTree(ExpandConstant('{app}\res_mods\0.8.11'), True, True, True);
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
CreateDir(ExpandConstant('{app}\res_mods\0.8.11'));
end;
end;

function BackupCheck_3(): Boolean;
begin
If MoveRadioButton.Checked then
begin
MoveDir(ExpandConstant('{app}\res_mods\0.8.11\'),ExpandConstant('{app}\res_mods\backup\0.8.11'));
MoveDir(ExpandConstant('{app}\res_mods\xvm\'),ExpandConstant('{app}\res_mods\backup\xvm'));
CreateDir(ExpandConstant('{app}\res_mods\0.8.11'));
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall then
begin
BackupCheck_2();
BackupCheck_3();
end;
end;

procedure InitializeWizard();
begin
BackupCheck_1();
end;


Скрытый текст
[Setup]
WizardSmallImageFile=C:\Users\PowerTanks\Desktop\Без имени-1.bmp
WizardImageFile=D:\FFOutput\PowerTanks.bmp
AppName=PowerTanks ModPack-0.9.2-Extendet
AppVerName=1
DefaultDirName={code:MyDirName}
Compression=lzma/max
SetupIconFile=D:\Mods\Иконки проги и т.д\powertanks.ico
AppId={{DE24C6EE-F032-412E-8A6D-A594EA2C8BF5}
AppVersion=[2]
DefaultGroupName=PowerTanks ModPack-0.9.2-Extendet

[Files]
//------- ваши картинки ------------
Source: 5.bmp; Flags: dontcopy nocompression
Source: 6.bmp; Flags: dontcopy nocompression
//------- ваши файлы ------------
Source: BELIE TRUPI\*; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: BT;
Source: KRUG15M\*; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: K5;
[Components]
Name: BT; Description: 1.Белые трупы таков.;
Name: K5; Description: 2.Круг 15м.;

[code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
OldEvent_BackButtonClick: TNotifyEvent;

procedure WizardFormCreate(Sender: TObject); forward;
procedure MainPanelClick(Sender: TObject); forward;
procedure PageDescriptionLabelClick(Sender: TObject); forward;
procedure _BackButtonClick(Sender: TObject); forward;

function MyDirName(S:String): String;
var
InsPath: String;
er: boolean;
myFile:String;
begin
Result:=ExpandConstant('C:\Games\World_of_Tanks\'); //если ключа нет то будем ставить сюда
er := RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', InsPath);
if er and (InsPath<>'') then //если ключ существует и там что-то записано
begin
Result := InsPath;
end;
end;

procedure RedesignWizardForm;
begin
with WizardForm do
begin
OnCreate := @WizardFormCreate;
AutoScroll := False;
ClientHeight := ScaleY(490);
ClientWidth := ScaleX(740);
end;

with WizardForm.Bevel do
begin
Top := ScaleY(243);
Width := ScaleX(457);
Height := ScaleY(70);
end;

with WizardForm.OuterNotebook do
begin
Width := ScaleX(745);
Height := ScaleY(457);
end;

with WizardForm.WizardBitmapImage do
begin
Width := ScaleX(740);
Height := ScaleY(458);
end;

with WizardForm.WelcomeLabel2 do
begin
Caption := '' + #13#10 +
'';
Left := ScaleX(744);
Top := ScaleY(-23);
Width := ScaleX(125);
Height := ScaleY(25);
end;

with WizardForm.WelcomeLabel1 do
begin
Caption := '';
Left := ScaleX(744);
Top := ScaleY(-23);
Width := ScaleX(13);
Height := ScaleY(25);
end;

with WizardForm.Bevel1 do
begin
Top := ScaleY(57);
Width := ScaleX(523);
Height := ScaleY(1);
end;

with WizardForm.InnerNotebook do
begin
Width := ScaleX(659);
Height := ScaleY(357);
end;

with WizardForm.LicenseNotAcceptedRadio do
begin
Top := ScaleY(312);
end;

with WizardForm.LicenseAcceptedRadio do
begin
Top := ScaleY(292);
end;

with WizardForm.LicenseMemo do
begin
Width := ScaleX(617);
Height := ScaleY(244);
end;

with WizardForm.DiskSpaceLabel do
begin
Top := ScaleY(344);
Width := ScaleX(353);
end;

with WizardForm.DirBrowseButton do
begin
Left := ScaleX(574);
Top := ScaleY(79);
end;

with WizardForm.DirEdit do
begin
Left := ScaleX(16);
Width := ScaleX(540);
end;

with WizardForm.ComponentsDiskSpaceLabel do
begin
Top := ScaleY(344);
Width := ScaleX(273);
end;

with WizardForm.ComponentsList do
begin
Width := ScaleX(657);
Height := ScaleY(227);
end;

with WizardForm.TypesCombo do
begin
Width := ScaleX(657);
end;

with WizardForm.SelectComponentsLabel do
begin
Caption := 'Выберите моды которые хотите установить, и нажмите далее';
Height := ScaleY(16);
end;

with WizardForm.TasksList do
begin
Width := ScaleX(465);
Height := ScaleY(240);
end;

with WizardForm.ReadyMemo do
begin
Width := ScaleX(657);
Height := ScaleY(333);
end;

with WizardForm.ProgressGauge do
begin
Left := ScaleX(8);
Width := ScaleX(641);
end;

with WizardForm.InfoAfterMemo do
begin
Width := ScaleX(465);
Height := ScaleY(253);
end;

with WizardForm.MainPanel do
begin
Width := ScaleX(745);
Height := ScaleY(66);
OnClick := @MainPanelClick;
end;

with WizardForm.WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(3);
Width := ScaleX(735);
Height := ScaleY(63);
end;

with WizardForm.PageDescriptionLabel do
begin
OnClick := @PageDescriptionLabelClick;
Left := ScaleX(-288);
Top := ScaleY(-5);
Width := ScaleX(285);
Height := ScaleY(5);
end;

with WizardForm.PageNameLabel do
begin
Left := ScaleX(-104);
Top := ScaleY(-14);
Width := ScaleX(101);
end;

with WizardForm.WizardBitmapImage2 do
begin
Top := ScaleY(-24);
Width := ScaleX(740);
Height := ScaleY(484);
end;

with WizardForm.RunList do
begin
Left := ScaleX(-128);
Top := ScaleY(459);
Width := ScaleX(125);
Height := ScaleY(62);
end;

with WizardForm.NoRadio do
begin
Left := ScaleX(736);
Top := ScaleY(-7);
Width := ScaleX(245);
Height := ScaleY(9);
Caption := '';
end;

with WizardForm.YesRadio do
begin
Left := ScaleX(736);
Top := ScaleY(459);
Width := ScaleX(173);
Height := ScaleY(1);
Caption := '';
end;

with WizardForm.FinishedLabel do
begin
Caption := '';
Left := ScaleX(736);
Top := ScaleY(-57);
Width := ScaleX(269);
Height := ScaleY(59);
end;

with WizardForm.FinishedHeadingLabel do
begin
Caption := '';
Left := ScaleX(736);
Top := ScaleY(-16);
Width := ScaleX(213);
Height := ScaleY(18);
end;

with WizardForm.BeveledLabel do
begin
Left := ScaleX(-48);
Top := ScaleY(402);
end;

with WizardForm.CancelButton do
begin
Left := ScaleX(617);
Top := ScaleY(463);
end;

with WizardForm.NextButton do
begin
Left := ScaleX(533);
Top := ScaleY(463);
end;

with WizardForm.BackButton do
begin
Left := ScaleX(445);
Top := ScaleY(463);
OldEvent_BackButtonClick := OnClick;
OnClick := @_BackButtonClick;
end;

{ ReservationBegin }
// Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

procedure NewButton1Click(Sender: TObject);
begin

end;

procedure MainPanelClick(Sender: TObject);
begin

end;

procedure PageDescriptionLabelClick(Sender: TObject);
begin

end;

procedure _BackButtonClick(Sender: TObject);
begin
OldEvent_BackButtonClick(Sender);
end;

procedure WizardFormCreate(Sender: TObject);
begin

end;

const
UNDEF_INDEX = -777;


function GetCursorPos(var lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall';


var
InfoPic: TBitmapImage;
LastIndex: Integer;
TempPath: String;


procedure ShowPicHint(const PicFilePath: String);
var
pt: TPoint;
begin
if not GetCursorPos(pt) then Exit;
InfoPic.Bitmap.LoadFromFile(PicFilePath);
InfoPic.SetBounds(ScaleX(360), ScaleY(40), ScaleX(290), ScaleY(278));
InfoPic.Show;
end;


procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
var
UndefPic: String;
begin
if Index = -1 then Exit;
if Index = LastIndex then Exit;
try
case TNewCheckListBox(Sender).ItemCaption[Index] of
'2.Белые трупы танков.': UndefPic := '5.bmp'; // пишем точно так же, как прописано в компонентах
'4.Боевое меню TRJ.': UndefPic := '6.bmp';

else
begin
LastIndex := UNDEF_INDEX;
InfoPic.Hide;
Exit;
end;
end;
if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic);
ShowPicHint(TempPath + UndefPic);
finally
LastIndex := Index;
end;
end;


procedure CompOnMouseLeave(Sender: TObject);
begin
InfoPic.Hide;
LastIndex := -1;
end;


procedure InitInfo();
begin
WizardForm.TypesCombo.Hide;
WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(40), ScaleX(310), ScaleY(278));
WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
TempPath := AddBackslash(ExpandConstant('{tmp}'));
LastIndex := UNDEF_INDEX;

with TBevel.Create(WizardForm) do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(360), ScaleY(40), ScaleX(290), ScaleY(278));
Shape := bsFrame;
end;

InfoPic := TBitmapImage.Create(WizardForm)
with InfoPic do
begin
Parent := WizardForm.SelectComponentsPage;
AutoSize := True;
end;
end;


procedure InitializeWizard();
begin
RedesignWizardForm;
InitInfo();
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030101812000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E7448656967687403EA010B436C69656E74576964746803E402134F6E436F6E73747261696E65645 26573697A65071057697A617264466F726D437265617465084F6E437265617465071057697A617264466F726D43726561746 50C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C69636974576964746803F4020E45787 06C696369744865696768740310020D506978656C73506572496E636802600A54657874486569676874020D00F1065442657 6656C05426576656C03546F7003F30005576964746803C9010648656967687402460B4578706C69636974546F7003F3000D4 578706C69636974576964746803C9010E4578706C6963697448656967687402460000F302010C544E65774E6F7465626F6F6 B0D4F757465724E6F7465626F6F6B05576964746803E9020648656967687403C9010D4578706C69636974576964746803E90 20E4578706C6963697448656967687403C90100F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650 D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544269746D6170496D6167651 157697A6172644269746D617


Помогите пожалуйста соединить два верхних скрипта

kotyarko@fb 09-01-2016 21:43 2592922

ТимКрай, лучше изучите основы Inno Setup и используемого языка.

ZVSRus 10-01-2016 16:44 2593152

Требуется помощь опытных пользователей.
Как прописать в Inno Setup картинки .gif, имеется ввиду флаги rus и eng развиваюшиеся.
Знаю что через botvy, но почему то не получается.
на строке FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\rus.gif')); выдает ошибку.

kotyarko@fb 10-01-2016 22:53 2593250

Цитата:

Цитата ZVSRus
Знаю что через botvy, но почему то не получается.
на строке FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\rus.gif')); выдает ошибку. »

Строка, которую вы привели, к ботве не относится.

ZVSRus 11-01-2016 10:21 2593356

Цитата:

Цитата kotyarko@fb
Строка, которую вы привели, к ботве не относится.

Большое спасибо за столь вразумительный ответ!

ZVSRus 11-01-2016 12:13 2593382

Задаю вопрос 2 раз опытным пользователям.

Как в данном куске скрипта вместо .bmp картинки, прописать каратинки .gif или .png
botva2.iss, botva2.dll, b2p.dll в скрипте прикручены.
Если можно реальный пример.

Скрипт
Код:

procedure LangClick(Sender: TObject);                               
 begin                                                             
  case TNewRadioButton(Sender) of                                   
  LangRus:                                                         
  begin                                                           
  FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\rus.bmp')); 
  FlagImage.Width := ScaleX(69);                                   
  FlagImage.Height := ScaleY(44);                                         
  FlagImage.Left := ScaleX(60);                                   
  FlagImage.Top := ScaleY(14);                                     
  end;                                                                         
  LangEng:                                                         
  begin                                                           
  FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\eng.bmp'));         
  FlagImage.Width := ScaleX(69);                                   
  FlagImage.Height := ScaleY(44);                                 
  FlagImage.Left := ScaleX(60);                                   
  FlagImage.Top := ScaleY(14);                                     
  end;                                                             
 end;


Dodakaedr 11-01-2016 12:21 2593387

ZVSRus, создайте панелки и используйте их в качестве родителя при вызове такого кода:
Код:

ImgLoad(FlagImagePanel.Handle, ExpandConstant('{tmp}\rus.png'), ScaleX(0), ScaleY(0), ScaleX(69), ScaleY(44), True, True);
ImgApplyChanges(FlagImagePanel.Handle);


ZVSRus 11-01-2016 13:39 2593417

Цитата:

Цитата Dodakaedr
создайте панелки

Все создал, как вы описали.
Компилируется нормально, но при запуске ошибка.
Что-то нужно дописать, или убрать в данной процедуре.

ZVSRus 11-01-2016 14:57 2593451

Все разобрался.

ABBAT 12-01-2016 08:49 2593735

Всем привет.
Как сделать поиск папки в корне всех дисках\разделах? Такая фишка реализована у z10yded. setup.exe ищет папку Games на всех дисках\разделах, если находит, предлагает установить игру в эту папку, иначе C:\Games. Если создать две папки на разных дисках\разделах, то предлагает установку на первый найденный.

P.S сам setup.exe.

Maratina 12-01-2016 09:32 2593748

Привет, как сделать ?
Inno Setup при запуске тихо копирует файлы в папку допустим "My Appу" в корне сис диска {sd} от туда же запускает Setup.exe. если удалось запустить файл то тихо закрывается, если нет, проблемы с правами или еще чем то выдает ошибку
пробовал пример тихой установки, но видно прогресс бар
P.S это все нужно для установки драйверов

kotyarko@fb 12-01-2016 09:33 2593750

Цитата:

Цитата ABBAT
Как сделать поиск папки в корне всех дисках\разделах? »

Использовать FindFirst. Но подобный поиск может быть весьма длительным.

Цитата:

Цитата Maratina
пробовал пример тихой установки, но видно прогресс бар »

Запускать программу с параметром "/VERYSILENT".

Maratina 12-01-2016 19:14 2594014

kotyarko@fb,
Цитата:

Цитата kotyarko@fb
Запускать программу с параметром "/VERYSILENT". »

то есть пользователь сам должен это все прописывать ? а без этого есть варианты ?

Serjione 13-01-2016 12:10 2594217

Код:

ValueData: "C:\Program Files (x86)\test.exe" -f "%1"
Данную строку как написать чтобы компилятор не ругался на пробел перед и после -f ? Данные которые в ковычках, должны вместе с ними заноситься в реестр.

ABBAT 13-01-2016 13:00 2594247

kotyarko@fb,
z10yded использует толстую Tools.dll (1.5mb) может в ней секрет спрятан.
Serjione,
"""C:\Program Files (x86)\test.exe"" -f ""%1"""

Nordek 13-01-2016 13:10 2594252

Цитата:

Цитата Serjione
ValueData: »

Что это такое? Serjione, У сайта Оракул, другой адрес.
Поясняйте, чтоб иметь представление. Представляйте рабочую часть кода, чтоб можно было воспроизвести.

Цитата:

Цитата Serjione
Данную строку как написать чтобы компилятор не ругался »

Примеры
Код:

[Registry]
Root: HKCU; SubKey: Software\Classes\test\shell\open\command; ValueType: string; ValueData: """C:\Program Files (x86)\test.exe"" -f ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty


Если путь зависит от DefaultDirName из секции [Setup], то так:
Код:

[Registry]
Root: HKCU; SubKey: Software\Classes\test\shell\open\command; ValueType: string; ValueData: """{app}\test.exe"" -f ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty


Serjione 13-01-2016 13:58 2594285

Цитата:

Цитата Nordek
Что это такое? Serjione, У сайта Оракул, другой адрес. »

Был выложен лишь проблемный участок кода.

Спасибо за ответ, ABBAT уже помог.

dimantv_wot@vk 13-01-2016 14:39 2594309

Как можно убрать Types что бы не было выбора компактный полный и т.д

ABBAT 13-01-2016 16:06 2594364

dimantv_wot@vk,
Через [Tasks] делайте, а [Components] и [Types] удалить. (в справке пример есть)

Nordek 13-01-2016 16:09 2594366

Цитата:

Цитата dimantv_wot@vk
Как можно убрать »

Код:

[Code]
procedure InitializeWizard();
begin
 
WizardForm.ComponentsList.Top := ScaleY(45);
  WizardForm.ComponentsList.Height := ScaleY(160);
  WizardForm.TypesCombo.Visible := False;
end;


Bartron 13-01-2016 18:39 2594426

Разобрался, del...

dimantv_wot@vk 14-01-2016 22:00 2595046

Всем привет скачал готовый скрипт Steam закоз но не запускает выдает ошибку, использую расширенный inno setup 5.5.1 Unicode

ZVSRus 17-01-2016 13:59 2596075

Где в коде программы Inno Setup найти размеры данных двух диалоговых окон. (Restorator'ом)
Как они называются, и можно-ли на них прикрепить свою кнопку 'Сброс'.
(т.е. какое названия родителя написить .Parent := WizardForm.????????????)
Картинка снизу.

ZVSRus 19-01-2016 09:57 2596724

Вопрос выше остался без ответа.
Или никто не знает, что мало вероятно, или не хотят, что печально!
Тогда может кто знает как растянуть InnerPage в расширенной InnoSetup

habib2302 19-01-2016 10:17 2596731

как добавить checkbox на infobefore page вместо InfoBeforeClickLabel и чтобы по окончанию установки открывался сайт
нашел на предыдущей странице

Maratina 20-01-2016 15:40 2597331

привет
есть несколько .exe файлов к игре ( игра старая) почему несколько ? каждый под "свое" разрешение экрана, допустим 1280х720, 1280х1024, 1366х768, и тд
возможно ли сделать "автоматический" выбор этого файла в зависимости от разрешения экрана ??
допустим проверить так
Скрытый текст

Код:

function GetDC(HWND: DWord): DWord; external 'GetDC@user32.dll stdcall';
function GetDeviceCaps(DC: DWord; Index: Integer): Integer; external 'GetDeviceCaps@gdi32.dll stdcall';
function ReleaseDC(HWND: DWord;DC: DWord): Integer; external 'ReleaseDC@user32.dll stdcall';

function GetMonitorInfo(MetricType:Byte;Descriptor:THandle)  : Word;
var
  dc: DWord;
begin
  Result:= 0;
  case MetricType of
    1:
    begin
      dc:= GetDC(Descriptor);
      Result:= GetDeviceCaps(dc,8);
    end;
    2:
    begin
      dc:= GetDC(Descriptor);
      Result:= GetDeviceCaps(dc,10);
    end;
  end;
  ReleaseDC(Descriptor,dc);
end;


или не получится ? и просто сделать выбор компонентов ?:

sergey3695 21-01-2016 11:19 2597622

Maratina, пример
Скрытый текст
Код:

function Sides: String;
begin
  Result:= 'bPillarBox4to3';
if (screen.Width=1024) and (screen.Height=576) then
  Result:= 'bPillarBox16to9';
if (screen.Width=1280) and (screen.Height=720) then
  Result:= 'bPillarBox16to9';
if (screen.Width=1024) and (screen.Height=576) then
  Result:= 'bPillarBox16to9';
if (screen.Width=1366) and (screen.Height=768) then
  Result:= 'bPillarBox16to9';
if (screen.Width=1920) and (screen.Height=1080) then
  Result:= 'bPillarBox16to9';
if (screen.Width=2048) and (screen.Height=1152) then
  Result:= 'bPillarBox16to9';
if (screen.Width=2560) and (screen.Height=1440) then
  Result:= 'bPillarBox16to9';
if (screen.Width=2048) and (screen.Height=1152) then
  Result:= 'bPillarBox16to9';
if (screen.Width=1280) and (screen.Height=800) then
  Result:= 'bPillarBox16to10';
if (screen.Width=1440) and (screen.Height=900) then
  Result:= 'bPillarBox16to10';
if (screen.Width=1600) and (screen.Height=1024) then
  Result:= 'bPillarBox16to10';
if (screen.Width=1680) and (screen.Height=1050) then
  Result:= 'bPillarBox16to10';
if (screen.Width=1920) and (screen.Height=1200) then
  Result:= 'bPillarBox16to10';
if (screen.Width=2560) and (screen.Height=1600) then
  Result:= 'bPillarBox16to10';
if (screen.Width=1280) and (screen.Height=1024) then
  Result:= 'bPillarBox5to4';
if (screen.Width=2560) and (screen.Height=2048) then
  Result:= 'bPillarBox5to4';
end;


LordSP 22-01-2016 05:36 2597967

Nothing..

El Sanchez 22-01-2016 11:57 2598063

Цитата:

Цитата LordSP
Вижу что преобразование кодировки не идет, но не могу разобраться почему »

LordSP, ну так в dll DsShow ожидает Unicode-строку, а передается ANSI-строка.
ANSI-cтрока Hello World! (последовательность байт):
48(H) 65(e) 6C(l) 6C(l) 6F(o) 20( ) 57(W) 6F(o) 72(r) 6C(l) 64(d) 21(!)
Unicode-строка Hello World! (последовательность байт, 2 байта на символ):
48 00 (H) 65 00(e) 6C 00(l) 6C 00(l) 6F 00(0) 20 00( ) 57 00(W) 6F 00(o) 72 00(r) 6C 00(l) 64 00(d) 21 00(!)
ANSI-cтрока Hello World!, которую пытаются трактовать как Unicode-строку (последовательность байт):
48 65() 6C 6C() 6F 20( в UTF-16BE, но у нас UTF-16LE и такого символа нет, поэтому не отображается ) 57 6F() 72 6C() 64 21()
P.S. Да, и так строки в dll не передаются. Так вообще нельзя делать, ну совсем нельзя. Курите для начала комментарий в dpr-файле dll, а потом, к примеру, http://www.gunsmoker.ru/2009/01/blog-post.html

LordSP 22-01-2016 15:39 2598156

El Sanchez, Модуль ShareMem я подключал, ничего не вышло, я в Delphi не так силен, Вы не могли бы пример показать? Насчет кодировки я понимал сразу, но так и не понял как правильно передавать строки.

dracosha 22-01-2016 17:00 2598185

Всем привет. Ребят подскажите пожалуйста... Собрал только что китайской версией установщик. В тотал командер видно что файл создан 22.01.2016 в 16:21, а если навести курсор на сам экзешник, то пишет следующее: Дата создания: 08.01.2016 19:04
Скриншот

Подскажите пожалуйста что надо сделать чтобы писались правильные дата и время?

nik1967 22-01-2016 17:46 2598196

dracosha, а если правой кнопкой на сетап => свойства => подробно, дата изменения?

dracosha 22-01-2016 19:09 2598216

nik1967, там правильная дата, сегодняшняя, такая же как и в тотале, но на всплывающей подсказке какая-то "левая" дата :(
Думал может в тотале кривая подсказка, но нет, в проводнике такая же история.
Скриншоты




nik1967 22-01-2016 19:43 2598232

dracosha, ну тогда, файл был создан именно 08.01.2016, а 22.01.2016 он был обновлён. О чём и докладывают свойства файла.

dracosha 22-01-2016 20:22 2598250

nik1967, файл я удалил и скомпилил по новой - без изменений :(

Nordek 22-01-2016 21:56 2598272

dracosha, Смотрите:

Обратите внимание под столбцами "Изменен" и "Дата создания".

Изменён - это дата создания/изменение самого инсталлятора.
Дата создания - это дата появления на носителе (Скачивание/копирование откуда-либо)

dracosha 22-01-2016 23:46 2598302

Nordek, файл я удаляю, затем открываю свой скрипт.iss китайским компилятором Inno и жму кнопку Компиляция, через 20 секунд новый файл появляется на диске, которого не было. Вопрос: какие даты создания и изменения должны быть у этого файла? Разницу в несколько секунд я конечно же допускаю, но разница та почти в две недели. Я как-то раньше обращал на это внимание и все было в порядке, это точно... Может какие системные глюки.

Nordek 23-01-2016 02:22 2598328

Цитата:

Цитата dracosha
какие даты создания и изменения должны быть у этого файла? »

В столбце "Изменён" - Дата создания самого инсталлятора. Т.е вы создали инсталлятор 22 января 2016 года в 15:00, таковой она и останется.
Дата в столбце "Дата создания" условная. Т.е может меняться от перемещения, копирования, скачивания и т.д.

Цитата:

Цитата dracosha
но разница та почти в две недели. »

В директиве OutputBaseFilename, которая в секции [Setup], назначьте другое имя на выходе.
Пример:
Код:

OutputBaseFilename=setup1

vadjliss 23-01-2016 07:52 2598336

парни подскажите как убрать время создания файла

dracosha 23-01-2016 09:50 2598343

Nordek, спасибо большое. Хоть файл я и удалял, но данные о его создании где-то все равно оставались. После твоего совета удалил свой файл и рестартанул систему - все стало на место.

Возник вопрос... Можно ли через препроцессор в китайской версии организовать удаление файла указанного в директиве OutputBaseFilename секции [Setup] до того как начнется компиляция?
p.s. варианты с ком.строкой не интересны.

kotyarko@fb 23-01-2016 13:06 2598368

Цитата:

Цитата dracosha
Можно ли через препроцессор в китайской версии организовать удаление файла указанного в директиве OutputBaseFilename секции [Setup] до того как начнется компиляция? »

Можно попробовать так:
Код:

#DeleteFile(SetupSetting("OutputBaseFilename"))

dracosha 23-01-2016 15:10 2598392

kotyarko@fb, не прокатило :(
Скриншот

kotyarko@fb 23-01-2016 15:55 2598407

dracosha, тогда как-то так:
Код:

#expr DeleteFile(AddBackslash(SetupSetting("OutputDir")) + SetupSetting("OutputBaseFilename"))

dracosha 23-01-2016 16:10 2598410

kotyarko@fb, да, так собирается, только я не успеваю проверить удаляется файл или нет :(

А вообще да, товарищ Nordek прав, дата создания файла условная и зависит от времени перемещения, копирования и скачивания.
И совсем не стоит заморачиваться на этой дате.

vadjliss 24-01-2016 14:24 2598617

парни помогите два скрипта соединить вместе голову уже сломал
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
  If CurStep = ssDone then
begin
  ShellExec('open', 'http://forum.oszone.net//', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
end;

Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
  HostFile: TStringList;
begin
  HostFile := TStringList.Create;
  try
    with HostFile do
    if CurStep = ssPostInstall then
    begin
      LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    xxx');
      Add('127.0.0.1    xxx');
      Add('127.0.0.1    xxx');
      SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts'));
    end;
  finally
    HostFile.free;
  end;
end;


kotyarko@fb 24-01-2016 15:12 2598640

vadjliss,
Код:

SaveStringToFile(ExpandConstant('{sys}\drivers\etc\hosts'), #13#10 + '127.0.0.1 www.example.com', True);

vadjliss 24-01-2016 19:20 2598690

всё разобрался
а, если мне надо больше прописать сайтов то как
Код:

SaveStringToFile(ExpandConstant('{sys}\drivers\etc\hosts'), #13#10 + '127.0.0.1 www.example.com', True);

LordSP 26-01-2016 11:12 2599205

vadjliss, извиняюсь, не увидел 127 страницу.

Устарело
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
  HostFile: TStringList;
begin
  If CurStep = ssDone then
begin
  ShellExec('open', 'http://forum.oszone.net//', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
    end;
  HostFile := TStringList.Create;
  try
    with HostFile do
    if CurStep = ssPostInstall then
    begin
      LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    xxx');
      Add('127.0.0.1    xxx');
      Add('127.0.0.1    xxx');
      SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts'));
    end;
  finally
    HostFile.free;
  end;
end;


habib2302 26-01-2016 13:57 2599288

доброе время суток. как организовать автоматическое скрытие группы задачь?


Nordek 26-01-2016 14:57 2599311

Цитата:

Цитата habib2302
как организовать автоматическое скрытие группы задачь? »

Выбираете WIzardForm Desinger.
В левой колонке переключаетесь на SelectComponentsPage.
На странице SelectComponentsPage выбираете элемент ComponentsList.
В правой колонке находите TreeViewStyle.
В TreeViewStyle меняете значение вместо False, на True.
В конечном итоге получите код:

Код:

[Code]
procedure InitializeWizard();
begin
  with
WizardForm.ComponentsList do
  begin
   
TreeViewStyle := True;
  end;
end;


Чтоб компоненты были скрытыми изначально, в секции [Components], к компоненту добавьте флаг collapsed т.е:
Код:

[Components]
Name: a; Description: A; Flags: collapsed


Aneshoharilian 30-01-2016 18:18 2600729

[Setup]
DisableReadyPage=yes

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectProgramGroup then
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)
else
WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
end;


Как сделать чтобы название кнопки изменилось ?
Нужно сменить название кнопки "Next" на "Install"

Dodakaedr 30-01-2016 19:21 2600744

Цитата:

Цитата Aneshoharilian
Как сделать чтобы название кнопки изменилось ? »

Напишите сами.
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
if CurPageID = wpSelectProgramGroup then
WizardForm.NextButton.Caption := 'Install';
end;


Aneshoharilian 30-01-2016 19:46 2600748

Цитата:

Цитата Dodakaedr
Напишите сами. »

Пробовал ваш код,ничего не изменилось

Dodakaedr 30-01-2016 20:02 2600751

Цитата:

Цитата Aneshoharilian
Пробовал ваш код,ничего не изменилось »

Да неужели???
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableReadyPage=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[icons]
Name: "{userdesktop}\bla-bla"; Filename: "{app}\bla-bla.exe";

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectProgramGroup then
WizardForm.NextButton.Caption := 'Install';
end;

Какие еще доказательства предоставить?



Aneshoharilian 30-01-2016 20:13 2600752

Цитата:

Цитата Dodakaedr
Да неужели??? »



;Inno Setup 5.5.8 Unicode
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{795448DE-FE12-4DD9-BD5B-A573E2345282}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableReadyPage=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectProgramGroup then
WizardForm.NextButton.Caption := 'Install';
end;

Inno Setup 5.5.8 Unicode не берет...

Dodakaedr 30-01-2016 20:35 2600756

Aneshoharilian, в изначальном вашем огризке было wpSelectProgramGroup а на скрине вы показываете страницу wpSelectDir, перейдите на следующую страницу и будет вам счастье или замените страницу в коде (с wpSelectProgramGroup на wpSelectDir) и отключите SelectProgramGroupPage, потому что она идет следующей....

Aneshoharilian 30-01-2016 21:08 2600772

Цитата:

Цитата Dodakaedr
wpSelectDir »

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpSelectDir) or (CurPageID = wpReady) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)
else if (CurPageID = wpFinished) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonFinish)
else
WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
end;

Доработанный код на основе ваших рекомендации =)

------------------------------------------------------------------------------

более правильный вариант,дает сбой с капчой

procedure CurPageChanged(CurPageID: Integer);
begin
// On fresh install the last pre-install page is "Select Program Group".
// On upgrade the last pre-install page is "Read to Install"
// (forced even with DisableReadyPage)
if (CurPageID = wpSelectProgramGroup) or (CurPageID = wpReady) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)
// On the Finished page, use "Finish" caption.
else if (CurPageID = wpFinished) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonFinish)
// On all other pages, use "Next" caption.
else
WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
end;

Dodakaedr 30-01-2016 21:26 2600779

Цитата:

Цитата Aneshoharilian
Доработанный код на основе ваших рекомендации »

тогда внимательней их смотрите
Скрытый текст
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}

DisableReadyPage=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[icons]
Name: "{userdesktop}\bla-bla"; Filename: "{app}\bla-bla.exe";

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectProgramGroup then
WizardForm.NextButton.Caption := 'Install';

end;


Aneshoharilian 31-01-2016 12:22 2600901



Как исправить ?

http://postimg.org/image/thshevhsz/

kotyarko@fb 31-01-2016 12:56 2600907

Aneshoharilian, перед else не ставится ";".

ZVSRus 31-01-2016 17:27 2601002

Как в данном скрипте прикрутить кнопку "Сброс" к PortableCheck,
чтобы был правильный путь и сброс.
Скрипт

Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

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

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

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[_Code]
var
  ISCustomPage1: TWizardPage;
  Installer: TNewRadioButton;
  Portable: TNewRadioButton;

procedure RedesignWizardForm;
begin
  ISCustomPage1 := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

  { Installer }
  Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(32);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Установка';
    Checked := True
  end;

  { Portable }
  Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(72);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Распаковка';
  end;

  Installer.TabOrder := 0;
  Portable.TabOrder := 1;
end;

#define A = (Defined UNICODE) ? "W" : "A"

const
  DRIVE_CDROM = 5;

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;
  OKButton, ButtonNewFolder: TButton;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path, Path1: String;
begin
  Path:= ExtractFileDrive(DirTreeView.Directory);
  Path1:= ExtractFileDrive(EditTreeView.Text);
  ButtonNewFolder.Enabled:= not CDROM(Path);
  OKButton.Enabled:= not CDROM(Path1);
    if CDROM(Path1) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then begin
    EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
    GetDrive(nil);
  end else
    EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1:        begin
          EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));
          GetDrive(nil);
        end;
    2:        begin
          DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3:        if EditTreeView.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4:        EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5:        begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6:        if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    ButtonNewFolder:= TButton.Create(nil)
    with ButtonNewFolder do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    OKButton:= TButton.Create(nil);
    with OKButton do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010C403000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D6550616765084E65787450616765070D4953437573746F6D50616765310D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650C50726576696F757350616765070D4953437573746F6D50616765310D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650D53656C656374446972506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167651653656C65637450726F6772616D47726F7570506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED00000010544E65774E6F7465626F6F6B506167650D4953437573746F6D50616765310743617074696F6E06154953437573746F6D50616765315F43617074696F6E0B4465736372697074696F6E06194953437573746F6D50616765315F4465736372697074696F6E0C50726576696F757350616765070B57656C636F6D6550616765084E65787450616765070B4C6963656E736550616765000F544E6577526164696F427574746F6E09496E7374616C6C6572044C656674021003546F70022005576964746802710648656967687402110743617074696F6E120900000023044104420430043D043E0432043A043004085461624F72646572020000000F544E6577526164696F427574746F6E08506F727461626C65044C656674021003546F70024805576964746802710648656967687402110743617074696F6E120A0000002004300441043F0430043A043E0432043A043004085461624F72646572020100000000000000


saurn 01-02-2016 19:54 2601513

Цитата:

Цитата ZVSRus
Как в данном скрипте прикрутить кнопку "Сброс" к PortableCheck »

Так, что ли?
Скрытый текст
Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

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

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

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[Code]
var
  ISCustomPage1: TWizardPage;
  Installer: TNewRadioButton;
  Portable: TNewRadioButton;

procedure RedesignWizardForm;
begin
  ISCustomPage1 := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

  { Installer }
 
Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(32);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Установка';
    Checked := True
  end;

  { Portable }
 
Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(72);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Распаковка';
  end;

  Installer.TabOrder := 0;
  Portable.TabOrder := 1;
end;

#define A = (Defined UNICODE) ? "W" : "A"

const
  DRIVE_CDROM = 5;

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;
  OKButton, ButtonNewFolder: TButton;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path, Path1: String;
begin
  Path:= ExtractFileDrive(DirTreeView.Directory);
  Path1:= ExtractFileDrive(EditTreeView.Text);
  ButtonNewFolder.Enabled:= not CDROM(Path);
  OKButton.Enabled:= not CDROM(Path1);
    if CDROM(Path1) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then begin
    EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
    GetDrive(nil);
  end else
    EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1:  begin

    ////////////////////////////////////////////////////////////////////
   
if Portable.Checked then
      EditTreeView.Text := ( AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + 'Portable' )
    else EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));

    /////////////////////////////////////////////////////////////////////
//    EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));
    GetDrive(nil);
  end;
    2:  begin
    DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
    EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3:  if EditTreeView.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4:  EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5:  begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6:  if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    ButtonNewFolder:= TButton.Create(nil)
    with ButtonNewFolder do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    OKButton:= TButton.Create(nil);
    with OKButton do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010C403000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D6550616765084E65787450616765070D4953437573746F6D50616765310D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650C50726576696F757350616765070D4953437573746F6D50616765310D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650D53656C65637


ZVSRus 01-02-2016 20:44 2601522

saurn,
Цитата:

Цитата Так, что ли?
Совсем не то. Надо как-то через {src}


saurn 01-02-2016 20:55 2601525

Цитата:

Цитата ZVSRus
Совсем не то. Надо как-то через {src} »

Тогда, полагаю, так.
Скрытый текст
Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

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

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

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[Code]
var
  ISCustomPage1: TWizardPage;
  Installer: TNewRadioButton;
  Portable: TNewRadioButton;

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
_szPath: String;
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure RedesignWizardForm;
begin
  ISCustomPage1 := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

  { Installer }
 
Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(32);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Установка';
    Checked := True;
  end;

  { Portable }
 
Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(72);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Распаковка';
  end;

  Installer.TabOrder := 0;
  Portable.TabOrder := 1;
end;

#define A = (Defined UNICODE) ? "W" : "A"

const
  DRIVE_CDROM = 5;

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;
  OKButton, ButtonNewFolder: TButton;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path, Path1: String;
begin
  Path:= ExtractFileDrive(DirTreeView.Directory);
  Path1:= ExtractFileDrive(EditTreeView.Text);
  ButtonNewFolder.Enabled:= not CDROM(Path);
  OKButton.Enabled:= not CDROM(Path1);
    if CDROM(Path1) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then begin
    EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
    GetDrive(nil);
  end else
    EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1:  begin

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
EditTreeView.Text := _szPath;
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   
GetDrive(nil);
  end;
    2:  begin
    DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
    EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3:  if EditTreeView.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4:  EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5:  begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6:  if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    ButtonNewFolder:= TButton.Create(nil)
    with ButtonNewFolder do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    OKButton:= TButton.Create(nil);
    with OKButton do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
      wpSelectDir:
      begin
          case Installer.Checked of
              False: _szPath := ( AddBackslash(ExpandConstant('{src}')) + 'Portable' );
              True: _szPath := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}') );
          end;

          WizardForm.DirEdit.Text := _szPath;
      end;
  end;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010C403000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D6550616765084E65787450616765070D4953437573746F6D50616765310D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650C50726576696F757350616765070D4953437573746F6D50616765310D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650D53656C65637


P.S.
Точнее формулируйте вопрос.

ZVSRus 01-02-2016 21:43 2601539

saurn,
Цитата:

Цитата Точнее формулируйте вопрос.
Изначальный путь правильный. Нажатие на сброс: путь правильный.
При выборе другой папки и созданию новой, название программы не соответствует названию изначального пути и названию при нажатию Сброс
Где прописать не могу найти.


saurn 01-02-2016 22:24 2601549

Цитата:

Цитата ZVSRus
Где прописать не могу найти. »

Содержимое 106-й и 132-й строк в коде замените на:
Код:

EditTreeView.Text := AddBackslash(DirTreeView.Directory) + ExtractFileName( _szPath );
Если я верно Вас понял.

ZVSRus 02-02-2016 09:12 2601612

saurn,
Цитата:

Содержимое 106-й и 132-й строк в коде замените на:
Может на рисунках будет понятней.

saurn 02-02-2016 15:47 2601751

ZVSRus,
Скрытый текст
Имена папок к логике скрипта не имеют никакого отношения. Инсталятору указано автоматически подставлять имя последней папки в пути установки. Данный скрипт вполне самодостаточен, однако имена каталогов в нем указаны, лишь для примера того, как все это будет работать. Как оперировать с именами каталогов в скрипте - это уже ваше дело.
===================================================================================

Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

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

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

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[Code]
var
  ISCustomPage1: TWizardPage;
  Installer: TNewRadioButton;
  Portable: TNewRadioButton;

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
_szPath: String;
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure RedesignWizardForm;
begin
  ISCustomPage1 := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

  { Installer }
 
Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(32);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Установка';
    Checked := True;
  end;

  { Portable }
 
Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(16);
    Top := ScaleY(72);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Распаковка';
  end;

  Installer.TabOrder := 0;
  Portable.TabOrder := 1;
end;

#define A = (Defined UNICODE) ? "W" : "A"

const
  DRIVE_CDROM = 5;

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;
  OKButton, ButtonNewFolder: TButton;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';


////////////////////////////////////////////////////////////////////////////////////////////////
function _szNameLastFolder( const _szPath: String ): String;
{ _szPath: path from which you want to get the name of the last folder }
{ Declared local variables }
var
    _i: Integer;
    _nLen: Integer;
    _szBuff: String;
begin
    _szBuff := RemoveBackslash( _szPath );
    _nLen := Length( _szBuff );

    for _i := _nLen downto 1 do
      begin
          if ( _szBuff[_i] = '\' ) then
            Break; { Stumbled upon a slash , stop the cycle }

         
Result := Format( '%s%s', [Result, _szBuff[_i]] );
      end;

    _szBuff := Result;
    Result := '';
    _nLen := Length( _szBuff );

    for _i := _nLen downto 1 do
      Result := Format( '%s%s', [Result, _szBuff[_i]] );
end;
////////////////////////////////////////////////////////////////////////////////////////////////


function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path, Path1: String;
begin
  Path:= ExtractFileDrive(DirTreeView.Directory);
  Path1:= ExtractFileDrive(EditTreeView.Text);
  ButtonNewFolder.Enabled:= not CDROM(Path);
  OKButton.Enabled:= not CDROM(Path1);
    if CDROM(Path1) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then begin

    /////////////////////////////////////////////////////////////////////////////////////////////////////////
   
EditTreeView.Text := AddBackslash(DirTreeView.Directory) + _szNameLastFolder( _szPath );
    /////////////////////////////////////////////////////////////////////////////////////////////////////////

   
GetDrive(nil);
  end else
    EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1:  begin

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
EditTreeView.Text := _szPath;
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   
GetDrive(nil);
  end;
    2:  begin
    DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
EditTreeView.Text := AddBackslash(DirTreeView.Directory) + _szNameLastFolder( _szPath );
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       
end;

    3:  if EditTreeView.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4:  EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5:  begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6:  if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    ButtonNewFolder:= TButton.Create(nil)
    with ButtonNewFolder do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    OKButton:= TButton.Create(nil);
    with OKButton do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
      wpSelectDir:
      begin
          case Installer.Checked of
              False: _szPath := ( AddBackslash(ExpandConstant('{src}')) + '{#Name}Portable' );
              True: _szPath := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}') );
          end;

          WizardForm.DirEdit.Text := _szPath;
      end;
  end;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010C403000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D6550616765084E65787450616765070D4953437573746F6D50616765310D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650C50726576696F757350616765070D4953437573746F6D50616765310D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650D53656C65637


habib2302 03-02-2016 12:03 2602108

Доброе время суток. помогите решить проблему с этим компонентом.
Код:

Name: AFP\I; Description: Установить {#MyAppName}; Flags: disablenouninstallwarning; Types: full;
Потому, что если указать этот компонент в командной строке, то получается вот что.

ИЛИ
или подскажите как сделать так, чтобы при выборе 1-го или нескольких этих компонентов
Код:

[Components]
Name: AFP\I\AX; Description: Для Internet Explorer; Flags: disablenouninstallwarning; Types: full;
Name: AFP\I\NPAPI; Description: Для AOL, Firefox, Netscape, Opera; Flags: disablenouninstallwarning; Types: full;
Name: AFP\I\PPAPI; Description: Для платформы Chromium; Flags: disablenouninstallwarning; Types: full;

снималась галочка с этого компонента
Код:

[Components]
Name: AFP\I\ALL; Description: Для Всех Браузеров; Flags: disablenouninstallwarning; Types: full;

и становился неактивным. и так на оборот.

Скрипт

Dodakaedr 04-02-2016 20:29 2602625

Цитата:

Цитата habib2302
или подскажите как сделать »

Скрытый текст
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Components]
Name: AFP; Description: {#MyAppName}; Flags: fixed disablenouninstallwarning; Types: full;
Name: AFP\I; Description: Установить {#MyAppName}; Flags: disablenouninstallwarning; Types: full;
Name: AFP\I\AX; Description: Для Internet Explorer; Flags: disablenouninstallwarning; Types: full;
Name: AFP\I\NPAPI; Description: Для AOL, Firefox, Netscape, Opera; Flags: disablenouninstallwarning; Types: full;
Name: AFP\I\PPAPI; Description: Для платформы Chromium; Flags: disablenouninstallwarning; Types: full;
Name: AFP\I\ALL; Description: Для Всех Браузеров; Flags: disablenouninstallwarning; Types: full;

[code]
procedure checking(sender: tobject);
begin
if WizardForm.ComponentsList.Checked[5] = true then
begin
WizardForm.ComponentsList.Checked[2] := false;
WizardForm.ComponentsList.ItemEnabled[2] := false;
WizardForm.ComponentsList.Checked[3] := false;
WizardForm.ComponentsList.ItemEnabled[3] := false;
WizardForm.ComponentsList.Checked[4] := false;
WizardForm.ComponentsList.ItemEnabled[4] := false;
end else begin
WizardForm.ComponentsList.ItemEnabled[2] := true;
WizardForm.ComponentsList.ItemEnabled[3] := true;
WizardForm.ComponentsList.ItemEnabled[4] := true;
end;
if (WizardForm.ComponentsList.Checked[2] or WizardForm.ComponentsList.Checked[3] or WizardForm.ComponentsList.Checked[4]) then
begin
WizardForm.ComponentsList.Checked[5] := false;
WizardForm.ComponentsList.ItemEnabled[5] := false;
end else
WizardForm.ComponentsList.ItemEnabled[5] := true;
end;

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.Checked[2] := false;
  WizardForm.ComponentsList.Checked[3] := true;
  WizardForm.ComponentsList.Checked[4] := false;
  WizardForm.ComponentsList.Checked[5] := false;
  WizardForm.ComponentsList.ItemEnabled[5] := false;
  WizardForm.ComponentsList.OnClickCheck := @checking;
end;


a.k.a. Rasputin 05-02-2016 15:17 2602872

Помогите пожалуйста со скриптом (или хотя бы ссылкой, где описано решение).
Задача такая:
1. создать простой установщик (на данном этапе проблем не возникает)
2. установщик должен заменить файлы (в разных директориях) и сделать бэкап оригиналов в отдельную папку
3. при деинсталляции оригинальные файлы должны вернуться обратно на свои места

djbionicl 06-02-2016 12:01 2603062

Подскажите, как сделать, чтобы после установки программы, она не просила регистрацию?
То есть если у меня уже зарегестрированная версия, она же и перенеслась на другой комп.

Dodakaedr 06-02-2016 18:57 2603135

Цитата:

Цитата a.k.a. Rasputin
Задача такая: »

Решение такое:
Скрытый текст
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
OutputDir=.

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "{app}\1.txt"; DestDir: "{app}\txt"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
Source: "{app}\2.txt"; DestDir: "{app}"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
Source: "{app}\1.cjstyles"; DestDir: "{app}\cjstyles"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
Source: "{app}\1.rtf"; DestDir: "{app}\txt"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
Source: "{app}\1.zip"; DestDir: "{app}\zip"; BeforeInstall: "BackupFile()"; Flags: ignoreversion

[code]
type
#ifdef UNICODE
#define A "W"
PChar = PAnsiChar;
#else
#define A "A"
#endif
  TSHFileOpStruct =  record
    Wnd: HWND;
    wFunc: UINT;
    pFrom: PChar;
    pTo: PChar;
    fFlags: Word;
    fAnyOperationsAborted: BOOL;
    hNameMappings: HWND;
    lpszProgressTitle: PChar;
  end;
 
const
  FO_MOVE            = $0001;
  FO_COPY            = $0002;
  FOF_SILENT        = $0004;
  FOF_NOCONFIRMATION = $0010;
  FOF_FILESONLY      = $0080;
  FOF_NOCONFIRMMKDIR = $0200;

function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer; external 'SHFileOperation@shell32.dll stdcall';

procedure BackupFile();
var
file, backFile, backpath: string;
begin
if FileExists(ExpandConstant(CurrentFileName)) then
begin
File := ExpandConstant(CurrentFileName);
backpath := file;
StringChangeEx(backpath, ExpandConstant('{app}'), '', True);
backFile := ExpandConstant('{app}\Backup') + backpath;
ForceDirectories(ExtractFilePath(backfile));
RenameFile(file, backfile);
end;
end;

function BackupDir(const fromDir, toDir: ansistring; IsMove: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: ansistring;
  SR: TFindRec;
  res: Boolean;
begin
    ForceDirectories(toDir);
  if IsMove then
    fos.wFunc  := FO_MOVE else
    fos.wFunc  := FO_COPY;
    fos.fFlags := FOF_FILESONLY or FOF_SILENT or
              FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
    _fromDir:= AddBackslash(fromDir);
    _toDir  := AddBackslash(toDir);
  if (Length(fromDir) = Length(_fromDir)) then
    begin
        res:= FindFirst(_fromDir + '*', SR);
      try
        while res do
        begin
          if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
          begin
            if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir + #0#0;
                fos.pFrom  := PChar(_fromDir);
                fos.pTo    := PChar(_toDir);
              end else
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir  + SR.Name + #0#0;
                fos.pFrom  := PChar(_fromDir);
                fos.pTo    := PChar(_toDir);
              end;
                Result := (0 = ShFileOperation(fos));
                _fromDir:= ExtractFilePath(_fromDir);
                _toDir:= ExtractFilePath(_toDir);
          end;
          res := FindNext(SR);
        end;
      finally
        FindClose(SR);
      end;
    end else
    begin
      _fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0;
      _toDir  := RemoveBackslashUnlessRoot(_toDir)  + #0#0;
      fos.pFrom  := PChar(_fromDir);
      fos.pTo    := PChar(_toDir);
      Result := (0 = ShFileOperation(fos));
    end;
end;

procedure RestoreBackup(backDir: string);
begin
BackupDir(backDir, ExpandConstant('{app}'), True);
DelTree(backDir, true, true, true);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usdone then
begin
RestoreBackup(ExpandConstant('{app}\Backup\'));
end;
end;



Цитата:

Цитата djbionicl
То есть если у меня уже зарегестрированная версия, она же и перенеслась на другой комп. »

Определите где программа хранит свои рег. данные и занесите их в свой установщик. Как это сделать можно найти в интернете.

a.k.a. Rasputin 06-02-2016 19:49 2603150

Dodakaedr,
от души благодарю! Скрипт работает. А то я сижу второй день, вчитываюсь в документацию.
Если вас не затруднит, подскажите пожалуйста, каким образом сделать так, чтобы путь установки брался из реестра? В реестре же в упор не нахожу ключей, которые бы указывали путь.

Dodakaedr 06-02-2016 20:20 2603157

Цитата:

Цитата a.k.a. Rasputin
чтобы путь установки брался из реестра? В реестре же в упор не нахожу ключей, которые бы указывали путь. »

Путь берется из ключа реестра деинсталлятора. В справке в разделе "Константы" есть небольшое описание получения значения.
Код:

[setup]
appname=app
appvername=app 1.0
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1,InstallLocation|{pf}\My Program}


djbionicl 06-02-2016 22:20 2603185

Цитата:

Цитата Dodakaedr
Определите где программа хранит свои рег. данные и занесите их в свой установщик. Как это сделать можно найти в интернете. »

Вот я и нашёл форум и спрашиваю. Больше ни где нет информации, либо она на английском.

Dodakaedr 06-02-2016 22:30 2603186

Цитата:

Цитата djbionicl
Больше ни где нет информации, либо она на английском. »

Действительно?
Скрытый текст
Введите в googl'e "Как отследить изменения в системе после установки программы?"

a.k.a. Rasputin 07-02-2016 01:19 2603217

Цитата Dodakaedr:
Путь берется из ключа реестра деинсталлятора. В справке в разделе "Константы" есть небольшое описание получения значения. »
еще раз спасибо!

С бэкапом небольшая загвоздка выходит.
В папке Data находятся файлы для бэкапа - Data/Файлы
После бэкапа имеем такую структуру - Backup/Data/Файлы. А вот после деинсталляции получается так - Data/Data/Файлы, а должно Data/Файлы, т.е. файлы возвращаются в папке.

На всякий случай кусок кода, возможно, я что-то неправильно делаю
Скрытый текст


Код:


[Files]
Source: "F:\Data\*.assets"; DestDir: "{app}\Data"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
;Source: "{app}\2.txt"; DestDir: "{app}"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
;Source: "{app}\1.cjstyles"; DestDir: "{app}\cjstyles"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
;Source: "{app}\1.rtf"; DestDir: "{app}\txt"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
;Source: "{app}\1.zip"; DestDir: "{app}\zip"; BeforeInstall: "BackupFile()"; Flags: ignoreversion

[code]
type
#ifdef UNICODE
#define A "W"
PChar = PAnsiChar;
#else
#define A "A"
#endif
  TSHFileOpStruct =  record
    Wnd: HWND;
    wFunc: UINT;
    pFrom: PChar;
    pTo: PChar;
    fFlags: Word;
    fAnyOperationsAborted: BOOL;
    hNameMappings: HWND;
    lpszProgressTitle: PChar;
  end;
 
const
  FO_MOVE            = $0001;
  FO_COPY            = $0002;
  FOF_SILENT        = $0004;
  FOF_NOCONFIRMATION = $0010;
  FOF_FILESONLY      = $0080;
  FOF_NOCONFIRMMKDIR = $0200;

function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer; external 'SHFileOperation@shell32.dll stdcall';

procedure BackupFile();
var
file, backFile, backpath: string;
begin
if FileExists(ExpandConstant(CurrentFileName)) then
begin
File := ExpandConstant(CurrentFileName);
backpath := file;
StringChangeEx(backpath, ExpandConstant('{app}'), '', True);
backFile := ExpandConstant('{app}\Backup') + backpath;
ForceDirectories(ExtractFilePath(backfile));
RenameFile(file, backfile);
end;
end;

function BackupDir(const fromDir, toDir: ansistring; IsMove: Boolean): Boolean;
var
  fos: TSHFileOpStruct;
  _fromDir, _toDir: ansistring;
  SR: TFindRec;
  res: Boolean;
begin
    ForceDirectories(toDir);
  if IsMove then
    fos.wFunc  := FO_MOVE else
    fos.wFunc  := FO_COPY;
    fos.fFlags := FOF_FILESONLY or FOF_SILENT or
              FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
    _fromDir:= AddBackslash(fromDir);
    _toDir  := AddBackslash(toDir);
  if (Length(fromDir) = Length(_fromDir)) then
    begin
        res:= FindFirst(_fromDir + '*', SR);
      try
        while res do
        begin
          if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
          begin
            if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir + #0#0;
                fos.pFrom  := PChar(_fromDir);
                fos.pTo    := PChar(_toDir);
              end else
              begin
                _fromDir:= _fromDir + SR.Name + #0#0;
                _toDir  := _toDir  + SR.Name + #0#0;
                fos.pFrom  := PChar(_fromDir);
                fos.pTo    := PChar(_toDir);
              end;
                Result := (0 = ShFileOperation(fos));
                _fromDir:= ExtractFilePath(_fromDir);
                _toDir:= ExtractFilePath(_toDir);
          end;
          res := FindNext(SR);
        end;
      finally
        FindClose(SR);
      end;
    end else
    begin
      _fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0;
      _toDir  := RemoveBackslashUnlessRoot(_toDir)  + #0#0;
      fos.pFrom  := PChar(_fromDir);
      fos.pTo    := PChar(_toDir);
      Result := (0 = ShFileOperation(fos));
    end;
end;

procedure RestoreBackup(backDir: string);
begin
BackupDir(backDir, ExpandConstant('{app}'), True);
DelTree(backDir, true, true, true);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usdone then
begin
RestoreBackup(ExpandConstant('{app}\Backup\'));
end;
end;


vadjliss 07-02-2016 09:07 2603247

как убрать но что бы по умолчанию ярлык устанавливался на рабочий стол

saurn 07-02-2016 09:31 2603250

Цитата:

Цитата vadjliss
как убрать но что бы по умолчанию ярлык устанавливался на рабочий стол »

Удалите из секции [Tasks] задачу, отвечающую за создание ярлыка.
Код:

[Tasks]
Name: desktopicon; Description: "Создать значек на Рабочем столе"

Или полностью удалите секцию [Tasks] из скрипта, если в ней нет других задач.
Создание ярлыка в секции [Icons] оформите следующим образом:
Код:

[Icons]
;для всех пользователей
Name: "{commondesktop}\имя программы"; Filename: "{app}\имя файла.exe"; WorkingDir: "{app}";
;для текущего пользователя
Name: "{userdesktop}\имя программы"; Filename: "{app}\имя файла.exe"; WorkingDir: "{app}";

Более подробно можно почитать в справке.

Nordek 07-02-2016 09:39 2603254

vadjliss, Удалите:
Код:

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked


В секции [Icons] найдите похожую строку:
Код:

Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe; Tasks: desktopicon

в содержимом найдите Tasks: desktopicon и удалите, т.е чтоб вместо
Код:

Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe; Tasks: desktopicon
получилось
Код:

Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe;

djbionicl 07-02-2016 10:08 2603259

Цитата:

Цитата Dodakaedr
Введите в googl'e "Как отследить изменения в системе после установки программы?" »

Отследил, а как в инно сетап вставить?

Nordek 07-02-2016 10:47 2603269

Цитата:

Цитата djbionicl
Отследил, а как в инно сетап вставить? »

Что вы отследили и чем?
Если вам нужно в скрипт импортировать содержимое реестра, то воспользуйтесь инструментом Converter: ссылка на сообщение есть в первом сообщении данной темы внутри спойлера "Дополнительные программы для Inno Setup". Если не увидели, вот вот прямая ссылка на сообщение #86.

Или используйте инструмент Inno Script Studio.
Скачайте и установите Inno Script Studio.
Откройте скрипт с помощью Inno Script Studio.
Переместите курсор мыши на секцию "Registry/Реестр"
Нажмите по "Registry/Реестр".
Переместите reg-файл в пустую область.

Dodakaedr 07-02-2016 11:24 2603281

Вложений: 1
Цитата:

Цитата a.k.a. Rasputin
С бэкапом небольшая загвоздка выходит. »

Не вижу никаких загвоздок. Все работает!

vadjliss 07-02-2016 11:56 2603290

спасибо большое парни

a.k.a. Rasputin 07-02-2016 17:28 2603422

Цитата Dodakaedr:
Все работает! »
Работает, но при восстановлении из бэкапа не совсем правильно.
Возможно, в предыдущем сообщении я не совсем подробно обрисовал:

Вот содержимое основной директории
Скрытый текст


Из папки Sol 0_Data бекапим 3 файла
Скрытый текст


И из папки Sol 0_Data\Managed бэкапим 1 файл

На выходе получаем папку Backup, в ней папка Sol 0_Data с содержимым
Скрытый текст


Здесь все хорошо.

А вот далее, после деинсталляции, папка Sol 0_Data с содержимым бэкапа должна переместиться в основную директорию и заменить файлы.
Но она копируется на уровень ниже и имеем следующее
Скрытый текст


а должно быть
Скрытый текст

Dodakaedr 07-02-2016 17:59 2603431

Цитата:

Цитата a.k.a. Rasputin
должна переместиться в основную директорию и заменить файлы »

Код так и работает. Либо вы не правильно объясняете свою задачу либо я не пойму что вам нужно.
a.k.a. Rasputin, С какой папки бэкапите в ту папку и вернется. Скорее всего где-то у вас в скрипте ошибка. Покажите свой скрипт, а именно как вы делаете бэкап и восстанавливаете его?

a.k.a. Rasputin 07-02-2016 18:40 2603440

Dodakaedr,
отправил в личку

vadjliss 07-02-2016 19:27 2603453

парни не могу понять снимаю обе галочки ни чего не устанавливается нормально
но если оставить 1 то устанавливаются обе программы в чём дело может кто отредактирует буду признателен
Код:

[Tasks]
Name: fbrinst; Description: "Microsoft Visual C++"
Name: fbrinst; Description: "Kaspersky Free Antivirus 16.0.1.445.0.173.0 [Web-Installer]"

[Files]
Source: soft\Microsoft Visual C++.exe; DestDir: {tmp}; Tasks: fbrinst; Flags: deleteafterinstall
Source: soft\Kaspersky Free Antivirus 16.0.1.445.0.173.0 [Web-Installer].exe; DestDir: {tmp}; Tasks: fbrinst; Flags: deleteafterinstall

[Run]
Filename: {tmp}\Microsoft Visual C++.exe; Description: "Launch Firebird Setup"; Tasks: fbrinst
Filename: {tmp}\Kaspersky Free Antivirus 16.0.1.445.0.173.0 [Web-Installer].exe; Description: "Launch Firebird Setup"; Tasks: fbrinst


saurn 07-02-2016 20:35 2603477

Цитата:

Цитата vadjliss
не могу понять снимаю обе галочки ни чего не устанавливается нормально
но если оставить 1 то устанавливаются обе программы »

Так у Вас обе задачи имеют одинаковое название - fbrinst - инсталятор воспринимает это, как одну команду. Каждая задача должна иметь уникальное имя
Код:

[Tasks]
Name: fbrinst; Description: "Microsoft Visual C++"
;Name: fbrinst; Description: "Kaspersky Free Antivirus 16.0.1.445.0.173.0 [Web-Installer]"
Name: kfa; Description: "Kaspersky Free Antivirus 16.0.1.445.0.173.0 [Web-Installer]"

[Files]
Source: soft\Microsoft Visual C++.exe; DestDir: {tmp}; Tasks: fbrinst; Flags: deleteafterinstall
Source: soft\Kaspersky Free Antivirus 16.0.1.445.0.173.0 [Web-Installer].exe; DestDir: {tmp}; Tasks: fbrinst; Flags: deleteafterinstall

[Run]
Filename: {tmp}\Microsoft Visual C++.exe; Description: "Launch Firebird Setup"; Tasks: fbrinst
Filename: {tmp}\Kaspersky Free Antivirus 16.0.1.445.0.173.0 [Web-Installer].exe; Description: "Launch Firebird Setup"; Tasks: kfa


a.k.a. Rasputin 09-02-2016 18:46 2604236

Подскажите пожалуйста, как добавить страницу с двумя радиокнопками для копирования определенных файлов, например
при выборе 1-й - копируется 1.txt
при выборе 2-й - копируется 2.txt

по возможности с описанием этих кнопок. Что-то вроде этого, только без чекбоксов, только 2 радиокнопки:
Скрытый текст


Скрытый текст
Код:

[Files]
Source: "{app}\1.txt"; DestDir: "{app}\Data"; BeforeInstall: "BackupFile()"; Flags: ignoreversion
Source: "{app}\2.txt"; DestDir: "{app}\Data"; BeforeInstall: "BackupFile()"; Flags: ignoreversion


Dodakaedr 09-02-2016 20:32 2604273

a.k.a. Rasputin, вопрос какой-то не корректный, но судя по скрину, наверное так:
Код:

[setup]
appname=app
appvername=app v1.1
defaultdirname={sd}\app

[Files]
Source: "1.txt"; DestDir: "{app}"; Components: "a\check1"; Flags: ignoreversion
Source: "2.txt"; DestDir: "{app}"; Components: "a\check2"; Flags: ignoreversion

[Components]
Name: "a"; Description: "что-то для программы"; Types: full compact custom;  Flags: fixed
Name: "a\check1"; Description: "1.txt"; Flags: exclusive
Name: "a\check2"; Description: "2.txt"; Flags: exclusive

более подробная инфа есть в справке.

dracosha 09-02-2016 22:56 2604313

Ребят не могу найти живой пример, а сам в этом деле не смыслю. Помогите пожалуйста.
Есть три архива 7z - внутри архивов наборы иконок в формате png. Все три набора предлагаются на странице компонентов. Нужно чтобы распаковался выбранный архив.
Пользуюсь только расширенной китайской версией. Сборка Inno Ultra.
Скрытый текст
Код:

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

[Components]
Name: "program"; Description: "Program Files"; Flags: fixed;
Name: "Fugue"; Description: "Fugue"; Flags: exclusive;
Name: "Nova"; Description: "Nova"; Flags: exclusive;
Name: "Xpk"; Description: "Xpk"; Flags: exclusive;

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: program;
Source: "Fugue.7z"; DestDir: "{app}"; Components: Fugue;
Source: "Nova.7z"; DestDir: "{app}"; Components: Nova;
Source: "Xpk.7z"; DestDir: "{app}"; Components: Xpk;

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


a.k.a. Rasputin 10-02-2016 00:05 2604327

Цитата:

Цитата Dodakaedr
вопрос какой-то не корректный »

в установщике есть 2 файла.
Нужно, чтобы пользователь смог выбрать только один из них для установки при помощи радиокнопок.

В вашем варианте выше есть выпадающий список с выбором полной, компактной и выборочной установкой. Он не нужен.

Примеры:
Скрытый текст







Dodakaedr 10-02-2016 20:22 2604670

Цитата:

Цитата a.k.a. Rasputin
В вашем варианте выше есть выпадающий список с выбором полной, компактной и выборочной установкой. Он не нужен. »

http://forum.oszone.net/post-2594366-1235.html

ZVSRus 10-02-2016 21:10 2604693

saurn, На страницах 128, 129 Вы помогли мне разобраться с кнопкой Сброс.
Если есть время помогите разобраться еще с одной кнопкой Сброс.
Нужно кнопку Сброс прикрутить к программной группе.
Скрипт скинул в личку.

Dodakaedr 10-02-2016 22:53 2604713

Цитата:

Цитата dracosha
Ребят не могу найти живой пример, а сам в этом деле не смыслю. Помогите пожалуйста. »

"Живой" пример:
Скрытый текст
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Components]
Name: "arch"; Description: "1.7z\2.7z";

[Files]
Source: "7za.exe"; Flags: dontcopy deleteafterinstall
Source: "1.7z"; DestDir: "{app}\Icons"; AfterInstall: "Extract()"; Components: arch;
Source: "2.7z"; DestDir: "{app}"; AfterInstall: "Extract()"; Components: arch;

[Code]
procedure Extract();
var
rs: integer;
strFile: String;
begin
  strFile := ExpandConstant(CurrentFileName);
  if not FileExists(ExpandConstant('{tmp}\7za.exe')) then ExtractTemporaryFile('7za.exe');
  Exec(ExpandConstant('{tmp}\7za.exe'), ' x '+'"'+strFile+'" -y -o'+'"'+ExtractFilePath(strFile)+'"', '', SW_Hide, ewWaitUntilTerminated, rs);
  DeleteFile(strFile);
end;

Файлы для примера

Aviromathe 11-02-2016 14:37 2604938

Вложений: 1
Как изменить заголовок MessageBox ?
С поддержкой юникода (c переводом строк из ANSI в UNICODE)

Скрытый текст

[code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

const
FR_PRIVATE = $10;

procedure InitializeWizard();
begin
WizardForm.Caption:= ('Установка {#MyAppName}');
end;

procedure InitializeUninstallProgressForm();
begin
UninstallProgressForm.Caption:= ('Удаление {#MyAppName}');
end;


ZVSRus 11-02-2016 21:18 2605131

Aviromathe,
Цитата:

Как изменить заголовок MessageBox ?
А если так
Скрытый текст

Код:

[Messages]
UninstallAppFullTitle=Я такой-то удаляю — %1


Irenis 12-02-2016 12:20 2605335

Всем привет. Возникла такая проблема. Переустановила виндовс. После переустановки заново установила inno setup, качала с оф. сайта, то есть отсюда http://www.jrsoftware.org/isdl.php (это же оф. сайт?). Но как то теперь инно сетап работает не так. Компилирует все нормально, но при установке скомпилированной программы исчезло первое окошко приветствия (то есть там, где говорится "вас приветствует мастер установки программы, вы установите версию такую то.... и т.д.). То есть появляется сразу окошко с выбором места установки. И это не только с вновь созданными скриптами, то же самое происходит, если компилировать те скрипты, которые создавала ранее, до переустановки. Подскажите пожалуйста, в чем может быть проблема? Спасибо.

Aviromathe 12-02-2016 13:36 2605380

Цитата:

Цитата Irenis
Всем привет. Возникла такая проблема. Переустановила виндовс. После переустановки заново установила inno setup, качала с оф. сайта, то есть отсюда http://www.jrsoftware.org/isdl.php (это же оф. сайт?). Но как то теперь инно сетап работает не так. Компилирует все нормально, но при установке скомпилированной программы исчезло первое окошко приветствия (то есть там, где говорится "вас приветствует мастер установки программы, вы установите версию такую то.... и т.д.). То есть появляется сразу окошко с выбором места установки. И это не только с вновь созданными скриптами, то же самое происходит, если компилировать те скрипты, которые создавала ранее, до переустановки. Подскажите пожалуйста, в чем может быть проблема? Спасибо. »

Вот вам окно привествия
Скрытый текст
В последних версиях окно приветствия отключено
Если хотите его включить добавьте эту строку в скрипт

[code]
DisableWelcomePage=no

Оффициальный сайт http://www.jrsoftware.org/

Venelana 13-02-2016 13:57 2605660

Вложений: 1
Помогите пожалуйста,отключить кнопку "Отмена" во время установки
Если что смотрите картинку что за кнопка!

Скрытый текст
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{558D0D03-8238-4111-9709-EF358E0F2101}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[code]
const
MF_GRAYED = $1;
MF_BYCOMMAND = $0;
SC_CLOSE = $F060;
MF_BYPOSITION = $00000400;
type
HMENU = THandle;

function GetSystemMenu(hWnd: THandle; bRevert: Boolean): THandle; external 'GetSystemMenu@user32.dll stdcall';
function EnableMenuItem(hMenu: UINT; uIDEnableItem, uEnable: UINT): Boolean; external 'EnableMenuItem@user32.dll stdcall';
function DeleteMenu(hMenu: HMENU; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetMenuItemCount(hMenu: HMENU): Integer; external 'GetMenuItemCount@user32.dll stdcall';

procedure CurPageChanged(CurPageID: Integer);
var Menu: THandle;
begin
Menu := GetSystemMenu(WizardForm.Handle, False); EnableMenuItem(Menu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
if (CurPageID = wpSelectDir) or (CurPageID = wpReady) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)
else if (CurPageID = wpFinished) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonFinish)
else
WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:= true;
Confirm:= false;
end;

procedure InitializeWizard;
var
SystemMenu: HMENU;
begin
SystemMenu := GetSystemMenu(WizardForm.Handle, False);
DeleteMenu(SystemMenu, 9999, MF_BYCOMMAND);
DeleteMenu(SystemMenu, GetMenuItemCount(SystemMenu)-1, MF_BYPOSITION);
end;


ZVSRus 13-02-2016 16:50 2605711

Цитата:

Цитата Venelana
Помогите пожалуйста,отключить кнопку "Отмена" во время установки

Как-то так
Код:

if (CurPageID = wpInstalling) then
  WizardForm.CancelButton.Visible:= False;


Gamattinol 13-02-2016 17:29 2605719

Как можно по другому отменить закрытие при помощи Alt + F4 ?

Скрытый текст
[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp
OutputDir=.

[code]
const
MF_BYCOMMAND = 0;
MF_ENABLED = 0;
MF_GRAYED = 1;
MF_DISABLED = 2;
SC_CLOSE = 61536;
GCL_STYLE = -26;
CS_NOCLOSE = $200;

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function EnableMenuItem(hMenu: THandle; uIDEnableItem: Longword; uEnable: Longword): Boolean; external 'EnableMenuItem@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';

procedure CurPageChanged(CurPageID: Integer);
begin
//if (CurPageID = wpInstalling) then
//begin
EnableMenuItem(GetSystemMenu(WizardForm.Handle, false), SC_CLOSE, MF_DISABLED or MF_BYCOMMAND);
SetClassLong(WizardForm.Handle, GCL_STYLE, GetClassLong(WizardForm.Handle, GCL_STYLE) or CS_NOCLOSE);
//end;
end;

saurn 14-02-2016 02:18 2605852

Цитата:

Цитата Venelana
отключить кнопку "Отмена" во время установки »

Код:

procedure CurPageChanged( const CurPageID: Integer );
begin
    case CurPageID of
        wpInstalling: WizardForm.CancelButton.Enabled := False;
    end;
end;

Предыдущий пример отключает видимость кнопки.
Думаю, если уж лишать пользователя возможности отменить установку, то следует, также, отключить кнопку закрытия на бордюре окна. Хотя, в таскбаре окно все равно можно будет закрыть.
Код:

#define A = (Defined UNICODE) ? "W" : "A"


const
    GCL_STYLE = - 26;
    CS_NOCLOSE = $0200;


function SetClassLong( hWnd: HWND; nIndex: Integer; dwNewLong: Longint ): DWORD; external 'SetClassLong{#A}@user32.dll stdcall';
function GetClassLong( hWnd: HWND; nIndex: Integer ): DWORD; external 'GetClassLong{#A}@user32.dll stdcall';


procedure CurPageChanged( const CurPageID: Integer );
begin
    case CurPageID of
        wpInstalling:
        begin
            WizardForm.CancelButton.Enabled := False;
            SetClassLong( WizardForm.Handle, GCL_STYLE, ( GetClassLong( WizardForm.Handle, GCL_STYLE ) or CS_NOCLOSE ) );
        end;
    end;
end;


vadjliss 14-02-2016 07:47 2605871

парни как сделать что бы название программы в инсталяторе было одно, а папка куда устанавливается программа была другой

ZVSRus 14-02-2016 14:47 2605981

Цитата:

Цитата vadjliss
парни как сделать что бы название программы в инсталяторе было одно, а папка куда устанавливается программа была другой

Я делаю так

Venelana 14-02-2016 18:02 2606050

- Отключены кнопки Alt+F4
- Отключена кнопка "Отмена" и "Закрыть"
- Нельзя закрыть с панели задач (taskbar)

Вопрос : Как сделать этот код чтобы был он UNICODE ?
То есть перевести из ANSI в UNICODE

Скрытый текст
[code]
const
MF_BYCOMMAND = 0;
MF_ENABLED = 0;
MF_GRAYED = 1;
MF_DISABLED = 2;
SC_CLOSE = 61536;
GCL_STYLE = -26;
CS_NOCLOSE = $200;
MF_BYPOSITION = $00000400;

type
HMENU = THandle;

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function EnableMenuItem(hMenu: THandle; uIDEnableItem: Longword; uEnable: Longword): Boolean; external 'EnableMenuItem@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';
function DeleteMenu(hMenu: HMENU; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetMenuItemCount(hMenu: HMENU): Integer; external 'GetMenuItemCount@user32.dll stdcall';

procedure CurPageChanged(CurPageID: Integer);
begin
EnableMenuItem(GetSystemMenu(WizardForm.Handle, false), SC_CLOSE, MF_DISABLED or MF_BYCOMMAND);
if CurPageID = wpinstalling then
WizardForm.CancelButton.Enabled := False;
if (CurPageID = wpSelectDir) or (CurPageID = wpReady) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)
else if (CurPageID = wpFinished) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonFinish)
else
WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
end;

procedure InitializeWizard;
var
SystemMenu: HMENU;
begin
SystemMenu := GetSystemMenu(WizardForm.Handle, False);
DeleteMenu(SystemMenu, 9999, MF_BYCOMMAND);
DeleteMenu(SystemMenu, GetMenuItemCount(SystemMenu)-1, MF_BYPOSITION);
SetClassLong(WizardForm.Handle, GCL_STYLE, GetClassLong(WizardForm.Handle, GCL_STYLE) or CS_NOCLOSE);
end;

Venelana 14-02-2016 19:36 2606068

Есть ли хоть какой способ заблокировать кнопку "Закрыть" на панели задач (taskbar) ?

kotyarko@fb 14-02-2016 21:27 2606109

Цитата:

Цитата Venelana
Как сделать этот код чтобы был он UNICODE ? »

Код:

function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongW@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongW@user32.dll stdcall';


Raf-9600 15-02-2016 14:58 2606286

Есть код от El Sanchez на рекурсивный поиск всех файлов по маске. Ктонить может его переделать, чтобы найдя первый файл рекурсия тут же прекращалась и функция возвращала true?

Код:

function FindFiles(Path, Mask: string; Recurse: BOOL): TArrayOfString;
var
  FindRecAll, FindRecMask: TFindRec;
begin
  if not DirExists(Path) then Exit;
    //
  if FindFirst(AddBackslash(RemoveBackslash(Path)) + Mask, FindRecMask) then
  try
    repeat
      if (FindRecMask.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
      begin
        SetArrayLength(Result, GetArrayLength(Result) + 1);
        Result[GetArrayLength(Result) - 1] := AddBackslash(RemoveBackslash(Path)) + FindRecMask.Name;
      end;
    until not FindNext(FindRecMask);
  finally
    FindClose(FindRecMask);
  end;
    //
  if Recurse then
  begin
    if FindFirst(AddBackslash(RemoveBackslash(Path)) + '*', FindRecAll) then
    try
      repeat
        if (FindRecAll.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0) and (FindRecAll.Name <> '.') and (FindRecAll.Name <> '..') then
          Result := FindFiles(AddBackslash(RemoveBackslash(Path)) + FindRecAll.Name, Mask, Recurse);
      until not FindNext(FindRecAll);
    finally
      FindClose(FindRecAll);
    end;
  end;
end;


kotyarko@fb 15-02-2016 18:51 2606360

Raf-9600, пробуйте:
Код:

Function FindFiles(Path, Mask: String): Boolean;
var
 FindRecMask: TFindRec;
begin
 Result := False;
 if DirExists(Path) then
  if FindFirst(AddBackslash(RemoveBackslash(Path)) + Mask, FindRecMask) then
  try
    repeat
      if (FindRecMask.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
      Result := True;
    until Result;
  finally
    FindClose(FindRecMask);
  end;
end;


vadjliss 15-02-2016 19:35 2606387

парни вопрос как сделать дополнительный ярлык на рабочий стол
Код:

#define MainExe "{app}\Bin32\crysis.exe"
#define MainExe64 "{app}\Bin64\crysis.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)


#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{8CD106B3-D140-412D-8762-B30B13DEFF3C}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion


[Icons]
Name: "{userdesktop}\{#MyAppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#MyAppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64


saurn 15-02-2016 20:32 2606428

Цитата:

Цитата vadjliss
как сделать дополнительный ярлык на рабочий стол »

Ярлык чего? Если исполняемых файлов программы, то они и так объявлены в секции Icons

Hantunyaha 16-02-2016 13:23 2606671

Помогите пожалуйста сделать кнопку "Отмена"
Как сделать свою кнопку вместо стандартной ?

P.S
Родная кнопка у меня отключена и сделана невидимой

Скрытый текст
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{FC9B3E48-8A0B-49FA-B161-675874D96F13}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableWelcomePage=no
AllowCancelDuringInstall=no

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon


[code]
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.CancelButton.Enabled := False;
WizardForm.CancelButton.Visible := False;
end;

procedure TestButtonOnClick(Sender: TObject);
begin
MsgBox('Тест!', mbInformation, MB_OK)
end;

procedure InitializeWizard();
var
TestButton: TButton;

begin
WizardForm.OuterNotebook.Height := ScaleY(361);
WizardForm.InnerNotebook.Height := ScaleY(285);
WizardForm.Bevel.Parent := WizardForm.WelcomePage;
WizardForm.NextButton.BringToFront;
WizardForm.BackButton.BringToFront;
WizardForm.CancelButton.BringToFront;

TestButton:=TButton.Create(WizardForm);
with TestButton do
begin
Left := ScaleX(237);
Top := ScaleY(327);
Width := ScaleX(80);
Height := ScaleY(23);
Caption:='Тест';
OnClick:=@TestButtonOnClick;
Parent:=WizardForm.WelcomePage;
end;
end;


Dodakaedr 16-02-2016 14:11 2606685

Цитата:

Цитата Hantunyaha
Родная кнопка у меня отключена и сделана невидимой »

Зачем? Можно ж просто её изменить
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}

[Messages]
ExitSetupTitle=«{#MyAppName} v{#MyAppVersion}»
ExitSetupMessage=Вы действительно хотите выйти из программы установки?


Hantunyaha 16-02-2016 14:49 2606703

Цитата:

Цитата Dodakaedr
Зачем? Можно ж просто её изменить »

Вот это код работает как мне нужно!
Что избавиться от этого компонента: AllowCancelDuringInstall нужно сделать свою кнопку отмена

Скрытый текст
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{FC9B3E48-8A0B-49FA-B161-675874D96F13}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableWelcomePage=no
AllowCancelDuringInstall=no

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon


[code]
const
MF_BYCOMMAND = 0;
MF_ENABLED = 0;
MF_GRAYED = 1;
MF_DISABLED = 2;
SC_CLOSE = 61536;
GCL_STYLE = -26;
CS_NOCLOSE = $200;

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function EnableMenuItem(hMenu: THandle; uIDEnableItem: Longword; uEnable: Longword): Boolean; external 'EnableMenuItem@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';

procedure CurPageChanged(CurPageID: Integer);
begin
//if (CurPageID = wpInstalling) then
//begin
EnableMenuItem(GetSystemMenu(WizardForm.Handle, false), SC_CLOSE, MF_DISABLED or MF_BYCOMMAND);
SetClassLong(WizardForm.Handle, GCL_STYLE, GetClassLong(WizardForm.Handle, GCL_STYLE) or CS_NOCLOSE);
//end;
end;



Как сделать кнопку ?

saurn 16-02-2016 22:00 2606884

Цитата:

Цитата Hantunyaha
Как сделать кнопку ? »

Вот так
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{FC9B3E48-8A0B-49FA-B161-675874D96F13}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableWelcomePage=no
//AllowCancelDuringInstall=no

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Windows\fonts\*"; DestDir: "{app}"; Flags: ignoreversion external;
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon


[code]
#define A = (Defined UNICODE) ? "W" : "A"


const
    MF_BYCOMMAND = 0;
    MF_ENABLED = 0;
    MF_GRAYED = 1;
    MF_DISABLED = 2;
    SC_CLOSE = 61536;
    GCL_STYLE = -26;
    CS_NOCLOSE = $200;


function GetSystemMenu( hWnd: HWND; bRevert: BOOL ): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function EnableMenuItem( hMenu: THandle; uIDEnableItem: Longword; uEnable: Longword ): Boolean; external 'EnableMenuItem@user32.dll stdcall';
function GetClassLong( Wnd: HWnd; Index: Integer ): Longint; external 'GetClassLong{#A}@user32.dll stdcall';
function SetClassLong( Wnd: HWnd; Index: Integer; NewLong: Longint ): Longint; external 'SetClassLong{#A}@user32.dll stdcall';


var
{ Declared global variables }
   
_tBtnCancel: TButton;


procedure _CancelClick ( const Sender: TObject );
begin
    WizardForm.CancelButton.Click;
end;

procedure InitializeWizard();
begin
    EnableMenuItem( GetSystemMenu( WizardForm.Handle, false ), SC_CLOSE, MF_DISABLED or MF_BYCOMMAND );
    SetClassLong( WizardForm.Handle, GCL_STYLE, GetClassLong( WizardForm.Handle, GCL_STYLE ) or CS_NOCLOSE );

    with WizardForm do
    begin
        { Create custom button }
       
_tBtnCancel := TButton.Create( nil ); { Init global variable }
       
with _tBtnCancel do
        begin
            Parent := WizardForm;
            SetBounds( ScaleX( WizardForm.CancelButton.Left ),
                      ScaleY( WizardForm.CancelButton.Top ),
                      ScaleX( WizardForm.CancelButton.Width ),
                      ScaleY( WizardForm.CancelButton.Height ) );
            Caption := SetupMessage( msgButtonCancel );
            BringToFront;
            OnClick := @_CancelClick;
        end;
    end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
    case CurPageID of
        wpFinished: _tBtnCancel.Hide;
    end;
end;


Только, в чем смысл заменять родную кнопку кастомной с идентичным событием?

Hantunyaha 17-02-2016 12:24 2607010

Вложений: 1
Ошибка при компиляции

И часть кода перестала работать

Hantunyaha 17-02-2016 12:24 2607011


TryRooM 17-02-2016 13:15 2607026

Hantunyaha,
Используйте расширенную версию компилятора, и ошибки не будет.

Hantunyaha 17-02-2016 13:27 2607029

Цитата:

Цитата TryRooM
Используйте расширенную версию компилятора, и ошибки не будет »

Использую только официальные версии!

kotyarko@fb 17-02-2016 13:40 2607032

Hantunyaha, используйте:
Код:

WizardForm.CancelButton.OnClick(nil);

Nordek 17-02-2016 14:10 2607037

Цитата:

Цитата Hantunyaha
Ошибка при компиляции »

Проверил:
В стандартной версии не работает.
В расширенной версии работает.

Используйте расширенную версию.

Цитата:

Цитата Hantunyaha
Использую только официальные версии! »

Если вы настроены на расширенную версию категорично - придётся ограничиться малым. Поскольку в одной ситуации решение будет найдено, в другой уже будет проблематично.

Reyesahydo 17-02-2016 17:48 2607140

Как записать ключ в реестр ?
Нужно записать этот ключ: AAAAA-AAAAA-AAAAA-AAAAA

kotyarko@fb 17-02-2016 18:34 2607158

Reyesahydo,
Код:

RegWriteStringValue(HKEY_CURRENT_USER, 'Software\AAAAA-AAAAA-AAAAA-AAAAA', '', '');

Reyesahydo 17-02-2016 18:57 2607169

Цитата:

Цитата kotyarko@fb
Код:
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\AAAAA-AAAAA-AAAAA-AAAAA', '', ''); »


А как записать вот сюда ?

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Valve\Half-Life\Settings]
"ValveKey"="AAAAA-AAAAA-AAAAA-AAAAA-AAAAA"

Мне ключ нужно именно передач вот этому параметру
И напишите пожалуйста куда именно нужно это нужно писать

Raf-9600 17-02-2016 20:14 2607186

Нашёл вроде бы неплохой код для проверки на наличие определённого обновления Windows https://theroadtodelphi.wordpress.co...i-wmi-and-wua/

Код:

function  ISHotFixID_Installed(const HotFixID : string): Boolean;
var
  updateSession      : OleVariant;
  updateSearcher    : OleVariant;
  updateEntry        : OleVariant;
  updateSearchResult : OleVariant;
  UpdateCollection  : OleVariant;
  oEnum              : IEnumvariant;
  iValue            : LongWord;
begin
 result:=False;
  updateSession:= CreateOleObject('Microsoft.Update.Session');
  updateSearcher    := updateSession.CreateUpdateSearcher;
  //this line improves the performance , the online porperty indicates whether the UpdateSearcher goes online to search for updates. so how we are looking for already installed updates we can set this value to false
  updateSearcher.online:=False;
  updateSearchResult:= updateSearcher.Search(Format('IsInstalled = 1 and Type=%s',[QuotedStr('Software')]));
  UpdateCollection  := updateSearchResult.Updates;
  oEnum        := IUnknown(UpdateCollection._NewEnum) as IEnumVariant;
  while oEnum.Next(1, updateEntry, iValue) = 0 do
  begin
    Result:=Pos(HotFixID,updateEntry.Title)>0;
    updateEntry:=Unassigned;
    if Result then break;
  end;
end;

Однако проблема в том, что он несовместим с Inno. В частности компилятор жалуется на OleVariant и IEnumvariant. Кто-то может это исправить?

kotyarko@fb 17-02-2016 20:29 2607192

Цитата:

Цитата Reyesahydo
А как записать вот сюда ? »

Так:
Код:

RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Valve\Half-Life\Settings', 'ValveKey', 'AAAAA-AAAAA-AAAAA-AAAAA-AAAAA');

Reyesahydo 17-02-2016 20:35 2607196

Цитата:

Цитата kotyarko@fb
Так:
Код:
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Valve\Half-Life\Settings', 'ValveKey', 'AAAAA-AAAAA »

Куда его именно нужно писать ?

saurn 17-02-2016 21:39 2607223

Цитата:

Цитата Hantunyaha
Использую только официальные версии! »

Код:

procedure _CancelClick ( const Sender: TObject );
begin
    WizardForm.CancelButton.OnClick ( Sender );
end;

======================================================================

Цитата:

Цитата Reyesahydo
Куда его именно нужно писать ? »

Для этой задачи вполне достаточно секции Registry, без оперирования в коде.
Код:

[Registry]
Root: HKCU; Subkey: "Software\Valve\Half-Life\Settings"; ValueType: string; ValueName: "ValveKey"; ValueData: "AAAAA-AAAAA-AAAAA-AAAAA-AAAAA"; Flags: deletevalue;


Reyesahydo 18-02-2016 11:37 2607432

Код:

[Registry]
Root: HKCU; Subkey: "Software\Valve\Half-Life\Settings"; ValueType: string; ValueName: "ValveKey"; ValueData: "AAAAA-AAAAA-AAAAA-AAAAA-AAAAA"; Flags: deletevalue;

Код работает не всегда (Через раз)
Можете показать как сделать код через секцию [code] ?

kotyarko@fb 18-02-2016 11:54 2607437

Цитата:

Цитата Reyesahydo
Можете показать как сделать код через секцию [code] ? »

Например:
Код:

Procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = ssPostInstall then
  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Valve\Half-Life\Settings', 'ValveKey', 'AAAAA-AAAAA-AAAAA-AAAAA-AAAAA');
end;


Oasahelola 19-02-2016 16:54 2607986

Мне нужно добавить много EXE-файлов создать для них ярлыки
Вопрос: Правильно ли я делаю ?

Сомневаюсь в правильности скрипта

P.S
Через мастер скриптов можно только один добавить

Скрытый текст
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"

[Setup]
AppId={{BEC44BB3-44D5-412E-B193-EBDAB39F9CDE}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\TEST\EXE1.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\TEST\EXE2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\TEST\EXE3.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\TEST\EXE4.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\TEST\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE1.exe"
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE2.exe"
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE3.exe"
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE4.exe"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE1"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE2"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE3"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE4"; Tasks: desktopicon


Dodakaedr 19-02-2016 17:39 2608015

Oasahelola, почти, пишите разные имена ярлыков
Код:

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\EXE1.exe"
Name: "{group}\{#MyAppName}2"; Filename: "{app}\EXE2.exe"
Name: "{group}\{#MyAppName}3"; Filename: "{app}\EXE3.exe"
Name: "{group}\{#MyAppName}4"; Filename: "{app}\EXE4.exe"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\EXE1"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}2"; Filename: "{app}\EXE2"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}3"; Filename: "{app}\EXE3"; Tasks: desktopicon
Name: "{commondesktop}\{#MyAppName}4"; Filename: "{app}\EXE4"; Tasks: desktopicon


ZVSRus 19-02-2016 18:59 2608040

Требуется помощь.
Скрытый текст

Source: "{app}\msimg32.dll"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion sharedfile uninsnosharedfileprompt
Данная DLL'ка добавлена в дистрибутив для регистрации. DLL'ка с таким-же именем есть в System32/
При удалении программы dll'ка не удаляется. Решение найдено такое.
Код:

[UninstallDelete]
 Type: files; Name: "{app}\msimg32.dll";
 
Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);                                                     
begin                                                                                                                     
 if (CurUninstallStep = usPostUninstall)  then                                                                           
  UnloadDLL(ExpandConstant('{app}\msimg32.dll'));                                                                         
  DeleteFile(ExpandConstant('{app}\msimg32.dll'));                                                                       
//  MoveDir(ExpandConstant('{app}\'),ExpandConstant('{app}'));
  RemoveDir(ExpandConstant('{app}'));
  DelTree(ExpandConstant('{app}'), True, True, True);                                                                     
  RemoveDir(ExpandConstant('{pf}\ObviousIdea'));

После данной процедуры все удаляется в чистую, но сообщение Деинсталляция %1 завершена.%n%nЧасть элементов не удалось удалить. Вы можете удалить их самостоятельно. как было так и осталось, хотя нигде ничего нету.
Решение нашёл такое.

[Messages]
UninstalledMost=Программа %1 была полностью удалена с вашего компьютера.

Думаю что данное решение не совсем правильное.
В связи с тем что в System32 есть DLL'ка с таким -же именем что и для регистрации, думаю что деинсталлятор реагирует на нее и по этому выдаёт сообщение что не все удалилось.
Думаю к строке Source: нужно добавить какие то флаги, чтобы деинсталлятор не реагировал на системную DLL msimg32.dll.
Помогите решить данную проблему.

El Sanchez 19-02-2016 20:08 2608074

Цитата:

Цитата Raf-9600
Нашёл вроде бы неплохой код для проверки на наличие определённого обновления Windows https://theroadtodelphi.wordpress.co...i-wmi-and-wua/ »

Raf-9600, он плох тем, что, во-первых, долго выполняется метод Search, на моей Windows 7 x64 ~15 мин, на XP ~2 мин, во-вторых, сравнивать параметр функции со свойством Title не есть хорошо, нужно использовать KBArticleIDs.
Скрытый текст

Код:

//////////////////////////////////////////////////////////////
function IsHotFixIDInstalled(const HotFixID: string): Boolean;
var
 
UpdateSession, UpdateSearcher, UpdateSearchResult,
  UpdateCollection, UpdateItem: Variant;
  i, j, UpdatesCount: Integer;
begin
 
Result := False;
  UpdateSession := CreateOleObject('Microsoft.Update.Session');
  UpdateSearcher := UpdateSession.CreateUpdateSearcher;
  UpdateSearcher.Online := False;
  UpdateSearchResult := UpdateSearcher.Search('IsInstalled = 1 and Type=''Software''');
  UpdateCollection := UpdateSearchResult.Updates;
  UpdatesCount := StrToIntDef(UpdateCollection.Count, 0);
  for i := 0 to UpdatesCount - 1 do
  begin
   
UpdateItem := UpdateCollection.Item[i];
    for j := 0 to UpdateItem.KBArticleIDs.Count - 1 do
    begin
     
Result := (CompareText(string(UpdateItem.KBArticleIDs.Item[j]), HotFixID) = 0);
      if Result then Exit;
    end;
  end;
end;

///////////////////////////
procedure InitializeWizard;
begin
  if
IsHotFixIDInstalled('2483139') then
   
MsgBox('yes', mbInformation, MB_OK);
end;


Цитата:

Цитата ZVSRus
Source: "{app}\msimg32.dll"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion sharedfile uninsnosharedfileprompt
Данная DLL'ка добавлена в дистрибутив для регистрации. DLL'ка с таким-же именем есть в System32/ »

ZVSRus, ну и зачем ее [msimg32.dll] копия в {app}? Или не копия? И зачем заводить еще и счетчик ссылок?

ZVSRus 19-02-2016 20:35 2608090

Цитата:

Цитата El Sanchez
ну и зачем ее [msimg32.dll] копия в {app}? Или не копия?

Нет эта DLL (msimg32.dll) не копия, идет в архиве с программой для регистрации.
(Поместить файл из раздачи msimg32.dll в папку с установленной программой.)

vadjliss 21-02-2016 11:24 2608508

ребята если у меня не сколько вот таких секций то как их объединить?
procedure CurPageChanged(CurPageID: Integer)

а, то выдаёт ошибку

kotyarko@fb 21-02-2016 12:28 2608527

vadjliss,
Код:

Procedure CurPageChanged1(CurPageID: Integer);
begin
 ...
end;

Procedure CurPageChanged2(CurPageID: Integer);
begin
 ...
end;

Procedure CurPageChanged(CurPageID: Integer);
begin
 CurPageChanged1(CurPageID);
 CurPageChanged2(CurPageID);
end;


nik1967 21-02-2016 20:07 2608696

vadjliss, а лучше всё в одной процедуре объединить. Чтобы путаницы не было.

saurn 21-02-2016 20:09 2608697

Цитата:

Цитата vadjliss
ребята если у меня не сколько вот таких секций то как их объединить?
procedure CurPageChanged(CurPageID: Integer) »

Выполнять все задачи в блоке одной процедуры. Так будет намного удобней, и в плане читаемости кода особенно.
Код:

procedure CurPageChanged( CurPageID: Integer );
begin

  задача 1
  задача 2

end;

procedure CurPageChanged( CurPageID: Integer );
begin

  задача 3
  задача 4

end;

procedure CurPageChanged( CurPageID: Integer );
begin
    задача 1
    задача 2
    задача 3
    задача 4

end;

Ой, nik1967 уже пояснил. Ну да ладно.)

Карась з Днiпра 24-02-2016 16:25 2609658

Добрый день. Подскажите пожалуйста, какие команды нужно дописать в скрипт, чтобы в случае если в директории установки программы будет найден файл с определенным именем, он будет удален автоматически. И еще одна проблемка. Если знаете, помогите плис. Столкнулся с тем, что Win10 блокирует инсталлятор. Тут я вообще безсилен, так как никогда не работал с этой ОС.

Gamattinol 24-02-2016 17:03 2609689

Вложений: 1
Файл 134345Как сделать такой компонент ?

ZVSRus 24-02-2016 18:20 2609718

Цитата:

Цитата Gamattinol
Как сделать такой компонент ?

script

Код:

[Setup]
 AppName=Notepad
 AppVersion=1.5
 DefaultDirName={pf}\Notepad

[Code*]
var
  NewGroupBox: TNewGroupBox;

procedure InitializeWizard();
begin
  NewGroupBox := TNewGroupBox.Create(WizardForm);
  with NewGroupBox do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(0);
    Top := ScaleY(100);
    Width := ScaleX(417);
    Height := ScaleY(60);
    Caption := 'Папка установки:';
  end;

  NewGroupBox.TabOrder := 5;

  with WizardForm.DirBrowseButton do
  begin
    Left := ScaleX(334);
    Top := ScaleY(23);
    Parent := NewGroupBox;
  end;

  with WizardForm.DirEdit do
  begin
    Left := ScaleX(8);
    Top := ScaleY(24);
    Width := ScaleX(320);
    Parent := NewGroupBox;
  end;
end;


dracosha 24-02-2016 18:52 2609729

Цитата:

Цитата Карась з Днiпра
Подскажите пожалуйста, какие команды нужно дописать в скрипт, чтобы в случае если в директории установки программы будет найден файл с определенным именем, он будет удален автоматически. »

точно не знаю работает ли это в стандартной версии inno setup, но в расширенной китайской версии или в сборке inno ulra точно работает...
Цитата:

[InstallDelete]
Type: files; Name: {app}\libeay32.dll;


vadjliss 24-02-2016 19:10 2609733

парни , а как можно сделать что бы перед инсталляцией выскакивала рамка с предупреждением

Карась з Днiпра 24-02-2016 19:22 2609735

Спасибо, сейчас проверю.

Огромнейшее спасибо! Работает!

Карась з Днiпра 24-02-2016 19:43 2609741

Оказывается, помимо 1 файла нужно удалить еще несколько, также, возможно, с двумя папками. Как это сделать, подскажите?

dracosha 24-02-2016 19:55 2609747

Карась з Днiпра
Цитата:

[InstallDelete]
Type: files; Name: {app}\libeay32.dll;
Type: files; Name: {app}\ssleay32.dll;
Type: filesandordirs; Name: {app}\plugins\cryptors;


Карась з Днiпра 24-02-2016 19:58 2609750

Большущее спасибо за помощь)

Gamattinol 24-02-2016 20:08 2609761

Цитата:

Цитата ZVSRus
script »


Ошибка при компиляции использую Inno-Setup 5.5.8 (Unicode)
Как исправить ?

Скрытый текст




kotyarko@fb 24-02-2016 20:13 2609767

Gamattinol, в оригинальных версиях такого типа нет, только в расширенной.

Gamattinol 24-02-2016 20:29 2609781

Цитата:

Цитата kotyarko@fb
Gamattinol, в оригинальных версиях такого типа нет, только в расширенной. »


Можно ли сделать что то похожее без сторонних модификаций ?

ZVSRus 24-02-2016 20:37 2609790

Цитата:

Цитата Gamattinol
Ошибка при компиляции использую Inno-Setup 5.5.8 (Unicode)

Делалось на расширенной версии (Inno Setup Ultra 5.5.1). Работает и на ANSI и на Unicode.
У Вас стоит обычная версия, поэтому и не хочет работать с неизвестным типом (TNewGroupBox).
Поставьте расширенную версию, функционала будет больше.

Карась з Днiпра 24-02-2016 20:41 2609799

Подскажите еще пожалуйста, что в скрипте нужно прописать или на какой версии надо компилировать инсталл, чтобы защитник Win10 не блокировал его. Мне писали о подобной проблеме, и было бы круто исправить ее.

kotyarko@fb 24-02-2016 20:48 2609807

Цитата:

Цитата Gamattinol
Можно ли сделать что то похожее без сторонних модификаций ? »

Можно. Используйте TBevel (свойства можно найти в справке).

Цитата:

Цитата Карась з Днiпра
Подскажите еще пожалуйста, что в скрипте нужно прописать или на какой версии надо компилировать инсталл, чтобы защитник Win10 не блокировал его. »

Оформить цифровую подпись (если я правильно понял, о чём вы).

Карась з Днiпра 24-02-2016 20:55 2609818

Цитата:

Цитата kotyarko@fb
Оформить цифровую подпись (если я правильно понял, о чём вы). »

Иначе никак? Да я и сам не видел этой проблемы, мне о ней только говорили. Ну а Win10 даже ставить на ПК не собираюсь.

Gamattinol 24-02-2016 20:55 2609821

Цитата:

Цитата kotyarko@fb
Можно. Используйте TBevel (свойства можно найти в справке). »

Покажите мне пример пожалуйста

Карась з Днiпра 24-02-2016 20:58 2609824

Столкнулся с непонятной проблемой. После компиляции запускаю инсталятор, а он сразу выдает мне окно с важной информацией. Окно приветствия вообще непонятно куда подевалось. Еще несколько дней назад этот же скрипт нормально компилировался, а теперь...

Блин, только что проверил - та же проблема и в ранее скомпилированных инсталяторах. Странно, что не заметил этого сразу. Только вот как исправить - не знаю. Что посоветуете?

Gamattinol 24-02-2016 21:06 2609834

В справке ничего нету,но компонент такой там есть!
Ничего не нашел как сделать это с помощью TBevel

Цитата:

Цитата Карась з Днiпра
Столкнулся с непонятной проблемой. После компиляции запускаю инсталятор, а он сразу выдает мне окно с важной информацией. Окно приветствия вообще непонятно куда подевалось. Еще несколько дней назад этот же скрипт нормально компилировался, а теперь...
Блин, только что проверил - та же проблема и в ранее скомпилированных инсталяторах. Странно, что не заметил этого сразу. Только вот как исправить - не знаю. Что посоветуете? »

Добавь это будет тебе окно приветствия

Код:

[Setup]
DisableWelcomePage=no


Карась з Днiпра 24-02-2016 21:21 2609846

Ану, сейчас попробую. Только странно, что в прежних инсталлах окно есть, а эту команду я врятли использовал.

Работает. Респект и уважуха, брат.

Dodakaedr 24-02-2016 22:12 2609876

Цитата:

Цитата Gamattinol
Покажите мне пример пожалуйста »

Пользуюсь расширенной версией, как будет на обычной работать не знаю, но для примера сойдет
Скрытый текст
Код:

[setup]
appname=app
appvername=app 1.0
DefaultDirName={sd}\app

[Code]
var
  Bevel2: TBevel;

procedure RedesignWizardForm;
begin
  { Bevel2 }
  Bevel2 := TBevel.Create(WizardForm);
  with Bevel2 do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(0);
    Top := ScaleY(136);
    Width := ScaleX(417);
    Height := ScaleY(42);
    Shape := bsFrame;
  end;

  with WizardForm.DirBrowseButton do
  begin
    Top := ScaleY(146);
    Width := ScaleX(67);
  end;

  with WizardForm.DirEdit do
  begin
    Left := ScaleX(8);
    Top := ScaleY(148);
    Width := ScaleX(324);
  end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


Цитата:

Цитата Карась з Днiпра
Только странно, что в прежних инсталлах окно есть, а эту команду я врятли использовал. »

Это такое обновление в последней версии, по умолчанию страница приветствия отключена

kotyarko@fb 24-02-2016 23:38 2609911

Цитата:

Цитата Карась з Днiпра
Иначе никак? Да я и сам не видел этой проблемы, мне о ней только говорили. Ну а Win10 даже ставить на ПК не собираюсь. »

Иначе - никак (перейдите по ссылке, если интересно).
Всё зависит от того, как настроена система. В основном все отключают эти оповещения, т.к. при частом использовании разных приложений эти оповещения надоедают.

Gamattinol 25-02-2016 13:15 2610055

Цитата:

Цитата Dodakaedr
Пользуюсь расширенной версией, как будет на обычной работать не знаю, но для примера сойдет »

Код не рабочий !!!!
Ошибок при компиляции нету,код не создает компонент!
Файл 134379

Gamattinol 25-02-2016 13:18 2610059

Вложений: 1
Как это исправить ?

Dodakaedr 25-02-2016 13:39 2610086

Цитата:

Цитата Gamattinol
Как это исправить ? »

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

Gamattinol 25-02-2016 13:45 2610092

Цитата:

Цитата Dodakaedr
Откуда я знаю что вы там написали, скриншот то даже не с моего примера. »

Скрытый текст
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{11852012-EB17-4CF3-A873-BB154995AD34}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[code]
var
NewGroupBox: TNewGroupBox;

procedure InitializeWizard();
begin
NewGroupBox := TNewGroupBox.Create(WizardForm);
with NewGroupBox do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(417);
Height := ScaleY(60);
Caption := 'Папка установки:';
end;

NewGroupBox.TabOrder := 5;

with WizardForm.DirBrowseButton do
begin
Left := ScaleX(334);
Top := ScaleY(23);
Parent := NewGroupBox;
end;

with WizardForm.DirEdit do
begin
Left := ScaleX(8);
Top := ScaleY(24);
Width := ScaleX(320);
Parent := NewGroupBox;
end;
end;



Как исправить ?
В коде ничего не трогал !

Скриншот - это мой,показываю что ничего не происходит от вашего кода!

Dodakaedr 25-02-2016 13:49 2610097

Цитата:

Цитата Gamattinol
Как исправить ?
В коде ничего не трогал ! »

добавьте
Код:

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


saurn 25-02-2016 15:06 2610141

Цитата:

Цитата Gamattinol
Как исправить ?»

Там нечего исправлять, пример рабочий. Вероятно, Вы где-то допустили ошибку.
Пример
Код:

[code]
const
    STR_TBOX = #32'Папка установки:'#32;


procedure _CtrlsEdit();
var
    _tBox: TNewGroupBox;
begin
    with WizardForm do
    begin
        _tBox := TNewGroupBox.Create( nil );
        with _tBox do
        begin
            Parent := SelectDirPage;
            SetBounds( ScaleX( 0 ), ScaleY( 100 ), ScaleX( 417 ), ScaleY( 60 ) );
            Caption := STR_TBOX;
        end;

        with DirBrowseButton do
        begin
            Left := ScaleX( 334 );
            Top := ScaleY( 23 );
            Parent := _tBox;
        end;

        with DirEdit do
        begin
            Left := ScaleX( 8 );
            Top := ScaleY( 24 );
            Width := ScaleX( 320 );
            Parent := _tBox;
        end;
    end;
end;


procedure InitializeWizard();
begin
    _CtrlsEdit();
end;


Gamattinol 25-02-2016 15:17 2610145

http://pixs.ru/showimage/Snimokekra_...4_20838132.png

Как подогнать чтобы было как на картинке ?
Больше не получается подогнать компонент и "caption" не знаю как там сделать !

Скрытый текст
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{11852012-EB17-4CF3-A873-BB154995AD34}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[code]
var
Bevel2: TBevel;

procedure RedesignWizardForm;
begin
{ Bevel2 }
Bevel2 := TBevel.Create(WizardForm);
with Bevel2 do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(135);
Width := ScaleX(418);
Height := ScaleY(50);
Shape := bsFrame;
end;

with WizardForm.DirBrowseButton do
begin
Top := ScaleY(150);
Width := ScaleX(65);
end;

with WizardForm.DirEdit do
begin
Left := ScaleX(15);
Top := ScaleY(150);
Width := ScaleX(315);
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;


saurn 25-02-2016 17:41 2610217

Цитата:

Цитата Gamattinol
Как подогнать »

Выставляйте нужные значения:
Код:

Left := ScaleX( положение контрола от левой границы );
Top := ScaleY( положение контрола от верхней границы );
Width := ScaleX( ширина контрола );
Height := ScaleY( высота контрола );

Тоже самое, только одной строкой:
Код:

SetBounds( ScaleX( от левой границы ), ScaleY( от верхней границы ), ScaleX( ширина ), ScaleY( высота ) );
Цитата:

Цитата Gamattinol
"caption" не знаю как там сделать »

Скрытый текст
Код:

[code]
const
    STR_TXT = #32'Папка установки:'#32;


procedure _CtrlsEdit();
begin
    with WizardForm do
    begin
        with TBevel.Create( nil ) do
        begin
            Parent := SelectDirPage;
            SetBounds( ScaleX( 0 ), ScaleY( 115 ), ScaleX( 418 ), ScaleY( 50 ) );
            Shape := bsFrame;
        end;

        with TNewStaticText.Create( nil ) do
        begin
            Parent := SelectDirPage;
            Left := ScaleX( 8 );
            Top := ScaleY( 108 );
            AutoSize := True;
            Caption := STR_TXT;
        end;

        with DirBrowseButton do
        begin
            Top := ScaleY( 130 );
            Width := ScaleX( 65 );
        end;

        with DirEdit do
        begin
            Left := ScaleX( 15 );
            Top := ScaleY( 130 );
            Width := ScaleX( 315 );
        end;
    end;
end;


procedure InitializeWizard();
begin
    _CtrlsEdit();
end;


Gamattinol 25-02-2016 18:40 2610246

Цитата:

Цитата saurn
[code]
const
STR_TXT = #32'Папка установки:'#32;
procedure _CtrlsEdit();
begin
with WizardForm do
begin
with TBevel.Create( nil ) do
begin
Parent := SelectDirPage;
SetBounds( ScaleX( 0 ), ScaleY( 115 ), ScaleX( 418 ), ScaleY( 50 ) );
Shape := bsFrame;
end;
with TNewStaticText.Create( nil ) do
begin
Parent := SelectDirPage;
Left := ScaleX( 8 );
Top := ScaleY( 108 );
AutoSize := True;
Caption := STR_TXT;
end;
with DirBrowseButton do
begin
Top := ScaleY( 130 );
Width := ScaleX( 65 );
end;
with DirEdit do
begin
Left := ScaleX( 15 );
Top := ScaleY( 130 );
Width := ScaleX( 315 );
end;
end;
end;
procedure InitializeWizard();
begin
_CtrlsEdit();
end;
Полезное сообщение | Отправлено: 17:41, Сегодня | #1387 »




[code]
Код:

const
    STR_TXT = #32'Destination Folder'#32;


procedure _CtrlsEdit();
begin
    with WizardForm do
    begin
        with TBevel.Create( nil ) do
        begin
            Parent := SelectDirPage;
            SetBounds( ScaleX( 0 ), ScaleY( 125 ), ScaleX( 418 ), ScaleY( 50 ) );
            Shape := bsFrame;
        end;

        with TNewStaticText.Create( nil ) do
        begin
            Parent := SelectDirPage;
            Left := ScaleX( 13 );
            Top := ScaleY( 118 );
            AutoSize := True;
            Caption := STR_TXT;
        end;

        with DirBrowseButton do
        begin
            Top := ScaleY( 137 );
            Width := ScaleX( 85 );
        end;

        with DirEdit do
        begin
            Left := ScaleX( 15 );
            Top := ScaleY( 139 );
            Width := ScaleX( 315 );
        end;
    end;
end;


procedure InitializeWizard();
begin
    _CtrlsEdit();
end;



Как убрать этот баг ?
http://pixs.ru/showimage/Snimokekra_...8_20840618.png

Не знаю как эту рамку можно сделать шире

saurn 25-02-2016 18:48 2610252

Цитата:

Цитата Gamattinol
Как убрать этот баг ? »

Это не баг, просто вы увеличили размер кнопки.
В моем примере:
Код:

Width := ScaleX( 65 );
В Вашем:
Код:

Width := ScaleX( 85 );

Gamattinol 25-02-2016 18:51 2610254

Цитата:

Цитата saurn
Это не баг, просто вы увеличили размер кнопки.
В моем примере: »

Все правильно я сделал больше кнопку!
Если сделать меньше будут кнопки по размеру отличаться,портится визуальный стиль!

saurn 25-02-2016 19:01 2610261

Цитата:

Цитата Gamattinol
Все правильно я сделал больше кнопку! »

Я так и сказал. Раз Вы увеличили кнопку, следовало учитывать, что размеры других контролов придется так же изменять: уменьшить размер DirEdit по ширине, сдвинуть кнопку влево, в частности.

Gamattinol 25-02-2016 19:03 2610262

[code]
Код:

const
    STR_TXT = #32'Destination Folder'#32;


procedure _CtrlsEdit();
begin
    with WizardForm do
    begin
        with TBevel.Create( nil ) do
        begin
            Parent := SelectDirPage;
            SetBounds( ScaleX( 0 ), ScaleY( 125 ), ScaleX( 418 ), ScaleY( 50 ) );
            Shape := bsFrame;
        end;

        with TNewStaticText.Create( nil ) do
        begin
            Parent := SelectDirPage;
            Left := ScaleX( 13 );
            Top := ScaleY( 118 );
            AutoSize := True;
            Caption := STR_TXT;
        end;

        with DirBrowseButton do
        begin
            Left := ScaleX( 315 );
            Top := ScaleY( 137 );
            Width := ScaleX( 85 );
        end;

        with DirEdit do
        begin
            Left := ScaleX( 15 );
            Top := ScaleY( 139 );
            Width := ScaleX( 290 );
        end;
    end;
end;


procedure InitializeWizard();
begin
    _CtrlsEdit();
end;

Пока что только так получилось

Gamattinol 25-02-2016 19:43 2610277



SelectDirBrowseLabel
SelectDirLabel

Как переместить в нужное место эти компоненты (label) ?

Nordek 25-02-2016 20:56 2610313

Цитата:

Цитата Gamattinol
Не знаю как эту рамку можно сделать шире »

InnerNotebook:
Код:

          with WizardForm.InnerNotebook do
          begin
           
Left := ScaleX(0);
            Width := ScaleX(499);
          end;


ZVSRus 25-02-2016 21:01 2610314

Цитата:

Цитата Gamattinol
Как переместить в нужное место эти компоненты (label) ?

Скрытый текст

Код:

procedure _CtrlsEdit();
begin
    with WizardForm do
    begin
        with TBevel.Create( nil ) do
        begin
            Parent := SelectDirPage;
            SetBounds( ScaleX( 0 ), ScaleY( 125 ), ScaleX( 418 ), ScaleY( 50 ) );
            Shape := bsFrame;
        end;

        with TNewStaticText.Create( nil ) do
        begin
            Parent := SelectDirPage;
            Left := ScaleX( 13 );
            Top := ScaleY( 118 );
            AutoSize := True;
            Caption := STR_TXT;
        end;

        with DirBrowseButton do
        begin
            Left := ScaleX( 315 );
            Top := ScaleY( 137 );
            Width := ScaleX( 85 );
        end;

        with DirEdit do
        begin
            Left := ScaleX( 15 );
            Top := ScaleY( 139 );
            Width := ScaleX( 290 );
        end;
       
        with SelectDirBrowseLabel do
        begin
            Left := ScaleX(0);
            Top := ScaleY(74);
            Width := ScaleX(417);
            Height := ScaleY(27);
        end;

        with SelectDirLabel do
        begin
            Left := ScaleX(44);
            Top := ScaleY(39);
            Width := ScaleX(373);
            Height := ScaleY(14);
        end;

    end;
end;


vadjliss 28-02-2016 16:09 2611131

парни , а как можно сделать что бы перед инсталляцией выскакивала рамка с предупреждением

saurn 28-02-2016 17:40 2611144

Цитата:

Цитата vadjliss
как можно сделать что бы перед инсталляцией выскакивала рамка с предупреждением »

Скрытый текст
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"


[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup


[Code]
function NextButtonClick( CurPageID: Integer ): Boolean;
begin
    case CurPageID of
        wpReady: Result := ( mrYes = MsgBox( 'Продолжить?', mbConfirmation, MB_YESNO ) );
        else Result := True;
    end;
end;


Irenis 29-02-2016 22:30 2611604

Всем здравствуйте :) Подскажите пожалуйста, в чем может быть проблема. В установщиках, созданных через inno setup, не всегда появляется окно, где можно задавать путь установки, это окно пропускается и программа устанавливается принудительно, хотя я не задаю никаких параметров принудительной установки. Например, создала установщик, установила созданную программу, удалила ее, и при повторной установке уже нет окна, где можно выбрать путь установки. То есть каким то образом запоминается, куда я до этого устанавливала программу, и второй раз не появляется возможность выбора. Проблема еще в том, что часто создаю программы, которые бывают похожи по содержанию (например, одинаковые папки, похожие файлы .exe), так вот эти программы тоже начинают принудительно устанавливаться в одну папку. Подскажите пожалуйста, что можно сделать, чтобы не происходило таких принудительных установок и всегда можно было выбрать путь установки? Спасибо, очень надеюсь на ответ :help:

saurn 29-02-2016 23:04 2611616

Irenis, значение директивы DisableDirPage в секции Setup, часом не auto?

Irenis 29-02-2016 23:35 2611625

Честно говоря, у меня такой директивы вообще нету :dont-know
Установщики самые простейшие, созданные через мастера создания установщика, который автоматически создает какой то скрипт, дальше уже сама просто вношу мелкие дополнения в скрипт.

saurn 29-02-2016 23:44 2611628

Irenis, можно взглянуть на один из проблемных скриптов? На счет того, что разные программы устанавливаются в одну и ту же папку, первое, что приходит на ум: для всех приложений, скорее всего, Вы используете один AppId.

Irenis 01-03-2016 09:45 2611694

Пример скрипта https://www.sendspace.com/file/guct47. Все скрипты по сути одинаковы, отличаются лишь названиями программы и расположением файлов, которые запаковываю в установщик. AppId тоже разные.
Это кстати началось после переустановки системы. То есть заново установила inno setup, может в новой версии просто нужно дописывать какие то строки в коде? Но кроме inno setup, так же переустанавливала delphi. Как раз таки в delphi создаю файлы .exe, которые потом запаковываю в установщик. Может ли inno setup как то определять, что файлы .exe идентичны и из за этого устанавливать по одному пути? И может есть способ задавать принудительно, чтобы всегда появлялось окно выбора установки?

Ghacabertt 02-03-2016 16:53 2612197

Вложений: 2
Файл 134589

Файл 134590

Как сделать чтобы при удалении не было никаких сообщений ?
Смотреть скриншоты!

nik1967 02-03-2016 18:50 2612224

Цитата:

Цитата Ghacabertt
Смотреть скриншоты!»

А если не смотреть? И чё так нагло?
Тихая деинсталляция
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DisableFinishedPage=yes
OutputDir=.

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

[Code]
function InitializeUninstall:boolean;
var
 
rcode: Integer;
 
begin
  if not UninstallSilent then begin
    Exec(ExpandConstant('{uninstallexe}'), '/SILENT', '', SW_SHOW, ewNoWait, RCode);
    Exit;
  end;
  Result:= True;
end;


ZVSRus 04-03-2016 15:02 2612851

Всем Доброго времени суток. Требуется подсказка, или небольшой пример.

Как сделать у Лейблов, таких как, ну например: WelcomeLabel1, WelcomeLabel2, FinishedLabel, BeveledLabel чтобы фон был прозрачным (а точнее без фонов).

kotyarko@fb 04-03-2016 17:05 2612904

Цитата:

Цитата ZVSRus
Как сделать у Лейблов, таких как, ну например: WelcomeLabel1, WelcomeLabel2, FinishedLabel, BeveledLabel чтобы фон был прозрачным (а точнее без фонов). »

Лейблы они только по названию, а так это TNewStaticText.
Есть два варианта:
  1. http://krinkels.org/threads/transparentstatic.2539/;
  2. Создать вместо них лейблы, со свойством Transparent.

saurn 04-03-2016 17:26 2612912

Цитата:

Цитата Irenis
может в новой версии просто нужно дописывать какие то строки в коде? »

На счет новых версий не знаю. В прежних версия директива отключения страницы выбора папки по умолчанию была установлена в no. Попробуйте принудительно установить в no - DisableSelectDirPage=no - и посмотрите, что получится.
Цитата:

Цитата Irenis
Может ли inno setup как то определять, что файлы .exe идентичны и из за этого устанавливать по одному пути? »

Идентичность файлов в выборе пути установки роли не имеет. Инно определяет наличие предыдущей установки согласно записи в реестре, в HKLM\Microsoft\Windows\CurentVersion\Uninstall.
Цитата:

Цитата ZVSRus
Как сделать у Лейблов, таких как, ну например: WelcomeLabel1, WelcomeLabel2, FinishedLabel, BeveledLabel чтобы фон был прозрачным »

Для ANSI компилятора решение написали выше. Для UNICODE - установить значение свойства Transparent контрола в True.

ZVSRus 04-03-2016 18:38 2612929

Цитата:

Цитата kotyarko@fb
Есть два варианта:

По пункту 2 может есть небольшой примерчик. Так-как Модуль TransparentStatic по моему не дружит с iswin7
Во всяком случае с BeveledLabel ничего не происходит, белая полоса на стекле так и осталась.
Модуль нашёл на Форуме Krinkels.org

ZVSRus 04-03-2016 19:54 2612949

Разобрался. И на ANSI и Unicode всё работает. У Unicode функционала по более будет!
Но загвоздка в одном так и осталась. Как быть с BeveledLabel + IsWin7 т.е. белая полоса на стекле.
На скрине видно. PS. На форуме Krinkels.org наткнулся точно на такой же вопрос, ответа не последовало.
Неужели нельзя как-то исправить.

OldGamer 05-03-2016 06:28 2613033

Здравствуйте!

Как сделать чтобы деинсталлятор удалял папку с файлами, кот. создаётся при запуске самой программы.
Папка образуется по следующему пути: C:\Users\"Имя пользователя"\AppData\Roaming\MyProg

Nordek 05-03-2016 07:36 2613047

Цитата:

Цитата OldGamer
Как сделать чтобы деинсталлятор удалял папку с файлами »

Код:

[UninstallDelete]
Name: {userappdata}\MyProg; Type: filesandordirs


vadjliss 06-03-2016 12:13 2613267

Парни привет!
скрин
помогите есть скрипт вот он
скрипт
[code]
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked

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

[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked

[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon; Check: not IsChecked
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon; Check: IsChecked

[Files]
//папка портабл
Source: "C:\Users\WW-W\Desktop\ShareDownloader*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: "C:\Users\WW-W\Desktop\ShareDownloader\*"; DestDir: "{app}"; Check: "IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs



[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.

[UninstallDelete]
Type: filesandordirs; Name: {app}

Код:

const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';

function IsChecked: Boolean;
begin
  Result:= MyRadioBtn_2.checked;
end;

procedure RadBtnOnClick(Sender: TObject);
begin
  case Sender of
    MyRadioBtn_1: begin
      WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
    MyRadioBtn_2: begin
      WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
      WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
    end;
  end;
end;

procedure GetInstTypePage();
begin
  MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));

  try
    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
    // Можно использовать обычные .ico
    AIconFileName:= ExpandConstant('{sys}\shell32.dll');
    //

    Rect.Left:= 0;
    Rect.Top:= 0;
    Rect.Right:= 32;
    Rect.Bottom:= 32;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(68);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;

    hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
    try
      with TBitmapImage.Create(WizardForm) do begin
        Left:= ScaleX(15);
        Top:= ScaleY(138);
        Width:= 32;
        Height:= 32;
        with Bitmap do begin
          Width:= 32;
          Height:= 32;
          Canvas.Brush.Color:= clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent:= MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Width:= WizardForm.InnerNotebook.Width;
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:PageTextHeader}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do begin
    Top:= ScaleY(50);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(68);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_1}');
    Parent:= MyNewPage.Surface;
  end;

  MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do begin
    Top:= ScaleY(120);
    Width:= ScaleX(150);
    Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
    Checked:= True;
    OnClick:= @RadBtnOnClick;
    Parent:= MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do begin
    Left:= ScaleX(60);
    Top:= ScaleY(138);
    Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
    Height:= ScaleY(26);
    WordWrap:= True;
    Caption:= ExpandConstant('{cm:MyText_2}');
    Parent:= MyNewPage.Surface;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
    Result:= True;
end;

procedure InitializeWizard();
begin
  GetInstTypePage();
  WizardForm.DiskSpaceLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if not IsChecked then begin
    case CurPageID of
      wpSelectDir: begin
        WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
  if IsChecked then
    WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
    WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
      end;
      wpInstalling: begin
        WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
        WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
      wpFinished: begin
        WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
        WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
      end;
    end;
  end;
end;


хочу сделать так
может кто поможет исправить скрипт
или скрипт на подобие такого

ZVSRus 06-03-2016 16:19 2613313

Цитата:

Цитата vadjliss
хочу сделать так

Посмотри по данному адресу, может подойдет.
http://krinkels.org/threads/kak-zada...ioknopok.2129/

astafev_roma 06-03-2016 17:10 2613324

Доброго времени суток, подскажите как сделать создание символьных ссылок на файлы находящиеся в определенной папке при установке:

Исходная папка с файлами: {app} \ plugins
Конечная с символьными ссылками: {app} \ tools \ project \ plugins

Код:


procedure CreateHardLink();
begin
  If BtnGetChecked(plugins_CheckBox) then
  begin
    ... код для создания ссылок ...
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  If CurStep = ssPostInstall then
  begin
    CreateHardLink()
  end;
end;


kotyarko@fb 06-03-2016 17:24 2613327

astafev_roma,
Код:

Procedure CreateHardLink();
var
 ResultCode: Integer;
begin
 if BtnGetChecked(plugins_CheckBox) then
  Exec(ExpandConstant('{cmd}'), '/C MKLINK "Имя_создаваемой_ссылки" "Назначение_ссылки"', ExpandConstant('{app}'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;


vadjliss 06-03-2016 22:19 2613433

парни помогите вот скрипт
ни как не могу понять
как сделать что бы программа установилась как положено
и так же распаковалась портабле на рабочий стол
уже голову сломал.
ну если кому не трудно исправьте скрипт
скрипт
[code]
#include "botva2.iss"

#define AppName "Ashampoo Photo Commander 14"
#define AppVersion "14.0.4"
#define AppPublisher "Ashampoo"
#define AppURL "http://dilan.at.ua/"
#define AppExeName "apc.exe"

[Setup]
AppName=Ashampoo Photo Commander 14
AppVersion=14.0.4
AppPublisher={#AppPublisher}
AppPublisherURL={#AppURL}
AppSupportURL={#AppURL}
AppUpdatesURL={#AppURL}
DefaultDirName={pf}\Ashampoo Photo Commander 14
OutputDir=.
PrivilegesRequired=admin
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

[Files]
DestName: "WizardForm.BitmapImage1.bmp"; Source: "stac.bmp"; Flags: dontcopy solidbreak
DestName: "WizardForm.BitmapImage2.bmp"; Source: "port neaktiv.bmp"; Flags: dontcopy solidbreak

Source: "C:\Users\WW-W\Desktop\Ashampoo Photo Commander 14 14_0_4\app\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: "C:\Users\WW-W\Desktop\Ashampoo Photo Commander 14 14_0_4\app\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs

Source: port neaktiv.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: 2.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: stac.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: eng.png; DestDir: {tmp}; Flags: dontcopy nocompression
Source: Portable.png; DestDir: {tmp}; Flags: dontcopy nocompression
Source: rus.png; DestDir: {tmp}; Flags: dontcopy nocompression
Source: Installer net.png; DestDir: {tmp}; Flags: dontcopy nocompression
Source: b2p.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: botva2.dll; Flags: dontcopy

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked


[Icons]
Name: {commondesktop}\Skype; Filename: {app}\apc.exe; Tasks: desktopicon

Код:

var
PortablePanel,InstallerPanel,RusFlag,EngFlag, PortableFlagPanel, InstallerFlagPanel: TPanel;
sLang, Slang2: string;
Portable,Installer, RusLang, EngLang: TNewRadioButton;
NewBox,NewGroupBox3: TNewGroupBox;
Bevel3: TBevel;
BitmapImage1,BitmapImage2: TBitmapImage;

function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\rus.png')) then ExtractTemporaryFile('rus.png');
  if not FileExists(ExpandConstant('{tmp}\eng.png')) then ExtractTemporaryFile('eng.png');

  if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');

  if not FileExists(ExpandConstant('{tmp}\Installer net.png')) then ExtractTemporaryFile('Installer net.png');
  if not FileExists(ExpandConstant('{tmp}\Portable.png')) then ExtractTemporaryFile('Portable.png');

  if not FileExists(ExpandConstant('{tmp}\port neaktiv.bmp')) then ExtractTemporaryFile('port neaktiv.bmp');
  if not FileExists(ExpandConstant('{tmp}\stac.bmp')) then ExtractTemporaryFile('stac.bmp');
 Result := True;
  end;

procedure CopmpClick(Sender: TObject);
begin
  case TNewRadioButton(Sender) of
      RusLang:
      begin
        sLang := 'rus';
        sLang2 := 'eng';
        if Portable.Checked then
            Portable.OnClick(Portable);
        if Installer.Checked then
            Installer.OnClick(Installer);
      end;
      EngLang:
      begin
        sLang := 'eng';
        sLang2 := 'rus';
        if Portable.Checked then
            Portable.OnClick(Portable);
        if Installer.Checked then
            Installer.OnClick(Installer);
      end;
      Portable:
      begin
        PortablePanel.Show;
        PortableFlagPanel.Show;
        InstallerPanel.Show;
        ImgLoad(PortableFlagPanel.Handle, ExpandConstant('{tmp}\' + sLang + '.png'), ScaleX(0), ScaleY(0),
                  ScaleX(40), ScaleY(20), True, True);
        ImgApplyChanges(PortableFlagPanel.Handle);
        InstallerFlagPanel.Hide;
      end;
      Installer:
      begin
        InstallerPanel.Hide; 
        PortablePanel.Hide;
        InstallerFlagPanel.Show;
        ImgLoad(InstallerFlagPanel.Handle, ExpandConstant('{tmp}\' + sLang + '.png'), ScaleX(0), ScaleY(0),
                  ScaleX(40), ScaleY(20), True, True);
        ImgApplyChanges(InstallerFlagPanel.Handle);
        PortableFlagPanel.Hide;
      end;
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.DiskSpaceLabel.Hide;
  WizardForm.SelectDirBitmapImage.Hide;
  sLang := 'rus';
  sLang2 := 'eng';

  NewGroupBox3 := TNewGroupBox.Create(WizardForm);
  with NewGroupBox3 do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(417);
    Height := ScaleY(183);
    Caption := 'Пожалуйста, выберите версию:';
  end;

  Bevel3 := TBevel.Create(WizardForm);
  with Bevel3 do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(208);
    Top := ScaleY(22);
    Width := ScaleX(2);
    Height := ScaleY(148);
  end;

  PortablePanel := TPanel.Create(WizardForm);
  with PortablePanel do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(248);
    Top := ScaleY(56);
    Width := ScaleX(122);
    Height := ScaleY(112);
    BevelOuter := bvNone;
    ParentBackground := True;
    end;

  InstallerPanel := TPanel.Create(WizardForm);
  with InstallerPanel do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(32);
    Top := ScaleY(56);
    Width := ScaleX(122);
    Height := ScaleY(112);
    BevelOuter := bvNone;
    ParentBackground := True;
    end;

  InstallerFlagPanel := TPanel.Create(WizardForm);
    with InstallerFlagPanel do
    begin
    Parent := NewGroupBox3;
    Left := ScaleX(106);
    Top := ScaleY(145);
    Width := ScaleX(40);
    Height := ScaleY(20);
    BevelOuter := bvNone;
    ParentBackground := True;
    end;

    PortableFlagPanel := TPanel.Create(WizardForm);
    with PortableFlagPanel do
    begin
    Parent := NewGroupBox3;
    Left := ScaleX(326);
    Top := ScaleY(145);
    Width := ScaleX(40);
    Height := ScaleY(20);
    BevelOuter := bvNone;
    ParentBackground := True;
    end;

    BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(32);
    Top := ScaleY(56);
    Width := ScaleX(122);
    Height := ScaleY(112);
    ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
  end;

 
  BitmapImage2 := TBitmapImage.Create(WizardForm);
  with BitmapImage2 do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(248);
    Top := ScaleY(56);
    Width := ScaleX(122);
    Height := ScaleY(112);
    ExtractTemporaryFile('WizardForm.BitmapImage2.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage2.bmp'));
  end;

  Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(264);
    Top := ScaleY(16);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Портативная';
    OnClick:=@CopmpClick;
    Checked := True;
    end;

  Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := NewGroupBox3;
    Left := ScaleX(32);
    Top := ScaleY(16);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Стационарная';
    OnClick:=@CopmpClick;
    Checked := True;
    end;

  NewBox := TNewGroupBox.Create(WizardForm);
    with NewBox do
    begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(210);
    Top := ScaleY(185);
    Width := ScaleX(207);
    Height := ScaleY(50);
    Caption := 'Язык интерфейса:';
    end;

  EngLang := TNewRadioButton.Create(WizardForm);
  with EngLang do
  begin
    Parent := NewBox;
    Left := ScaleX(100);
    Top := ScaleY(23);
    Width := ScaleX(80);
    Height := ScaleY(17);
    Caption := 'Английский';
    Checked := True;
    OnClick:=@CopmpClick;
    end;

  RusLang := TNewRadioButton.Create(WizardForm);
  with RusLang do
  begin
    Parent := NewBox;
    Left := ScaleX(25);
    Top := ScaleY(23);
    Width := ScaleX(60);
    Height := ScaleY(17);
    Caption := 'Русский';
    OnClick:=@CopmpClick;
    Checked :=True;
    end;

    ImgLoad(PortablePanel.Handle,ExpandConstant('{tmp}\Portable.png'),ScaleX(0),ScaleY(0),ScaleX(122),ScaleY(112),True,True);
    ImgApplyChanges(PortablePanel.Handle);

    ImgLoad(InstallerPanel.Handle,ExpandConstant('{tmp}\Installer net.png'),ScaleX(0),ScaleY(0),ScaleX(122),ScaleY(112),True,True);
    ImgApplyChanges(InstallerPanel.Handle);

    ImgLoad(InstallerFlagPanel.Handle,ExpandConstant('{tmp}\rus.png'),ScaleX(0),ScaleY(0),ScaleX(40),ScaleY(20),True,True);
    ImgApplyChanges(InstallerFlagPanel.Handle);

    ImgLoad(PortableFlagPanel.Handle,ExpandConstant('{tmp}\eng.png'),ScaleX(0),ScaleY(0),ScaleX(40),ScaleY(20),True,True);
    ImgApplyChanges(PortableFlagPanel.Handle);
    end;

procedure DeinitializeSetup();
begin
  gdipShutdown;
end;


vadjliss 07-03-2016 08:07 2613504

парни посмотрите скрипт музыка играет а кнопки на выключение музыки нет
скрин
ссылка на скрипт скрипт

ZVSRus 07-03-2016 10:29 2613535

Цитата:

Цитата vadjliss
как сделать что бы программа установилась как положено

Скрытый текст

Код:

[Files]
 //  Строки после картинок
 Source: "D:\Files\*"; DestDir: "{app}"; Flags: ignoreversion; Check: InstallerCheck;
 Source: "D:\dll\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: PortableCheck;

[Code*]
function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\rus.png')) then ExtractTemporaryFile('rus.png');
  if not FileExists(ExpandConstant('{tmp}\eng.png')) then ExtractTemporaryFile('eng.png');

  if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');

  if not FileExists(ExpandConstant('{tmp}\Installer net.png')) then ExtractTemporaryFile('Installer net.png');
  if not FileExists(ExpandConstant('{tmp}\Portable.png')) then ExtractTemporaryFile('Portable.png');

  if not FileExists(ExpandConstant('{tmp}\port neaktiv.bmp')) then ExtractTemporaryFile('port neaktiv.bmp');
  if not FileExists(ExpandConstant('{tmp}\stac.bmp')) then ExtractTemporaryFile('stac.bmp');
 Result := True;
  end;

function InstallerCheck: Boolean;   
 begin                               
  Result := Installer.Checked;     
 end;                               

 function PortableCheck: Boolean;   
 begin                               
  Result := Portable.Checked;       
 end;


procedure CopmpClick(Sender: TObject);
begin
  case TNewRadioButton(Sender) of
      RusLang:
      begin
        sLang := 'rus';
        sLang2 := 'eng';
        if Portable.Checked then
            Portable.OnClick(Portable);
        if Installer.Checked then
            Installer.OnClick(Installer);
      end;
      EngLang:
      begin
        sLang := 'eng';
        sLang2 := 'rus';
        if Portable.Checked then
            Portable.OnClick(Portable);
        if Installer.Checked then
            Installer.OnClick(Installer);
      end;
      Portable:
      begin
        PortablePanel.Show;
        PortableFlagPanel.Show;
        InstallerPanel.Show;
        ImgLoad(PortableFlagPanel.Handle, ExpandConstant('{tmp}\' + sLang + '.png'), ScaleX(0), ScaleY(0),
                  ScaleX(40), ScaleY(20), True, True);
        ImgApplyChanges(PortableFlagPanel.Handle);
        InstallerFlagPanel.Hide;

        WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + 'AshampooPhotoCommanderPortable';
        WizardForm.Caption:= FmtMessage(ExpandConstant('Распаковка — %1'), [ExpandConstant('{#SetupSetting("AppName")}')]);

      end;
      Installer:
      begin
        InstallerPanel.Hide;
        PortablePanel.Hide;
        InstallerFlagPanel.Show;
        ImgLoad(InstallerFlagPanel.Handle, ExpandConstant('{tmp}\' + sLang + '.png'), ScaleX(0), ScaleY(0),
                  ScaleX(40), ScaleY(20), True, True);
        ImgApplyChanges(InstallerFlagPanel.Handle);
        PortableFlagPanel.Hide;

        WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf}')) + 'Ashampoo Photo Commander 14';
        WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);

      end;
  end;
end;


vadjliss 07-03-2016 11:47 2613555

спасибо но зараза ошибку выдаёт может что то не так?

всё разобрался
а, как на счёт 1 вопроса про кнопку выключения музыки
может кто то разобрался с скриптом
музыка играет а кнопки на выключение музыки нет

kotyarko@fb 07-03-2016 13:02 2613580

Цитата:

Цитата vadjliss
парни посмотрите скрипт музыка играет а кнопки на выключение музыки нет
ссылка на скрипт»

Это ссылка не на скрипт, а на собранную программу.

vadjliss 07-03-2016 21:48 2613728

как сделать что бы программа закрепилась на панели задач

kotyarko@fb 08-03-2016 00:12 2613750

vadjliss, http://forum.oszone.net/post-1988566-926.html

vadjliss 08-03-2016 07:00 2613768

что то не получается

saurn 08-03-2016 14:20 2613845

Цитата:

Цитата vadjliss
что то не получается »

Что именно не получается?
Пример
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"


[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup


[Files]
Source: "{#compilerpath}Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion


[Code]
const
    LOAD_LIBRARY_AS_DATAFILE = $2;


#define A = (Defined UNICODE) ? "W" : "A"


function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';


function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to executable file
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

    { String resources }
   
if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        res := 5386;        { Pin to Tas&kbar }
   
end else res := 5387;  { Unpin from Tas&kbar }

    { Load string resource }
   
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;


{ Pin }
procedure CurStepChanged(CurStep: TSetupStep);
begin
    case CurStep of
        ssPostInstall: PinToTaskbar( ExpandConstant( '{app}\MyProg.exe' ), True );
    end;
end;


{ UnPin }
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    case CurUninstallStep of
        usUninstall: PinToTaskbar( ExpandConstant( '{app}\MyProg.exe' ), False );
    end;
end;


vadjliss 08-03-2016 18:00 2613907

saurn
благодарю теперь всё ок

Bartron 15-03-2016 16:49 2616297

Удалил, всё равно помощи никакой...

dimantv_wot@vk 15-03-2016 20:11 2616363

Как в компонентах сделать что бы при выборе компонента ставилась галочка или кружок не нажимания на них а нажимая на текст

Ferling 16-03-2016 12:22 2616560

Вложений: 1
Многоуважаемые знатоки! Прошу Вас помочь мне внести исправления в мой скрипт и довести его до ума (это мой первый скрипт (делал программой inno setup compiler 5.5.8(а)), поэтому прошу строго не судить), он рабочий только на ХР, проверял на 8 и 10 не работает инсталлятор, он запускается, загружается Splash, затем должна включиться музыка, но она не включается, выводится это сообщение http://prnt.sc/afvdjr, на скриншоте в окне установки в самом низу после первой кнопки должны появится: вторая кнопка (отключения звука) и за ней третьей - регулятор громкости, но их нет, к сожалению моего микроума не хватает, чтобы довести до ума инсталлятор, поэтому еще раз прошу Вашей помощи, заранее благодарен, скрипт прилагаю (к сожалению он не вмещается здесь на форуме):

dimantv_wot@vk 16-03-2016 19:48 2616792

Как Указать в скрипте путь для установке шрифтов в папку Windows

Dodakaedr 16-03-2016 22:24 2616836

Цитата:

Цитата dimantv_wot@vk
Как Указать в скрипте путь для установке шрифтов в папку Windows »

константа {fonts}

Цитата:

Цитата dimantv_wot@vk
Как в компонентах сделать что бы при выборе компонента ставилась галочка или кружок не нажимания на них а нажимая на текст »

используйте расширенную версию inno setup

Ferling, попробуйте тоже расширенную версию inno setup

Ferling 16-03-2016 22:43 2616843

Dodakaedr, спасибо огромное, буду пробовать!

vovann01 17-03-2016 11:42 2616975

Здравствуйте!)
Господа, у меня к вам просьба. Возможно я криворукий или слепой, а может быть что и просто не умею пользоваться поиском, но требуемую информацию найти не смог. Что смог, это всё не то что мне нужно. А нужно мне следующее:

В общем, что бы при установке, мне надо что бы установщик сохранял в архив определённые папки и файлы. Лучше всего что бы это делалось строенным архиватором.
И потом только начиналась установка.

Я не хочу от вас "готовый код", мне бы просто сам способ узнать, пример какой-нить а дальше я как-нить будь сам)
Спасибо

Ferling 17-03-2016 19:24 2617168

Установил я Inno Setup Compiler 5.5.1.ee2 (a) (build 121216), правда при установке ispack-5.5.1.exe не докачались файлы во время установки, на сколько я понял их там уже нету и все ссылки устарели (качал с этого форума расширенную версию и все поставил как было написано), скажу одно кака была - кака есть, на ХР запускается, на 8 и 10 нет, запускается сплэш, музыка не включается и выбивает сообщение о невозможности установки, может кто-то поможет все таки исправить ошибку?

Dodakaedr 17-03-2016 21:42 2617233

Ferling, Давайте свой скрипт с файлами, посмотрим что можно сделать.

Цитата:

Цитата vovann01
Я не хочу от вас "готовый код", мне бы просто сам способ узнать, пример какой-нить а дальше я как-нить будь сам) »

Когда-то давал пример, пробуйте Ссылка на пример

Ferling 17-03-2016 22:18 2617245

Dodakaedr, вроде все собрал вместе https://yadi.sk/d/rfyd6SpsqGwSy, заранее благодарен!

guceds 19-03-2016 11:35 2617686

Добрый день. Подскажите пожалуйста код, которым можно отправить пост запрос по ссылке. Просто пост запрос, без всяких открывающихся окон и т.д. и т.п.

Dodakaedr 19-03-2016 19:57 2617814

Ferling, поправил что смог, там скорее всего еще проблема с isdone, но с ней не помогу.... с isdone не работал.
Скачать

Ferling 19-03-2016 20:22 2617815

Dodakaedr, Огр. спасибо! сейчас скачаю и посмотрю

AlekseyPopovv 20-03-2016 06:46 2617897

Как создать свой MsgBox со своими параметрами?

Dodakaedr 20-03-2016 12:17 2617942

Цитата:

Цитата AlekseyPopovv
Как создать свой MsgBox со своими параметрами? »

Вот с этого примера можно сделать себе свой msgbox http://forum.oszone.net/post-2577495-1081.html

AlekseyPopovv 20-03-2016 13:00 2617956

Dodakaedr, Может не правильно выразился, мне надо поменять цвет окна во всех MsgBox...

Dodakaedr 20-03-2016 13:20 2617962

Цитата:

Цитата AlekseyPopovv
Может не правильно выразился, мне надо поменять цвет окна во всех MsgBox... »

так задайте его, если по тому примеру то так FinishedForm.Color := clLime;

AlekseyPopovv 21-03-2016 05:26 2618137

Dodakaedr, А как в стандартных MsgBox поменять цвет?

solopavel 21-03-2016 18:40 2618336

Прошу помощи. В этой проге я дуб дубом, а в smart install maker у меня не получается это сделать. Накидайте пожалуйста образец скрипта для такой схемы:

При установке, нужно удалить из "программы" две папки с файлами полностью "aircraft_1" и "aircraft1_2", а также два файла "traffic_1.bgl" и "traffic_2.bgl". Создать папку с файлами "aircraft_3" и файл "traffic_3.bgl"

Я это вот, как дилетант, так себе это представляю:
Скрытый текст

[InstallDelete]
Type: files; Name: "traffic_1.bgl"{app}\"
Type: files; Name: "traffic_2.bgl"{app}\"
Type: files; Name: "aircraft_1l"{app}\"
Type: files; Name: "aircraft_2l"{app}\"
[Files]
Source: “traffic_3.bgl”; DestDir: “{app}”
Source: “aircraft_3”; DestDir: “{app}”

Заранее благодарен за ответ.

El Sanchez 21-03-2016 19:56 2618365

Цитата:

Цитата AlekseyPopovv
А как в стандартных MsgBox поменять цвет? »

AlekseyPopovv, например, так:
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}\test
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
 
WH_CBT = 5;
  HCBT_CREATEWND = 3;
  WC_DIALOG = '#32770';
  WM_INITDIALOG = $0110;
  WM_ERASEBKGND = $0014;
  WM_PAINT = $000F;
  WM_CTLCOLORSTATIC = $0138;
  WM_CTLCOLORBTN = $0135;
  WM_DESTROY = $0002;
  TRANSPARENT = 1;

type
 
PAINTSTRUCT = record
   
hdc: THandle;
    fErase: BOOL;
    rcPaint: TRect;
    fRestore: BOOL;
    fIncUpdate: BOOL;
    rgbReserved: array [0..31] of Byte;
  end;

function GetCurrentThreadId: DWORD; external 'GetCurrentThreadId@kernel32.dll stdcall';
function CallNextHookEx(hhk: THandle; nCode: Integer; wParam, lParam: Longint): Longint; external 'CallNextHookEx@user32.dll stdcall';
function SetWindowsHookEx(idHook: Integer; lpfn, hMod: Longint; dwThreadId: DWORD): THandle; external 'SetWindowsHookEx{#A}@user32.dll stdcall';
function UnhookWindowsHookEx(hhk: THandle): BOOL; external 'UnhookWindowsHookEx@user32.dll stdcall';
function SetWindowSubclass(hWnd: HWND; pfnSubclass: Longint; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; external 'SetWindowSubclass@comctl32.dll stdcall';
function RemoveWindowSubclass(hWnd: HWND; pfnSubclass: Longint; uIdSubclass: UINT_PTR): BOOL; external 'RemoveWindowSubclass@comctl32.dll stdcall';
function DefSubclassProc(hWnd: HWND; uMsg: UINT; wParam, lParam: Longint): Longint; external 'DefSubclassProc@comctl32.dll stdcall';
function GetClassName(hWnd: HWND; lpClassName: string; nMaxCount: Integer): Integer; external 'GetClassName{#A}@user32.dll stdcall';
function GetSysColorBrush(nIndex: Integer): THandle; external 'GetSysColorBrush@user32.dll stdcall';
function SetBkMode(hdc: THandle; iBkMode: Integer): Integer; external 'SetBkMode@gdi32.dll stdcall';
function BeginPaint(hWnd: HWND; var lpPaint: PAINTSTRUCT): Longint; external 'BeginPaint@user32.dll stdcall';
function EndPaint(hWnd: HWND; const lpPaint: PAINTSTRUCT): Boolean; external 'EndPaint@user32.dll stdcall';
function FillRect(hDC: THandle; const lprc: TRect; hbr: THandle): Integer; external 'FillRect@user32.dll stdcall';
function GetUpdateRect(hWnd: HWND; var lpRect: TRect; bErase: BOOL): BOOL; external 'GetUpdateRect@user32.dll stdcall';

var
 
GCBTProc, GDlgProc: Longint; 
  GDlgHook, GBgndBrush: THandle;
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function DlgProc(hWnd: HWND; uMsg: UINT; wParam, lParam: Longint; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): Longint;
var
 
ps: PAINTSTRUCT;
  rc: TRect;
begin
  case
uMsg of 
   
WM_INITDIALOG:
      begin
        if
GBgndBrush = 0 then
         
GBgndBrush := GetSysColorBrush(13{COLOR_HIGHLIGHT для примера});
        Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);       
      end;
    WM_ERASEBKGND:
      begin
       
GetUpdateRect(hWnd, rc, False);
        FillRect(wParam, rc, GBgndBrush);
        Result := 1;
      end;
    WM_PAINT:
      begin
       
BeginPaint(hWnd, ps);
        FillRect(ps.hdc, ps.rcPaint, GBgndBrush);
        EndPaint(hWnd, ps);
      end;
    WM_CTLCOLORBTN, WM_CTLCOLORSTATIC:
      begin
       
SetBkMode(wParam, TRANSPARENT);
        Result := GBgndBrush;
      end;
    WM_DESTROY:
      begin
       
RemoveWindowSubclass(hWnd, GDlgProc, 0);
        Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
      end;
  else
   
Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
  end;
end

///////////////////////////////////////////////////////////////////
function CBTProc(nCode: Integer; wParam, lParam: Longint): Longint;
var
 
ClassName: string
begin
  case
nCode of 
   
HCBT_CREATEWND:
      begin     
       
ClassName := StringOfChar(#0, 64);
        GetClassName(wParam, ClassName, Length(ClassName));
        ClassName := TrimRight(ClassName);       
        case ClassName of
         
WC_DIALOG:
            begin
              if
GDlgProc = 0 then
               
GDlgProc := CallbackAddr('DlgProc');
              SetWindowSubclass(wParam, GDlgProc, 0, 0);
            end;
        end;
        Result := 0;
      end;     
  else 
   
Result := CallNextHookEx(GDlgHook, nCode, wParam, lParam); 
  end;
end;

//////////////////
procedure HookDlg;
begin
  if
GCBTProc = 0 then
   
GCBTProc := CallbackAddr('CBTProc');
  GDlgHook := SetWindowsHookEx(WH_CBT, GCBTProc, 0, GetCurrentThreadId);
end;

////////////////////
procedure UnHookDlg;
begin
 
UnhookWindowsHookEx(GDlgHook);
end;

///////////////////////////
procedure InitializeWizard;
begin
 
HookDlg; 
end;

////////////////////////////
procedure DeinitializeSetup;
begin
  if
ExpandConstant('{wizardhwnd}') = '0' then Exit;
  UnHookDlg;
end;

//////////////////////////////////////
function InitializeUninstall: Boolean;
begin
 
Result := True;
  HookDlg;
end;

////////////////////////////////
procedure DeinitializeUninstall;
begin
 
UnHookDlg;
end;


ZVSRus 21-03-2016 19:57 2618366

Цитата:

Цитата solopavel
При установке, нужно удалить из "программы" две папки с файлами полностью "aircraft_1" и "aircraft1_2"

Как-то так.
Скрытый текст

Код:

[Files]
Source: "{app}\traffic_3.bgl"; DestDir: "{app}";
 Source: "{app}\aircraft_3\*"; DestDir: "{app}\aircraft_3";

[InstallDelete]
Type: files; Name: "{app}\traffic_1.bgl";
 Type: files; Name: "{app}\traffic_2.bgl";
 Type: filesandordirs; Name: "{app}\aircraft_1l";
 Type: filesandordirs; Name: "{app}\aircraft_2l";


Dodakaedr 21-03-2016 20:30 2618381

Цитата:

Цитата El Sanchez
например, так: »

есть где-то список номером цветов? Или как указать требуемый цвет? Как вы узнали чему равна цифра 13?

El Sanchez 21-03-2016 21:18 2618401

Цитата:

Цитата Dodakaedr
есть где-то список номером цветов? Или как указать требуемый цвет? Как вы узнали чему равна цифра 13? »

Dodakaedr, дык, это ж параметр функции GetSysColorBrush, там в описании параметра к ней ссылка на GetSysColor, где представлены константы системных цветов. Я не стал в примере константу писать, влепил комментарий, чтобы обратили внимание на этот кусок кода. Вместо кисти с системным цветом здесь можно создать и использовать свою сплошную кисть с любым цветом при помощи CreateSolidBrush или узорчатую при помощи CreatePatternBrush. Разумеется, при использовании пользовательских кистей обработка сообщений WM_* будет немного другой.

Dodakaedr 21-03-2016 21:27 2618409

Цитата:

Цитата El Sanchez
Вместо кисти с системным цветом здесь можно создать и использовать свою сплошную кисть с любым цветом при помощи CreateSolidBrush »

Если есть время набросайте, пожалуйста, пример.

solopavel 21-03-2016 21:31 2618413

ZVSRus, спасибо за оперативный ответ.
Сейчас попробую.

AlekseyPopovv 22-03-2016 06:20 2618485

Dodakaedr, Мне долго экспериментировать не пришлось, цифра 15 подошла.

El Sanchez 22-03-2016 09:17 2618518

Цитата:

Цитата Dodakaedr
Если есть время набросайте, пожалуйста, пример. »

CreateSolidBrush

Код:

function CreateSolidBrush(crColor: DWORD): THandle; external 'CreateSolidBrush@gdi32.dll stdcall';
function DeleteObject(hObject: Longint): BOOL; external 'DeleteObject@gdi32.dll stdcall';
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function DlgProc(hWnd: HWND; uMsg: UINT; wParam, lParam: Longint; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): Longint;
var
 
ps: PAINTSTRUCT;
  rc: TRect;
begin
  case
uMsg of 
   
WM_INITDIALOG:
      begin
       
GBgndBrush := CreateSolidBrush(clFuchsia{или в формате $BBGGRR});       
        Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);       
      end;
    WM_ERASEBKGND:
      begin     
       
GetUpdateRect(hWnd, rc, False);
        FillRect(wParam, rc, GBgndBrush);
        Result := 1;
      end;
    WM_PAINT:
      begin
       
BeginPaint(hWnd, ps);
        FillRect(ps.hdc, ps.rcPaint, GBgndBrush);
        EndPaint(hWnd, ps);
      end;
    WM_CTLCOLORBTN, WM_CTLCOLORSTATIC:
      begin     
       
SetBkMode(wParam, TRANSPARENT);
        Result := GBgndBrush;
      end;
    WM_DESTROY:
      begin
       
DeleteObject(GBgndBrush);
        RemoveWindowSubclass(hWnd, GDlgProc, 0);
        Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
      end;
  else
   
Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
  end;
end;


CreatePatternBrush

Код:

function CreatePatternBrush(hbmp: HBITMAP): THandle; external 'CreatePatternBrush@gdi32.dll stdcall';
function DeleteObject(hObject: Longint): BOOL; external 'DeleteObject@gdi32.dll stdcall';
function WindowFromDC(hDC: THandle): HWND; external 'WindowFromDC@user32.dll stdcall';
function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints: TPoint; cPoints: UINT): Integer; external 'MapWindowPoints@user32.dll stdcall';
function SetBrushOrgEx(hdc: Longint; nXOrg, nYOrg: Integer; var lppt: TPoint): BOOL; external 'SetBrushOrgEx@gdi32.dll stdcall';

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function DlgProc(hWnd: HWND; uMsg: UINT; wParam, lParam: Longint; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): Longint;
var
 
ps: PAINTSTRUCT;
  rc: TRect;
  pt: TPoint; 
  H: HWND;
begin
  case
uMsg of 
   
WM_INITDIALOG:
      begin
       
GBgndBrush := CreatePatternBrush(WizardForm.WizardSmallBitmapImage.Bitmap.Handle);       
        Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);       
      end;
    WM_ERASEBKGND:
      begin     
       
H := WindowFromDC(wParam);
        if H <> 0 then
        begin       
         
MapWindowPoints(H, hWnd, pt, 1);
          SetBrushOrgEx(wParam, -pt.x, -pt.y, pt);         
        end;
        GetUpdateRect(hWnd, rc, False);
        FillRect(wParam, rc, GBgndBrush);
        Result := 1;
      end;
    WM_PAINT:
      begin
       
BeginPaint(hWnd, ps);
        FillRect(ps.hdc, ps.rcPaint, GBgndBrush);
        EndPaint(hWnd, ps);
      end;
    WM_CTLCOLORBTN, WM_CTLCOLORSTATIC:
      begin     
       
H := WindowFromDC(wParam);
        if H <> 0 then
        begin       
         
MapWindowPoints(H, hWnd, pt, 1);
          SetBrushOrgEx(wParam, -pt.x, -pt.y, pt);         
        end;
        SetBkMode(wParam, TRANSPARENT);
        Result := GBgndBrush;
      end;
    WM_DESTROY:
      begin
       
DeleteObject(GBgndBrush);
        RemoveWindowSubclass(hWnd, GDlgProc, 0);
        Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
      end;
  else
   
Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
  end;
end;


vovann01 22-03-2016 16:51 2618727

Цитата:

Цитата Dodakaedr
Я не хочу от вас "готовый код", мне бы просто сам способ узнать, пример какой-нить а дальше я как-нить будь сам) »
Когда-то давал пример, пробуйте Ссылка на пример »

То что вы мне скинули, это не то.

Мне нужно, что бы установщик СНАЧАЛА сохранял в архив файлы, которые уже лежат на компе, а только потом производилась установка. В случае, если установка произошла не удачно, то можно было бы эти все файлы во становить из архива. Я сам так и не смог найти нормальный пример этого

ZVSRus 24-03-2016 13:55 2619326

Цитата:

Цитата vovann01
Мне нужно, что бы установщик СНАЧАЛА сохранял в архив файлы, которые уже лежат на компе, а только потом производилась установка

Другими словами, перед установкой нужно сделать Backup файлов которые лежат на компе.
В справке как сделать Backup (Создать резервную копию оригинальных файлов) я насчитал около 10 примеров.
Где искать смотри на картинке.

Naomi 26-03-2016 08:42 2619877

Помогите пожалуйста реализовать прилипание мастер формы к краям экрана отрисованной через ботву. Установлена расширенная юникод версия инно 5.5.1. Заранее благодарна :)

El Sanchez 27-03-2016 11:39 2620272

Цитата:

Цитата Naomi
реализовать прилипание мастер формы к краям экрана »

Naomi, пример:
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
 
SPI_GETWORKAREA = $0030;
  WM_WINDOWPOSCHANGING = $0046;
 
type
 
TWindowPos = record
   
hwnd: HWND;
    hwndInsertAfter: HWND;
    x: Integer;
    y: Integer;
    cx: Integer;
    cy: Integer;
    flags: UINT;
  end;

function SetWindowSubclass(hWnd: HWND; pfnSubclass: Longint; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; external 'SetWindowSubclass@comctl32.dll stdcall';
function RemoveWindowSubclass(hWnd: HWND; pfnSubclass: Longint; uIdSubclass: UINT_PTR): BOOL; external 'RemoveWindowSubclass@comctl32.dll stdcall';
function DefSubclassProc(hWnd: HWND; uMsg: UINT; wParam, lParam: Longint): Longint; external 'DefSubclassProc@comctl32.dll stdcall';
function SystemParametersInfo(uiAction, uiParam: UINT; var pvParam: TRect; fWinIni: UINT): BOOL; external 'SystemParametersInfo{#A}@user32.dll stdcall';
function ReadProcessMemory(hProcess: THandle; lpBaseAddress: Longint; out lpBuffer: TWindowPos; nSize: DWORD; out lpNumberOfBytesRead: DWORD): BOOL; external 'ReadProcessMemory@kernel32.dll stdcall';
function WriteProcessMemory(hProcess: THandle; lpBaseAddress: Longint; var lpBuffer: TWindowPos; nSize: DWORD; out lpNumberOfBytesWritten: DWORD): BOOL; external 'WriteProcessMemory@kernel32.dll stdcall';
function GetCurrentProcess: THandle; external 'GetCurrentProcess@kernel32.dll stdcall';

var
 
GWndProc: Longint;
  GSnapBuffer: Integer;

///////////////////////////////////////////////////////////////////////////
procedure HandleEdge(var Edge: Integer; SnapToEdge, SnapDistance: Integer);
begin
  if
(Abs(Edge + SnapDistance - SnapToEdge) < GSnapBuffer) then
   
Edge := SnapToEdge - SnapDistance;
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function WndProc(hWnd: HWND; uMsg: UINT; wParam, lParam: Longint; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): Longint;
var
 
LRect: TRect;
  WindowPos: TWindowPos;
  NumberOfBytesRead, NumberOfBytesWritten: DWORD;
begin
  case
uMsg of
   
WM_WINDOWPOSCHANGING:
      begin
       
SystemParametersInfo(SPI_GETWORKAREA, 0, LRect, 0);
        ReadProcessMemory(GetCurrentProcess, lParam, WindowPos, SizeOf(WindowPos), NumberOfBytesRead);
        HandleEdge(WindowPos.x, LRect.Left, 0);
        HandleEdge(WindowPos.y, LRect.Top, 0);
        HandleEdge(WindowPos.x, LRect.Right, WizardForm.Width);
        HandleEdge(WindowPos.y, LRect.Bottom, WizardForm.Height);
        WriteProcessMemory(GetCurrentProcess, lParam, WindowPos, SizeOf(WindowPos), NumberOfBytesWritten);
        Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
      end;
  else
   
Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
  end;
end;

///////////////////////////
procedure InitializeWizard;
begin
 
GSnapBuffer := 50;
  if GWndProc = 0 then
   
GWndProc := CallbackAddr('WndProc');
  SetWindowSubclass(WizardForm.Handle, GWndProc, 0, 0);
end;

////////////////////////////
procedure DeinitializeSetup;
begin
  if
ExpandConstant('{wizardhwnd}') = '0' then Exit;
  RemoveWindowSubclass(WizardForm.Handle, GWndProc, 0);
end;


vovann01 28-03-2016 17:07 2620691

Цитата:

Цитата ZVSRus
Другими словами, перед установкой нужно сделать Backup файлов которые лежат на компе.
В справке как сделать Backup (Создать резервную копию оригинальных файлов) я насчитал около 10 примеров.
Где искать смотри на картинке. »

именно так). Буду благодарен хотя бы за ссылки на 5 примеров) и у меня нет такой инструкции в программе.

ZVSRus 28-03-2016 21:01 2620749

Цитата:

Цитата vovann01
Буду благодарен хотя бы за ссылки на 5 примеров

Скрытый текст

[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg
OutputDir=.

[code]
var
MyTask: TCheckBox;

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if
CurStep=ssInstall then begin
if
MyTask.Checked then begin
MyFiles:=['TS3.exe','gameplay.package','*.precomp','*.jpg']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками
MyDir:=ExpandConstant('{app}'+'\Game\Bin\'); //папка откуда бакупить
BackDir:=ExpandConstant('{app}'+'\Backup\'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if
FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not
DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure InitializeWizard();
begin
MyTask:=TCheckBox.Create(WizardForm);
with MyTask do
begin
Parent:=WizardForm.SelectDirPage;
Caption:='Сделать Бэкап';
Left:=ScaleX(0);
Top:=ScaleY(100);
Width:=ScaleX(400);
Height:=ScaleY(15);
TabOrder:=0;
Checked:=True;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if
CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{app}'+'\Game\Bin\'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{app}'+'\Backup\'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if
MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if
FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;



Скрытый текст

Цитата:

;Как создать резервную копию во время установки, и кнопку перед установкой "Создать резервную копию оригинальных файлов" с галочкой?

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
Compression=lzma
SolidCompression=yes
Uninstallable=no

[Tasks]
Name: arc; Description: "Create backup"

[Files]
Source: Files\*.*; DestDir: {app}; BeforeInstall: CreateBackup

[code]
var
Page: TInputDirWizardPage;
ArcDir: String;

procedure CreateBackup();
var
SrcFile, DestFile: string;
begin
if
IsTaskSelected('arc') then
begin
// if Not DirExists(ArcDir) then CreateDir(ArcDir);
ForceDirectories(ArcDir); // исправлено
SrcFile:= AddBackslash(ExpandConstant('{app}')) + ExtractFileName(CurrentFileName);
DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
If
(CurPageID = Page.ID) then
ArcDir := Page.Values[0];
Result:= True;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
If
(PageID = Page.ID) and
(Not IsTaskSelected('arc')) then
Result:= True
else Result:= False;
end;

procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Select Backup Location',
'Where should backup files be stored?',
'To continue, click Next.' + #10#13#10#13 +
'If you would like to select a different folder, click Browse.',
False, 'Backup');
Page.Add('');
//Page.Values[0] := ExpandConstant('{sd}\Backup');
Page.Values[0] := AddBackslash(ExpandConstant('{sd}\Backup')) +
GetDateTimeString('yyyy/mm/dd hh:nn', '_', '.' ); // исправлено
end;



Скрытый текст

Пример скрипта, автоматически создающего бэкапы в папки с именем по дате/времени. Кол-во бэкапов задается в скрипте. При превышении кол-ва, самые старые будут удалены.
Цитата:

#define MaxBackup 3

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
Compression=lzma
SolidCompression=yes
Uninstallable=no

[Files]
Source: Files\*.*; DestDir: {app}; BeforeInstall: CreateBackup

[code]
var
ArcDir: String;
DirNames: TStringList;

procedure CreateBackup();
var
SrcFile, DestFile: string;
begin
ArcDir:= AddBackslash(ExpandConstant('{app}\Backup')) +
GetDateTimeString('yyyy/mm/dd hh:nn', '_', '.' );
ForceDirectories(ArcDir);
SrcFile:= AddBackslash(ExpandConstant('{app}')) + ExtractFileName(CurrentFileName);
DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);
end;

procedure GetBackupCount();
var
FindRec: TFindRec;
begin
if
FindFirst(ExpandConstant('{app}\Backup\*'), FindRec) then begin
try
DirNames:= TStringList.Create();
DirNames.Sorted:= True;
repeat
if
(FindRec.Attributes = FILE_ATTRIBUTE_DIRECTORY) and
(FindRec.Name <> '.') and (FindRec.Name <> '..') then
begin
DirNames.Append(FindRec.Name);
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
i: integer;
begin
if
CurStep = ssInstall then
begin
GetBackupCount();
if DirNames.Count >= StrToInt(ExpandConstant('{#MaxBackup}')) then
begin
for
i:= DirNames.Count - StrToInt(ExpandConstant('{#MaxBackup}')) downto 0 do
begin
DelTree(ExpandConstant('{app}\Backup\') + DirNames[i], True, True, True);
end;
end;
end;
end;


Nightwishh 28-03-2016 21:37 2620759

Вопрос по поводу модуля get_hw_caps.dll. Можно ли увеличить объём определяемой видео памяти (в модуле) таким образом
Код:

VidRam:=GetVidMemLocal/1000000;
  if (VidRam<63) or (VidRam>1100) then vr:=VidRam
  else if VidRam<100 then vr:=64
  else if VidRam<200 then vr:=128
  else if VidRam<300 then vr:=256
  else if VidRam<400 then vr:=384
  else if VidRam<600 then vr:=512
  else if VidRam<800 then vr:=792
  else if VidRam>800 then vr:=1024

  else if VidRam<1500 then vr:=1280
  else if VidRam<2100 then vr:=2048
  else if VidRam<2600 then vr:=2550
  else if VidRam<3100 then vr:=3072;

И нужно ли ли что то ещё дописывать?

AlexanderSergeev 29-03-2016 14:07 2620910

Помогите решить проблему. Как сделать взаимоисключающий выбор для кнопок из 8 состояний (аналог CheckBox из botva) Если пользователь активирует мышкой кнопку-3, то кнопки-1 или 2 (в зависимости от того, что было выбрано ранее) автоматически меняют свое состояние, т.е. становятся не активными. Всегда должно быть активно не более одной кнопки.

ispolin 29-03-2016 14:30 2620918

Подскажите пожалуйста что нужно дописать в скрипте, чтобы заполнились пустые поля?
на данный момент в скрипте есть строки
[Setup]
AppName=Soft Pack
AppVersion=2016
AppVerName=Soft Pack
VersionInfoVersion=2016
VersionInfoCompany=ispolin
VersionInfoCopyright=ispolin
AppCopyright=ispolin


AlexanderSergeev 29-03-2016 16:02 2620955

Цитата:

Цитата ispolin
Подскажите пожалуйста что нужно дописать в скрипте, чтобы заполнились пустые поля? »

ispolin, вот попробуйте так должно работать:
Код:

#define MyAppName "Название продукта"
#define MyAppVersion "Версия продукта"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName=D:\{#MyAppName}
DefaultGroupName={#MyAppName}


ZVSRus 29-03-2016 16:22 2620973

Цитата:

Цитата ispolin
Подскажите пожалуйста что нужно дописать в скрипте, чтобы заполнились пустые поля?

из Справки

Код:

VersionInfoProductVersion=  Значение из 4 чисел, разделенных точками. Задает двоичное значение версии файла инсталлятора.
 VersionInfoProductName=  AppName, если AppName не содержит констант (иначе будет пустая строка). Определяет значение названия продукта

Пример

Код:

VersionInfoVersion=4.7.6.1
 VersionInfoProductVersion=4.7.6.1
 VersionInfoCompany=ObviousIdea
 VersionInfoDescription=RePack (& Portable) by ZVSRus
 VersionInfoProductName=Light Image Resizer
 VersionInfoCopyright=Copyright © 2011-2015 ObviousIdea SARL


vovann01 30-03-2016 12:28 2621241

Цитата:

Цитата ZVSRus
Мне нужно, что бы установщик СНАЧАЛА сохранял в архив файлы, которые уже лежат на компе, а только потом производилась установка
Другими словами, перед установкой нужно сделать Backup файлов которые лежат на компе.
В справке как сделать Backup (Создать резервную копию оригинальных файлов) я насчитал около 10 примеров.
Где искать смотри на картинке. »

и

Цитата:

Цитата ZVSRus
Буду благодарен хотя бы за ссылки на 5 примеров
Скрытый текст
Скрытый текст
Скрытый текст »

не один из скрипов не работает... не знаю почему так, вся надежда на вас господа

Прилагаю пример своего "генерального кода", указал только 1 файлик, ну а для примера больше и не надо)

Скрытый текст
; Script generated by the Inno Script Studio Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Los"
#define MyAppExeName "Daemon.exe"
#define MyAppVersion "1.0"
#define los "C:\Users\v.pon\Desktop\ARXIV"
;#define Svc "..\los\Svc\"
;#define BackupDir "..\Backup";


[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
;(To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{4B52DA29-1987-41EB-A7E8-87572C794301}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={#MyAppName}
DefaultGroupName={#MyAppName}
UninstallFilesDir= "C:\Users\v.pon\Desktop\backup"
;DefaultDirName={pf}\My Program
;OutputDir=C:\Users\v.pon\Desktop\backup //куда будет запихиватся установщик

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
;Name: "arch"; Description: "1.7z\2.7z";
Name: "Svc"; Description: " Установить Svc "; Flags: checkablealone exclusive
Name: "Coll"; Description: "Установить Los "; Flags: checkablealone exclusive

[Run]
;Source: "C:\Users\v.pon\Desktop\ARXIV\2.bat"; Flags:

[Files]

Source: "{#Los}\*.xml"; DestDir: "{app}\Los\"; Flags: onlyifdoesntexist ;Components: Coll


[Icons]
;Name: "{group}\My Program"; Filename: "{app}\Svc"; Components: Svc ;
;Name: "{group}\los"; Filename: "{app}\Installer"; Components: Coll;
;Name: "{group}\los"; Filename: "{app}\"; Components: Coll;

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Filename: "msiexec"; Parameters: "/i {tmp}\mysql-connector-net-6.9.6.msi /qb /norestart REBOOT=ReallySuppress"; WorkingDir: "{tmp}"; Description: "MySql Connector"; StatusMsg: "MySql Connector"

[Dirs]
Name: "C:\Users\v.pon\Desktop\backup"

[code]
var
MyTask: TCheckBox;

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if CurStep=ssInstall then begin
if MyTask.Checked then begin
MyFiles:=['*']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками
MyDir:=ExpandConstant('C:\Users\v.pon\Desktop\los'); //папка откуда бакупить
BackDir:=ExpandConstant('C:\Users\v.pon\Desktop\Los\backup'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure InitializeWizard();
begin
MyTask:=TCheckBox.Create(WizardForm);
with MyTask do
begin
Parent:=WizardForm.SelectDirPage;
Caption:='Сделать Бэкап';
Left:=ScaleX(0);
Top:=ScaleY(100);
Width:=ScaleX(400);
Height:=ScaleY(15);
TabOrder:=0;
Checked:=True;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{app}'+'C:\Users\v.pon\Desktop\backup222'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{app}'+'C:\Users\v.pon\Desktop\backup'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;

ZVSRus 30-03-2016 15:49 2621349

Цитата:

Цитата vovann01
не один из скрипов не работает... не знаю почему так

Пример из Справки (Один из 3 примеров выложенным ранее, чуть-чуть подправил).
Работает нормально, и бекапит и возвращает сбекапенные файлы на место при удалении новых файлов.
Для примера взялась папка с картинками

В вашем примере в секции Setup в директиве DefaultDirName= нет пути куда устанавливать, есть только имя программы.
Директива должна выглядеть так DefaultDirName={pf}{#MyAppName} или пропиши вручную так C:\Users\v.pon\Desktop\los

Скрытый текст

Цитата:

[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg
OutputDir=.

[Files]
Source: "D:\Files\*"; DestDir: "{app}"; Flags: ignoreversion

[code]
var
MyTask: TCheckBox;

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if
CurStep=ssInstall then begin
if
MyTask.Checked then begin
MyFiles:=['001.png','002.png','003.png','004.png']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками

MyDir:=ExpandConstant('{pf}'+'\MyProg\'); //папка откуда бакупить
BackDir:=ExpandConstant('{pf}'+'\MyProg\Backup\'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if
FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not
DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure InitializeWizard();
begin
MyTask:=TCheckBox.Create(WizardForm);
with MyTask do
begin
Parent:=WizardForm.SelectDirPage;
Caption:='Сделать Бэкап';
Left:=ScaleX(0);
Top:=ScaleY(120);
Width:=ScaleX(400);
Height:=ScaleY(15);
TabOrder:=0;
Checked:=True;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if
CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{pf}'+'\MyProg\'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{pf}'+'\MyProg\Backup\'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if
MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if
FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;


vovann01 30-03-2016 15:59 2621354

А, забыл сказать) Надо что бы это всё не просто бакупилось, а ещё и запихивалось в архив, да.
При том, что бы в имени архива была дата, и архивировалось это встроеным архиватором. (в идеале)

ZVSRus 30-03-2016 16:25 2621365

Цитата:

Цитата vovann01
А, забыл сказать) Надо что бы это всё не просто бакупилось, а ещё и запихивалось в архив, да.
При том, что бы в имени архива была дата, и архивировалось это встроеным архиватором. (в идеале)

Если Вы хотите сказать что в Inno Setup есть встроенный архиватор, тогда скажите где он находится и как на него посмотреть.

vovann01 30-03-2016 16:31 2621367

Если бы я хорошо знал Inno Setup, яб не сидел тут. Тогда предогаю юзать 7za, я даже скрипт написал на архивацию, не знаю, как сильно он поможет, и можно ли его воткнуть в установщик, но:

Содержание моего батника:

Скрытый текст
"C:\Users\v.pon\Desktop\ARXIV\7za.exe" a %date%.rar c:\Los\

Dodakaedr 30-03-2016 16:32 2621370

vovann01, Я вам уже давал пример, юзайте его!

vovann01 30-03-2016 16:35 2621373

Цитата:

Цитата Dodakaedr
юзайте его! »

да не работает он нормально. Я не знаю почему. Мож я тупой, или хз

Вот ваш код, но как его адаптировать под себя то ?

Скрытый текст
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Components]
Name: "arch"; Description: "1.7z\2.7z";

[Files]
Source: "7za.exe"; Flags: dontcopy deleteafterinstall
Source: "1.7z"; DestDir: "{app}\Icons"; AfterInstall: "Extract()"; Components: arch;
Source: "2.7z"; DestDir: "{app}"; AfterInstall: "Extract()"; Components: arch;

[code]
procedure Extract();
var
rs: integer;
strFile: String;
begin
strFile := ExpandConstant(CurrentFileName);
if not FileExists(ExpandConstant('{tmp}\7za.exe')) then ExtractTemporaryFile('7za.exe');
Exec(ExpandConstant('{tmp}\7za.exe'), ' x '+'"'+strFile+'" -y -o'+'"'+ExtractFilePath(strFile)+'"', '', SW_Hide, ewWaitUntilTerminated, rs);
DeleteFile(strFile);
end;


буду очень рад если мне помогут

Скрытый текст
[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg
OutputDir=.

[Files]
Source: "D:\Files\*"; DestDir: "{app}"; Flags: ignoreversion

[code]
var
MyTask: TCheckBox;

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if CurStep=ssInstall then begin
if MyTask.Checked then begin
MyFiles:=['001.png','002.png','003.png','004.png']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками

MyDir:=ExpandConstant('{pf}'+'\MyProg\'); //папка откуда бакупить
BackDir:=ExpandConstant('{pf}'+'\MyProg\Backup\'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure InitializeWizard();
begin
MyTask:=TCheckBox.Create(WizardForm);
with MyTask do
begin
Parent:=WizardForm.SelectDirPage;
Caption:='Сделать Бэкап';
Left:=ScaleX(0);
Top:=ScaleY(120);
Width:=ScaleX(400);
Height:=ScaleY(15);
TabOrder:=0;
Checked:=True;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{pf}'+'\MyProg\'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{pf}'+'\MyProg\Backup\'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;

ZVSRus 30-03-2016 18:21 2621414

Цитата:

Цитата Dodakaedr
vovann01, Я вам уже давал пример, юзайте его!

Несколькими страницами ранее видел ваш пример, но тогда глубоко в смысл не задавался.
Сейчас просто стало интересно на счет данного примера. Скачал с приложенными файлами, попробовал.
И как я понимаю данный пример на распаковку 7z архива. В Справке есть еще несколько примеров на счет 7z, все они также на распаковку. В своё время прошёлся по всем страницам данного форума начиная с 1 части, но что-то не припоминаю примера на запаковку в архив (rar, zip, 7z) каких либо файлов перед установкой (например обновление). В вашем примере, как я понимаю 7za.exe запустится после всех установленных файлов, что будут указаны в секции [Files], или я ошибаюсь.
Если я прав тогда, сделать Бэкап и ещё его за архивировать это пустая трата времени.
Рассудите прав ли я.

ZVSRus 30-03-2016 18:39 2621420

Цитата:

Цитата vovann01
Содержание моего батника:

"C:\Users\v.pon\Desktop\ARXIV\7za.exe" a %date%.rar c:\Los\ - Вы куда это хотите воткнуть.

Dodakaedr 31-03-2016 09:45 2621572

Цитата:

Цитата ZVSRus
но что-то не припоминаю примера на запаковку в архив »

Цитата:

Цитата vovann01
Мне нужно, сделать бекап до установки, запихнув несколько папок в архив. »

Вызывайте Backup сколько нужно.
Пример

Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: "7za.exe"; DestDir: "{app}\7z"; Flags: onlyifdoesntexist uninsneveruninstall
Source: "compiler:Languages\*"; DestDir: "{app}\Lang2";
Source: "compiler:Help\*"; DestDir: "{app}\Help2";

[Code]
procedure Restore(strFile, DestDir: String);
var
rs: integer;
begin
  if Fileexists(ExpandConstant('{app}\7z\7za.exe')) then
  begin
  Exec(ExpandConstant('{app}\7z\7za.exe'), ' x '+'"'+strFile+'"'+' -y -o'+'"'+DestDir+'"', '', SW_Hide, ewWaitUntilTerminated, rs);
  DeleteFile(strFile);
  end;
end;

procedure Backup(bkfile, fromDir: String);
var
i: integer;
begin
  if not FileExists(ExpandConstant('{tmp}\7za.exe')) then ExtractTemporaryFile('7za.exe');
  Exec(ExpandConstant('{tmp}\7za.exe'), ' a ' +'"' +bkfile +'.7z' +'"' +' -r ' +'"' +fromDir +'"', '', SW_Hide, ewWaitUntilTerminated, i);
  DeleteFile(ExpandConstant('{tmp}\7za.exe'));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  if DirExists(ExpandConstant('{app}')) then
    begin
      WizardForm.StatusLabel.Caption := 'Архивация данных, пожалуйста, подождите...';
      Backup(ExpandConstant('{app}\Backup\Bak'), ExpandConstant('{app}\Help2'));
      Backup(ExpandConstant('{app}\Backup\Bak'), ExpandConstant('{app}\Lang2'));
    end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usDone then
  if FileExists(ExpandConstant('{app}\Backup\Bak.7z')) then
  begin
  Restore(ExpandConstant('{app}\Backup\Bak.7z'), ExpandConstant('{app}'));
  RemoveDir(ExpandConstant('{app}\Backup'));
  DelTree(ExpandConstant('{app}\7z'), true, true, true);
  end;
end;


vovann01 31-03-2016 09:46 2621573

Вы правы и не правы одновременно. Дело в том, что я слегка дилетант, и многих "очевидных " вещей не знаю.

Мне нужно, сделать бекап до установки, запихнув несколько папок в архив.

ZVSRus 31-03-2016 10:21 2621597

Dodakaedr, Пример реальный, значит я был не прав. Где-то, что-то пропустил. Ранее глубоко не вдавался в данные действия.

ZVSRus 03-04-2016 16:05 2622655

Как объединить несколько процедур CurStepChanged(CurStep: TSetupStep); в одну, если в процедуре имеется
Цитата:

if CurStep = ssInstall then

Цитата:

case CurStep of ssPostInstall: PinToTaskbar( ExpandConstant( '{app}\MyProg.exe' ), True );

Цитата:

if CurStep = ssDone then


nik1967 03-04-2016 16:26 2622658

ZVSRus,
элементарно
Код:


procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssPreInstall: begin
      //твои действия
    end;
    ssInstall: begin
      //твои действия
    end;
    ssPostInstall: begin
      //твои действия
    end;
    ssDone: begin
      //твои действия
    end;
  end;
end;


ZVSRus 03-04-2016 16:48 2622661

Цитата:

Цитата nik1967
элементарно

Ответили оперативно. Не успел написать что уже разобрался. Просто я пихал сначала ssDone
потом ssInstall, а надо по порядку TSetupStep = (ssPreInstall, ssInstall, ssPostInstall, ssDone);.
Все равно спасибо!

ZVSRus 05-04-2016 11:33 2623232

Как к скрипту ''Закрепить ярлык на панели задач'' прикрутить чекбокс находящийся на костомной странице.
То-есть чтобы ярлык закреплялся только при выборе чекбокса на вновь созданной странице.
Скрипт

Цитата:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{C50EFAA0-C80A-431E-8698-784F527C6AC4}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
// Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "Дополнительные значки"; Flags: unchecked
// Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked;
// Name: "pin"; Description: "Закрепить ярлык на панели задач"; GroupDescription: "Дополнительные значки"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup v.5.5.1\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\{#MyAppName}"; Filename: "{app}\MyProg.exe"; Check: PinIconCheck;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010F204000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010 D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D6550616765084E65787450616765070D4 36F6D706F6E656E74506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F 110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6 963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6 F7465626F6F6B506167650B4C6963656E7365506167650C50726576696F757350616765070D436F6D706F6E656E745061676 50D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6 F6B506167650D53656C656374446972506167650D4578706C69636974576964746803A1010E4578706C69636974486569676 87403ED000000F110544E65774E6F7465626F6F6B506167651653656C65637450726F6772616D47726F7570506167650D457 8706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506 167650F53656C6563745461736B7350616765084E65787450616765070C44697247726F7570506167650D4578706C6963697 4576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650952656 16479506167650C50726576696F757350616765070C44697247726F7570506167650D4578706C69636974576964746803A10 10E4578706C6963697448656967687403ED00000010544E65774E6F7465626F6F6B506167650D436F6D706F6E656E7450616 7650743617074696F6E1426000000D092D18BD0B1D0BED18020D182D0B8D0BFD0B020D183D181D182D0B0D0BDD0BED0B2D0B AD0B80B4465736372697074696F6E06032E2E2E0C50726576696F757350616765070B57656C636F6D6550616765084E65787 450616765070B4C6963656E736550616765000C544E6577436865636B426F780350696E044C656674020003546F70025A055 76964746803C3000648656967687402110743617074696F6E143A000000D097D0B0D0BAD180D0B5D0BFD0B8D182D18C20D18 FD180D0BBD18BD0BA20D0BDD0B020D0BFD0B0D0BDD0B5D0BBD0B820D0B7D0B0D0BBD0B0D187085461624F726465720200000 00010544E65774E6F7465626F6F6B506167650C44697247726F7570506167650743617074696F6E144B000000D092D18BD0B 1D0BED18020D0BFD0B0D0BFD0BAD0B820D183D181D182D0B0D0BDD0BED0B2D0BAD0B820D0B820D0BFD0B0D0BFD0BAD0B820D 0B220D0BCD0B5D0BDD18E20D09FD183D181D0BA0B4465736372697074696F6E06032E2E2E0C50726576696F7573506167650 70F53656C6563745461736B7350616765084E657874506167650709526561647950616765000000000000

[code]
var
ComponentPage: TWizardPage;
PinIcon: TNewCheckBox;

function PinIconCheck: Boolean;
begin
Result:=PinIcon.Checked;
end;

const
LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;

var
hInst: THandle;
buf: array [0..255] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;

begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

{ String resources }
if IsPin then
begin
if
SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
begin
while
buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
res := 5386; { Pin to Tas&kbar } { Закрепить на Taskbar }
end else
res := 5387; { Unpin from Tas&kbar } { Открепить от Taskbar }

{ Load string resource }
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for
i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
case
CurPageID of
wpFinished: begin
if
IsTaskSelected('Pin') then PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case
CurUninstallStep of
usUninstall: begin
PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
end;
end;
end;


procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', '...');
WizardForm.SelectTasksLabel.Hide;

{ Pin }
PinIcon := TNewCheckBox.Create(WizardForm);
with PinIcon do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(90);
Width := ScaleX(195);
Height := ScaleY(17);
Caption := 'Закрепить ярлык на панели задач';
end;
end;




Dodakaedr 05-04-2016 12:49 2623258

Цитата:

Цитата ZVSRus
Как к скрипту ''Закрепить ярлык на панели задач'' прикрутить чекбокс находящийся на костомной странице. »

Вот так
Скрытый текст
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{C50EFAA0-C80A-431E-8698-784F527C6AC4}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "compiler:\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\{#MyAppName}"; Filename: "{app}\MyProg.exe"; Check: PinIconCheck;

[code]
var
ComponentPage: TWizardPage;
PinIcon: TNewCheckBox;

function PinIconCheck: Boolean;
begin
Result:=PinIcon.Checked;
end;

const
LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;

var
hInst: THandle;
buf: array [0..255] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;

begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

{ String resources }
if IsPin then
begin
if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
res := 5386; { Pin to Tas&kbar } { Закрепить на Taskbar }
end else
res := 5387; { Unpin from Tas&kbar } { Открепить от Taskbar }

{ Load string resource }
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
case CurPageID of
wpFinished: begin
if PinIconCheck then PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case CurUninstallStep of
usUninstall: begin
PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
end;
end;
end;


procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', '...');
WizardForm.SelectTasksLabel.Hide;

{ Pin }
PinIcon := TNewCheckBox.Create(WizardForm);
with PinIcon do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(90);
Width := ScaleX(195);
Height := ScaleY(17);
Caption := 'Закрепить ярлык на панели задач';
end;
end;


AlexanderSergeev 05-04-2016 13:26 2623282

ZVSRus, посмотрел ваш сегодняшний скрипт и не понял, что за hex описание в секции для [ISFormDesigner]


З.Ы. Ребята извините за нубство, может знаете, как реализовать такой финт в инно? :blush:

ZVSRus 05-04-2016 15:16 2623320

Цитата:

Цитата AlexanderSergeev
что за hex описание в секции для [ISFormDesigner]

У Вас какая версия Inno Setup

Цитата:

Цитата Dodakaedr
Вот так

Экспериментировал пол дня, всего одно слово нужно было переименовать. Хотя PinIconCheck'ом переименовывал разное, но переименовать IsTaskSelected('Pin')
не допер. Моя не внимательность меня достала. Гляжу в книгу вижу фигу.

AlexanderSergeev 05-04-2016 15:29 2623324

ZVSRus, расширенный юникод компилятор 5.5.1 от китайских собратьев

ZVSRus 05-04-2016 16:06 2623345

Цитата:

Цитата AlexanderSergeev
расширенный юникод компилятор 5.5.1 от китайских собратьев

Зайди в Редактор Форм, создай новую страницу (например следом за WelcomePage). создай на ней компоненты (разные).
Автоматически создастся (не знаю как правильно называется) идентификатор страницы и компонентов [ISFormDesigner].

AlexanderSergeev 05-04-2016 16:21 2623349

ZVSRus, теперь понял спасибо :ok:

ZVSRus 05-04-2016 20:42 2623439

Вопрос к Dodakaedr,у. Что нужно изменить в данной процедуре если финишная страница отключена.

Цитата:

procedure CurPageChanged(CurPageID: integer);
begin
case
CurPageID of
wpFinished: begin
if
PanelZadachCheck then PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
end;
end;
end;

А используется FinishedForm

Цитата:

function ShowFinishedForm(): Boolean;
var
FinishedForm: TSetupForm;
begin
FinishedForm := CreateCustomForm;
FinishedForm.Position:=poScreenCenter;
try
FinishedForm.ClientWidth := ScaleX(310);
FinishedForm.ClientHeight := ScaleY(133);
FinishedForm.BorderStyle := bsSingle;
FinishedForm.BorderIcons := [biSystemMenu];


Dodakaedr 05-04-2016 21:11 2623447

Цитата:

Цитата ZVSRus
Что нужно изменить в данной процедуре если финишная страница отключена. »

Используйте не постраничный этап, а этапы установки, то есть:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssPostInstall:
      begin
        if PanelZadachCheck then PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
      end;
  end;
end;


Batistas 06-04-2016 03:37 2623510

Всем привет! Решил организовать сжатие сборки CS:S через связку Precomp + Srep + Arc.

Батник автоматизации
arc a -ep1 -ed -r -w.\ Setup.bin -mprecomp:t-
nfj:zl11,18,34,39,44,55,68,75,82,83,84,85,97,98:d10+srep+exe+delta+lzma:a1:mfbt4:d256m:fb128:mc1000: lc8 "D:\test1\Modules\*"


Но во время установки происходит следующее:



Версия ISDone 0.6 final.

Подскажет кто-нибудь решение проблемы?

AlexanderSergeev 06-04-2016 08:22 2623531

Цитата:

Цитата Batistas
Подскажет кто-нибудь решение проблемы? »

Как вариант, проверьте в скрипте раскомментированы ли секции #define PrecompInside (0.38-0.42 зависит от версии) и #define SrepInside
В темпе обязательно должны находиться: последний ISDone.dll, unarc.dll, соответствующие CLS фильтры, модифицированный precomp.exe, подменная packjpg_dll.dll и zlib1.dll
Да, еще такой момент, если пакуете данные Arc.exe/FreeArc, которые подписаны FA_protect, то и распаковывать нужно патченным экземпляром unarc.dll

ispolin 08-04-2016 10:00 2624258

Помогите. Видимо куда то ткнул и получил

было



стало



версия Inno 5.5.8
версия ISTools 5.3.0.1

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

ZVSRus 08-04-2016 10:46 2624272

Цитата:

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

Из Справки
[Setup]
DisableStartupPrompt=yes


Игнорируется, когда UseSetupLdr=no

ispolin 08-04-2016 10:58 2624277

ZVSRus, не помогает
всё равно выходит второе(неполноценное окно установки)

Код:

[Setup]
AppName=Soft Pack
AppVersion=2016
AppVerName=Soft Pack
OutputBaseFilename=Soft Pack
Compression=lzma
ArchitecturesInstallIn64BitMode=x64 ia64
WizardImageFile={tmp}\WizardImage.bmp
WizardSmallImageFile={tmp}\WizardSmallImage.bmp
VersionInfoVersion=2016
VersionInfoCompany=ispolin
VersionInfoCopyright=ispolin
VersionInfoProductVersion=2.0.1.6
VersionInfoDescription=Soft Pack
VersionInfoProductName=Soft Pack
AppCopyright=ispolin
LicenseFile={tmp}\license.txt
DisableStartupPrompt=no
CreateAppDir=false


ZVSRus 08-04-2016 11:45 2624310

Цитата:

Цитата ispolin
не помогает

[Setup]
AppName=Soft Pack
AppVersion=2016
AppVerName=Soft Pack
OutputBaseFilename=Soft Pack
Compression=lzma
ArchitecturesInstallIn64BitMode=x64 ia64
WizardImageFile={tmp}\WizardImage.bmp
WizardSmallImageFile={tmp}\WizardSmallImage.bmp
VersionInfoVersion=2016
VersionInfoCompany=ispolin
VersionInfoCopyright=ispolin
VersionInfoProductVersion=2.0.1.6
VersionInfoDescription=Soft Pack
VersionInfoProductName=Soft Pack
AppCopyright=ispolin
LicenseFile={tmp}\license.txt
DisableStartupPrompt=no У Вас стоит no нужно yes
CreateAppDir=false

ispolin 08-04-2016 12:01 2624319

Цитата:

Цитата ZVSRus
У Вас стоит no нужно yes »

тогда вообще пропадает окно и сразу выходит лицензионное соглашение

Цитата:

DisableStartupPrompt
в переводе вроде звучит как "отключить страницу приветствия"
соответственно нужно ставить no

ZVSRus 08-04-2016 12:14 2624332

Цитата:

Цитата ispolin
тогда вообще пропадает окно и сразу выходит лицензионное соглашение

По первым картинкам я понял, что нужно отключить всплывающее окно перед Финишной страницей. Или что-то я не понял?

Из Справки:

[Setup]: DisableStartupPrompt
Возможные значения:
yes или no
Значение по умолчанию:
yes

Описание:
При значении yes, инсталлятор не будет отображать сообщение "Эта программа установит… на ваш компьютер… Продолжить?" ("This will install... Do you wish to continue?").

Игнорируется, когда UseSetupLdr=no.

ispolin 08-04-2016 12:19 2624339

Цитата:

Цитата ZVSRus
Или что-то я не понял? »

не поняли
была старая версия инно, после компиляции и запуска уже собранной программы выходило нормальное окно приветствия что на первом скрине, обновил версию инно и теперь окно приветствия стало как на втором скрине, хочу вернуть окно от первого скрина

ZVSRus 08-04-2016 12:41 2624354

Цитата:

Цитата ispolin
Помогите. Видимо куда то ткнул и получил

Первый скрин - Это страница приветствия WelcomePage
Второй скрин - Это не страница приветствия, это всплывающее окно перед страницей приветствия.
В последних версиях Inno 5.5.8, 5.5.9 по моему страница приветствия по умолчанию отключена, об этом на форуме уже писали.
Тогда в секцию [Setup] вставь DisableWelcomePage=no

из справки:

[Setup]: DisableWelcomePage
Возможные значения:
yes или no
Значение по умолчанию:
no

Описание:
При значении yes инсталлятор не покажет страницу приветствия.

ispolin 08-04-2016 12:45 2624357

Цитата:

Цитата ZVSRus
DisableWelcomePage=no »

Цитата:

Цитата ZVSRus
страница приветствия по умолчанию отключена »

Помогло! Снимаю шляпу и благодарю.

Batistas 10-04-2016 00:02 2624772

Всем добрый вечер! Имеется скрипт установки CS:S с прикрученным ISDone. До прикручивания ISDone работала автоустановка directx, visual studio и net.fraemwork. После включения ISDone автоустановка не работает. Может кто подсказать, как это исправить? Заранее спасибо!

doctor_allcome 13-04-2016 14:10 2625740

Добрый день! Прошу помощи профессионалов! Имеется тестовый скрипт. При отработке CancelButtonClickFinishedPage срабатывает закрытие процесса, но в Винде, в папке TEMP временные файлы не удаляются. Не могу понять, как заставить программу чистить TEMP по завершению?

Скрытый текст

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[code]
procedure ExitProcess(uExitCode: UINT);
external 'ExitProcess@kernel32.dll stdcall';

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result := True;
// if the fake Finish button was clicked...
if CurPage = wpFinished then
MsgBox('И вот тут Можно запустить программу!', mbInformation, MB_OK);
end;

procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
// display the "Exit Setup ?" message box and if the user selects "Yes",
// then exit the process; it is currently the only way how to exit setup
// process manually
if ExitSetupMsgBox then
ExitProcess(0);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
WizardForm.NextButton.Caption := 'Run';
WizardForm.CancelButton.Caption := SetupMessage(msgButtonFinish);
WizardForm.CancelButton.Visible := True;
// bind your own OnClick event for the Cancel button; the original one
// is already disconnected at this stage
WizardForm.CancelButton.OnClick := @CancelButtonClickFinishedPage;
end;
end;

sergey3695 13-04-2016 21:27 2625853

doctor_allcome,
Код:

procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
// display the "Exit Setup ?" message box and if the user selects "Yes",
// then exit the process; it is currently the only way how to exit setup
// process manually
if ExitSetupMsgBox then
begin
  DelTree(ExpandConstant('{tmp}'),true,true,true);
  ExitProcess(0);
end;
end;

но правильнее так
Скрытый текст
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[_code]
function NextButtonClick(CurPage: Integer): Boolean;
begin
  Result := False;
// display the "Exit Setup ?" message box and if the user selects "Yes",
// then exit the process; it is currently the only way how to exit setup
// process manually
if CurPage = wpFinished then
begin
if ExitSetupMsgBox then
  Result := True
end else
  Result := True;
end;

procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
// if the fake Finish button was clicked...
  MsgBox('И вот тут Можно запустить программу!', mbInformation, MB_OK);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
  WizardForm.CancelButton.Caption := 'Run';
  WizardForm.CancelButton.Visible := True;
// bind your own OnClick event for the Cancel button; the original one
// is already disconnected at this stage
  WizardForm.CancelButton.OnClick := @CancelButtonClickFinishedPage;
end;
end;


doctor_allcome 14-04-2016 01:34 2625899

sergey3695, спасибо за ответ!
DelTree(ExpandConstant('{tmp}'),true,true,true); пробовал вставлять, почему-то удаляется только часть файлов из папки TEMP, а вот библиотеки (dll) и сама папка is-xxxx остаются.
Из второго примера, я так понял, вы предложили кнопки поменять местами. NextButtonClick отрабатывает корректный выход, а в CancelButtonClickFinishedPage уже можно запускать программу (через ShellExec). После компиляции в FinishPage только одна кнопка Finish, а кнопка 'RUN' не отображается, хотя должно быть WizardForm.CancelButton.Caption := 'Run';

dapa 14-04-2016 02:29 2625907

Здравствуйте,подскажите пожалуйста, возможно ли изменить размер окна StartupPrompt, а также появляющегося перед
удалением, в котором написано "Вы действительно хотите удалить xxxxxxx и все компоненты программы?"

sergey3695 14-04-2016 08:14 2625933

doctor_allcome, а когда вставляли [_code] стерли?
Цитата dapa:
окна StartupPrompt »
а что это за окно?

doctor_allcome 14-04-2016 09:40 2625966

sergey3695, Спасибо большое. Вот я "Валера"! Все работает отлично.

dapa 14-04-2016 15:05 2626085

Цитата:

Цитата sergey3695
а что это за окно? »

Не корректно я наверное спросил... это то, что появляется перед запуском инсталла, когда в [Setup] DisableStartupPrompt=no

sergey3695 14-04-2016 16:02 2626107

dapa, нет нельзя. это стандартные сообщения.

doctor_allcome 15-04-2016 23:25 2626679

Уважаемый sergey3695, позвольте еще один вопрос? Если в процедуре CancelButtonClickFinishedPage вместо MsgBox вставить ShellExec то программа в ShellExec выполнится, но окно инстяллятора остается открытым. Как закрыть окно инсталлятора, после запуска файла?

Скрытый текст

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[_code]
function NextButtonClick(CurPage: Integer): Boolean;
begin
Result := False;
// display the "Exit Setup ?" message box and if the user selects "Yes",
// then exit the process; it is currently the only way how to exit setup
// process manually
if CurPage = wpFinished then
begin
if ExitSetupMsgBox then
Result := True
end else
Result := True;
end;

procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
// if the fake Finish button was clicked...
MsgBox('И вот тут Можно запустить программу!', mbInformation, MB_OK);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
WizardForm.CancelButton.Caption := 'Run';
WizardForm.CancelButton.Visible := True;
// bind your own OnClick event for the Cancel button; the original one
// is already disconnected at this stage
WizardForm.CancelButton.OnClick := @CancelButtonClickFinishedPage;
end;
end;

dapa 16-04-2016 00:34 2626698

Цитата:

Цитата sergey3695
dapa, нет нельзя. это стандартные сообщения. »

Понятно, благодарю за ответ.

sergey3695 16-04-2016 12:06 2626782

doctor_allcome,
Скрытый текст
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[code]
/////===== Начало - ExecAndWait =====\\\\\
var
lastproc: cardinal;

const
NORMAL_PRIORITY_CLASS = $00000020;
REALTIME_PRIORITY_CLASS = $00000100;

type
_TStartupInfo = record
cb: DWORD;
lpReserved, lpDesktop: Longint;
lpTitle: PAnsiChar;
dwX, dwY, dwXSize, dwYSize, dwXCountChars, dwYCountChars, dwFillAttribute, dwFlags: DWORD;
wShowWindow, cbReserved2: Word;
lpReserved2: Byte;
hStdInput, hStdOutput, hStdError: Longint;
end;
_TProcessInformation = record
hProcess, hThread: Longint;
dwProcessId, dwThreadId: DWORD;
end;
_TMsg = record
hWnd: HWND;
msg, wParam: Word;
lParam: LongWord;
Time: TFileTime;
pt: TPoint;
end;

function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
procedure GetStartupInfo(var lpStartupInfo: _TStartupInfo); external 'GetStartupInfoA@kernel32.dll stdcall';
function CreateProcess(lpApplicationName: PAnsiChar; lpCommandLine: PAnsiChar; lpProcessAttributes, lpThreadAttributes: DWORD; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: PAnsiChar; lpCurrentDirectory: PAnsiChar; const lpStartupInfo: _TStartupInfo; var lpProcessInformation: _TProcessInformation): BOOL; external 'CreateProcessA@kernel32.dll stdcall';
function WaitForSingleObject(hHandle: Longint; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
function TerminateProcess(hProcess: Longint; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall';
function PeekMessage(var lpMsg: _TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: _TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: _TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

procedure Application_ProcessMessages;
var
Msg: _TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, 1) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

function ExecAndWait(filename, params: pansichar; showcmd: integer; Wait: boolean; Priority: Smallint): Boolean;
var
SI : _TStartupInfo;
PI : _TProcessInformation;
CMD: string;
prt: DWORD;
begin
Result:=false;
CMD:='"' + filename + '" ' + params;
GetStartupInfo(SI);
SI.wShowWindow := showcmd;
SI.dwFlags := 1;
if Priority = 0 then prt:= NORMAL_PRIORITY_CLASS else
prt:= REALTIME_PRIORITY_CLASS;
Result:=CreateProcess('', PansiChar(CMD), 0, 0, false, prt,'', pansichar(ExtractFilePath(filename)), SI, PI);
lastproc:=PI.dwProcessId;
if wait then
while WaitforSingleObject(PI.hProcess, 50) = $00000102 do
Application_ProcessMessages;
CloseHandle(PI.hProcess);
end;
/////===== Конец - ExecAndWait =====\\\\\

var
OldEvent_NextButtonClick: TNotifyEvent;

procedure NextButtonClick2(Sender: TObject);
begin
ExecAndWait(ExpandConstant('{sys}\calc.exe'), '', SW_SHOW, false, 0);
OldEvent_NextButtonClick(Sender);
end;

procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
if ExitSetupMsgBox then
OldEvent_NextButtonClick(Sender);
end;

procedure InitializeWizard;
begin
OldEvent_NextButtonClick := WizardForm.NextButton.OnClick;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
WizardForm.CancelButton.Caption := SetupMessage(msgButtonFinish);
WizardForm.CancelButton.Visible := True;
WizardForm.CancelButton.OnClick := @CancelButtonClickFinishedPage;
//
WizardForm.NextButton.Caption := 'Run';
WizardForm.NextButton.OnClick := @NextButtonClick2;
end;
end;

doctor_allcome 16-04-2016 21:00 2626949

sergey3695, еще раз Спасибо! Все работает. Сам бы я до такого вряд ли дошел.

habib2302 19-04-2016 11:52 2627743

Доброе время суток. Можно ли как-то организовать определение занятых процессом файлов перед установкой и перед деинсталяцией программы и потом завершить процесс?

sergey3695 20-04-2016 21:36 2628139

Цитата:

Цитата habib2302
завершить процесс »

если это будет делаться принудительно, то не думаю что будет хорошо для пользователя. а что за файлы?

Serjione 22-04-2016 10:49 2628564

Добрый день. В резделе RЕGISTRY, при компиляции, жалуется на символы { }. Можно это исправить ?

Nordek 22-04-2016 11:07 2628569

Цитата:

Цитата Serjione
при компиляции, жалуется на символы { }. Можно это исправить ? »

Вторую фигурную скобку добавьте, пример:
Код:

Root: HKLM; SubKey: SOFTWARE\test\{{12345}

Serjione 22-04-2016 12:17 2628589

Nordek, после второй скобки }, тоже надо еще одну скобку ставить ?

kotyarko@fb 22-04-2016 13:11 2628600

Цитата:

Цитата Serjione
после второй скобки }, тоже надо еще одну скобку ставить ? »

Нет, только после первой.

Serjione 22-04-2016 15:27 2628633

Благодарю за помошь.
Другой момент. Жалуется на ковычки в скобкаx

ValueData: "[open("%1")]"

Можно исправить это ?

Phorcis 22-04-2016 15:43 2628638

Имеется примерный код. Вывод описания компонента в лейбл. При выставлении компоненту флага fixed ему в описании прибавляется текст "Временно недоступно", который нигде не прописан. Как этот текст убрать? Во всем этом я профан, пытался прогуглить - не нашел

Код:

[Components]
Name: "name"; Description: "Фывфыв:"; Types: full; Flags: fixed

[Код]
Var
BoxForDescription: TListBox
DescriptionLabel : TLabel

Procedure Descriptions(Sender: TObject; Index: Integer; var DescriptionLabel: TLabel);
var
 Description: String;
begin
 case TNewCheckListBox(Sender).Tag of
  WizardForm.ComponentsList.Tag:
  case WizardForm.ComponentsList.ItemCaption[Index] of
    'Фывфыв:': Description := 'описание.';
    end; 
 end;
DescriptionLabel.Caption := Description;
end;

Procedure CreateObjects();

begin
 
BoxForDescription := TListBox.Create(WizardForm);
 with BoxForDescription do
 begin
  Parent := WizardForm;
  SetBounds(ScaleX(BoxForImage.Left), ScaleY(BoxForImage.Top + BoxForImage.Height + 2), ScaleX(BoxForImage.Width - 2), ScaleY(93));
  DescriptionLabel := TLabel.Create(BoxForDescription);
  with DescriptionLabel do
  begin
  Parent := BoxForDescription;
  SetBounds(ScaleX(3), ScaleY(1), ScaleX(BoxForDescription.Width - 7), ScaleY(BoxForDescription.Height - 2));
  AutoSize := False;
  WordWrap := True;
  Caption := 'Наведите на компонент в списке, чтобы увидеть его описание';
  Font.Color := clWhite;
  Font.Size := 9;
  end;
 end;


kotyarko@fb 22-04-2016 16:56 2628664

Цитата:

Цитата Serjione
Жалуется на ковычки в скобкаx
Можно исправить это ?»

Да, можно. Тут схожий принцип (и в справке он также описан).
Нужно просто продублировать каждую кавычку:
Код:

ValueData: "[open(""%1"")]"
Цитата:

Цитата Phorcis
Имеется примерный код. Вывод описания компонента в лейбл. При выставлении компоненту флага fixed ему в описании прибавляется текст "Временно недоступно", который нигде не прописан. Как этот текст убрать? »

Прописан, просто скрипт с ним лежит чуть глубже.
ListBox тут был совсем не в тему, поэтому в новых обновлениях вместо DescriptionLabel будет DescriptionMemo. А ListBox будет убран, как и надо было с самого начала делать =) Ну это я так, к слову.

doctor_allcome 28-04-2016 17:45 2630432

Добрый день! Уважаемые форумчане, кто нибудь может поделиться примером проверки MD5, для нескольких файлов?
По возможности для стандартного Inno, а не для модов (ResTools).

kotyarko@fb 28-04-2016 18:44 2630443

Цитата:

Цитата doctor_allcome
Уважаемые форумчане, кто нибудь может поделиться примером проверки MD5, для нескольких файлов?
По возможности для стандартного Inno, а не для модов (ResTools). »

Пример:
Код:

Procedure InitializeWizard();
var
 TFR: TFindRec;
 Filename, Msg: String;
begin
 if FindFirst(ExpandConstant('{src}\*'), TFR) then
 try
  repeat
  if (TFR.Name <> '.') and (TFR.Name <> '..') then
    if TFR.Attributes <> FILE_ATTRIBUTE_DIRECTORY then
    begin
    Filename := ExpandConstant('{src}\') + ExpandConstant(TFR.Name);
    Msg := Msg + Filename + '; MD5: ' + GetMD5OfFile(Filename) + #13#10;
    end;
  until not FindNext(TFR);
 finally
  MsgBox(Msg, mbInformation, MB_OK);
  FindClose(TFR);
 end;
end;


HomeBasic 05-05-2016 16:03 2632167

собрал setup, установил программу, после запуска setup заново, setup уже не спрашивает путь для установки...

какой параметр использовать, чтобы всегда setup спрашивал путь установки, независимо от того, стоИт ли эта версия программы или нет?

doctor_allcome 05-05-2016 17:19 2632199

Добрый день! Прошу помощи! Есть код, срабатывающий при деинсталляции. Удаляет папку приложения полностью. Необходимо что-бы одна папка (СОХРАНЕНИЯ) не удалялась. Если "СОХРАНЕНИЯ" находятся в Documents and Settings или еще где, то все срабатывает нормально. Но если "СОХРАНЕНИЯ" находятся в {app}\ , то удаляется все из {app}\ включая "СОХРАНЕНИЯ".

Скрытый текст
procedure CurUninstallStepChanged (CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usPostUninstall:
begin
DelTree(ExpandConstant('{app}'),true,true,true);

end;
end;

if CurUninstallStep=usPostUninstall then
begin
if DirExists(ExpandConstant('{app}'+'\СОХРАНЕНИЯ') then
if MsgBox('Вы хотите удалить сохранения?',mbconfirmation, mb_YesNo) = IDYES then
begin
if not DelTree(ExpandConstant('{app}')+'\СОХРАНЕНИЯ', True, True, True) then
MsgBox('Папка с сохранениями не удалена!' #13#13 'Папка не существует или используется другим приложением ...', mbError, MB_OK);
end;
end;
end;

ZVSRus 05-05-2016 19:38 2632234

Цитата:

Цитата HomeBasic
какой параметр использовать

Попробуйте так:

Цитата:

DirExistsWarning=yes


El Sanchez 05-05-2016 19:43 2632236

Цитата:

Цитата HomeBasic
какой параметр использовать, чтобы всегда setup спрашивал путь установки, независимо от того, стоИт ли эта версия программы или нет? »

HomeBasic,
Код:

DisableDirPage=no

Цитата:

Цитата doctor_allcome
Есть код, срабатывающий при деинсталляции. Удаляет папку приложения полностью. Необходимо что-бы одна папка (СОХРАНЕНИЯ) не удалялась. Если "СОХРАНЕНИЯ" находятся в Documents and Settings или еще где, то все срабатывает нормально. Но если "СОХРАНЕНИЯ" находятся в {app}\ , то удаляется все из {app}\ включая "СОХРАНЕНИЯ". »

doctor_allcome,
Код:

[Dirs]
Name: "{app}\СОХРАНЕНИЯ"; Flags: uninsneveruninstall


vint56 05-05-2016 20:18 2632251

Привет всем прошу помощи не отображаются иконки в ComboBox при Style := csDropDownList;
читать дальше »
; Автор примера sergey3695
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: Setup1.ico; DestDir: {tmp}; Flags: dontcopy; Attribs: hidden system;
Source: Setup2.ico; DestDir: {tmp}; Flags: dontcopy; Attribs: hidden system;

[code]
var
ComboBoxImage: TNewComboBox;
ImageList: TImageList;


procedure ComboBox1DrawItem(Control: TWinControl; index:Integer; Rect: TRect; State: TOwnerDrawState);
begin
ComboBoxImage.Canvas.FillRect(Rect);
ImageList.Draw(ComboBoxImage.Canvas,Rect.left,Rect.top,index);
ComboBoxImage.canvas.textout(Rect.left+ImageList.Width+2,Rect.top, ComboBoxImage.items[index]);
end;


function AddIconInList(ImageList: TImageList; FileName: String): Integer;
var
Icon: TIcon;
begin
Icon := TIcon.Create;
try
Icon.LoadFromFile(FileName);
Result := ImageList.AddIcon(Icon);
finally
Icon.Free;
end;
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('Setup1.ico');
ExtractTemporaryFile('Setup2.ico');

ImageList := TImageList.Create(nil);
AddIconInList(ImageList, ExpandConstant('{tmp}\Setup1.ico'));
AddIconInList(ImageList, ExpandConstant('{tmp}\Setup2.ico'));

ComboBoxImage := TNewComboBox.Create(WizardForm);
with ComboBoxImage do
begin
Parent := WizardForm;
Left := ScaleX(15);
Top := ScaleY(322);
Width := ScaleX(190);
Height := ScaleY(31);
// Style:= csOwnerDrawVariable;
Style := csDropDownList;
Font.Color := clWindowText;
Font.Height := -13;
Font.Name := 'Tahoma';
Font.Style := [];
ParentFont := False;
Text := 'Directx 9';
Items.Add('Directx 9');
Items.Add('Directx 11');
ItemIndex:=0;
OnDrawItem:= @ComboBox1DrawItem;
end;
end;

HomeBasic 06-05-2016 09:27 2632352

ZVSRus,
к сожалению, ваш параметр DirExistsWarning=yes для моего случая не подходит...

El Sanchez,
спасибо, ваш параметр DisableDirPage=no - то что надо, при повторном запуске setup, он просит указать директорию установки... отлично...

doctor_allcome 06-05-2016 10:41 2632374

El Sanchez,
Код:

[Dirs]
Name: "{app}\СОХРАНЕНИЯ"; Flags: uninsneveruninstall

Не срабатывает
Код:

begin
case CurUninstallStep of
usPostUninstall:
begin
DelTree(ExpandConstant('{app}'),true,true,true);
end;
end;

Удаляет все. А должно удаляться только при при выполнении условия
Код:

if MsgBox('Вы хотите удалить сохранения?',mbconfirmation, mb_YesNo) = IDYES then ....

El Sanchez 06-05-2016 11:46 2632395

Цитата:

Цитата doctor_allcome
Удаляет все. А должно удаляться только при при выполнении условия »

doctor_allcome,
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  case
CurUninstallStep of
   
usUninstall:
      if DirExists(ExpandConstant('{app}\СОХРАНЕНИЯ')) and     
     
(MsgBox('Вы хотите удалить сохранения?', mbConfirmation, MB_YESNO) = IDYES) then     
        if not
DelTree(ExpandConstant('{app}\СОХРАНЕНИЯ'), True, True, True) then
         
MsgBox('Папка с сохранениями не удалена!'#13#10'Папка используется другим приложением...', mbError, MB_OK);
  end
end;

Цитата:

Цитата vint56
не отображаются иконки в ComboBox при Style := csDropDownList; »

vint56, при данном стиле и не должны.

vint56 06-05-2016 13:27 2632436

El Sanchez, я хотел сделать вот так но не чего не вышло с ComboBox

El Sanchez 06-05-2016 16:21 2632484

Цитата:

Цитата vint56
но не чего не вышло с ComboBox »

vint56, либо субклассировать ComboBox и его ListBox и рисовать все, что душе угодно, в их оконных процедурах, либо использовать ComboBoxEx. Пример:
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
 
WM_USER = $0400;
  WC_COMBOBOXEX =  'ComboBoxEx32';
  WS_CHILD = $40000000;
  WS_VISIBLE = $10000000;
  WS_TABSTOP = $10000;
  CBS_DROPDOWNLIST = $0003;
  CBS_SORT = $0100; 
  ILC_COLOR24 = $0018;
  CBEIF_TEXT = $1;
  CBEIF_IMAGE = $2;
  CBEIF_SELECTEDIMAGE = $4; 
  CBEM_INSERTITEM = (WM_USER + {#ifndef UNICODE}1{#else}11{#endif});
  CBEM_SETIMAGELIST = (WM_USER + 2); 
  CB_SETCURSEL = $014E;

type
 
TComboBoxExItem = record
   
mask: UINT;
    iItem: INT_PTR;
    pszText: string;
    cchTextMax: Integer;
    iImage: Integer;
    iSelectedImage: Integer;
    iOverlay: Integer;
    iIndent: Integer;
    lParam: Longint; 
  end;

function CreateWindowEx(dwExStyle: DWORD; lpClassName, lpWindowName: string; dwStyle: DWORD; x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance, lpParam: Longint): HWND; external 'CreateWindowEx{#A}@user32.dll stdcall';
function DestroyWindow(hWnd: HWND): BOOL; external 'DestroyWindow@user32.dll stdcall';
function ImageList_Create(cx, cy: Integer; flags: UINT; cInitial, cGrow: Integer): THandle; external 'ImageList_Create@comctl32.dll stdcall';
function ImageList_Destroy(himl: HIMAGELIST): BOOL; external 'ImageList_Destroy@comctl32.dll stdcall';
function ImageList_ReplaceIcon(himl: HIMAGELIST; i: Integer; hIcon: HICON): Integer; external 'ImageList_ReplaceIcon@comctl32.dll stdcall';
function SendMessageCBEI(hWnd: HWND; Msg: UINT; wParam: Longint; var lParam: TComboBoxExItem): Longint; external 'SendMessage{#A}@user32.dll stdcall';

var
 
GImageList: HIMAGELIST;
  GComboBoxEx: HWND; 

//////////////////////////////////////////////////////////
procedure CreateComboBoxExItem(Text: string; Icon: HICON);
var
 
ImageIndex: Integer; 
  CBItem: TComboBoxExItem;
begin
 
ImageIndex := ImageList_ReplaceIcon(GImageList, -1, Icon);
  with CBItem do
  begin
   
mask := CBEIF_TEXT or CBEIF_IMAGE or CBEIF_SELECTEDIMAGE;
    iItem := -1;
    pszText := Text;
    iImage := ImageIndex;
    iSelectedImage := ImageIndex; 
  end
  SendMessageCBEI(GComboBoxEx, CBEM_INSERTITEM, 0, CBItem);
end;

///////////////////////////
procedure CreateComboBoxEx;
begin
 
{ create comboex }
 
GComboBoxEx := CreateWindowEx(0, WC_COMBOBOXEX, '', WS_VISIBLE or WS_CHILD or WS_TABSTOP or CBS_DROPDOWNLIST or CBS_SORT, 0, 0, 320, 320, WizardForm.Handle, 0, HInstance, 0);

  { create imagelist }
 
GImageList := ImageList_Create(32, 32, ILC_COLOR24{ use ILC_COLOR32 for 32-bit icons }, 0, 0); 

  { add items }
 
CreateComboBoxExItem('Test entry 1', Application.Icon.Handle); 
  CreateComboBoxExItem('Test entry 2', Application.Icon.Handle); 

  { assign imagelist }
 
SendMessage(GComboBoxEx, CBEM_SETIMAGELIST, 0, GImageList); 

  { set selected item } 
 
SendMessage(GComboBoxEx, CB_SETCURSEL, 0, 0);
end;

////////////////////////////
procedure DestroyComboBoxEx;
begin
  if
GImageList <> 0 then 
   
ImageList_Destroy(GImageList);
  if GComboBoxEx <> 0 then 
   
DestroyWindow(GComboBoxEx);   
end;

///////////////////////////
procedure InitializeWizard;
begin
 
WizardForm.OuterNotebook.Hide; 
  CreateComboBoxEx;
end;

////////////////////////////
procedure DeinitializeSetup;
begin
 
DestroyComboBoxEx;
end;


vint56 06-05-2016 16:27 2632489

El Sanchez, Большое тебе спасибо за пример

sergey3695 06-05-2016 19:00 2632533

El Sanchez, спасибо. немного дополнил пример.
Скрытый текст
Код:

[Setup]
AppName=Example
AppVerName=Example 1.0
DefaultDirName={pf}\Example
OutputDir=.

[Files]
Source: Setup1.ico; DestDir: {app}; Check: IsChecked(0);
Source: Setup2.ico; DestDir: {app}; Check: IsChecked(1);

[code ]
#define A = (Defined UNICODE) ? "W" : "A"
const
  WM_USER = $0400;
  WC_COMBOBOXEX =  'ComboBoxEx32';
  WS_CHILD = $40000000;
  WS_VISIBLE = $10000000;
  WS_TABSTOP = $10000;
  CBS_DROPDOWNLIST = $0003;
  CBS_SORT = $0100;
  ILC_COLOR24 = $0018;
  ILC_COLOR32 = $0020;
  CBEIF_TEXT = $1;
  CBEIF_IMAGE = $2;
  CBEIF_SELECTEDIMAGE = $4;
  CBEM_INSERTITEM = (WM_USER + {#ifndef UNICODE}1{#else}11{#endif});
  CBEM_SETIMAGELIST = (WM_USER + 2);
  CB_SETCURSEL = $014E;
  WM_COMMAND = $0111;
  CBN_SELCHANGE = 1;
  CB_GETCURSEL = $0147;
  CB_GETCOUNT = $0146;
  WM_GETTEXT = $D;
  WM_GETTEXTLENGTH = $E;
  CB_GETLBTEXT = $0148;
  CB_GETLBTEXTLEN = $0149;
  //
type
  TComboBoxExItem = record
    mask: UINT;
    iItem: INT_PTR;
    pszText: string;
    cchTextMax: Integer;
    iImage: Integer;
    iSelectedImage: Integer;
    iOverlay: Integer;
    iIndent: Integer;
    lParam: Longint;
  end;

function CreateWindowEx(dwExStyle: DWORD; lpClassName, lpWindowName: string; dwStyle: DWORD; x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance, lpParam: Longint): HWND; external 'CreateWindowEx{#A}@user32.dll stdcall';
function DestroyWindow(hWnd: HWND): BOOL; external 'DestroyWindow@user32.dll stdcall';
function DeleteObject(hObject: THandle): BOOL; external 'DeleteObject@gdi32.dll stdcall';
function ImageList_Create(cx, cy: Integer; flags: UINT; cInitial, cGrow: Integer): THandle; external 'ImageList_Create@comctl32.dll stdcall';
function ImageList_Destroy(ImageList: HImageList): Bool; external 'ImageList_Destroy@comctl32.dll stdcall';
function ImageList_ReplaceIcon(himl: HIMAGELIST; i: Integer; hIcon: HICON): Integer; external 'ImageList_ReplaceIcon@comctl32.dll stdcall';
function SendMessageCBEI(hWnd: HWND; Msg: UINT; wParam: Longint; var lParam: TComboBoxExItem): Longint; external 'SendMessage{#A}@user32.dll stdcall';

var
  GImageList: HIMAGELIST;
  GComboBoxEx: HWND;
  Icon1: TNewIcon;

function IsChecked(const Index: Integer): Boolean;
begin
  Result:= False;
if GComboBoxEx<>0 then
if SendMessage(GComboBoxEx, CB_GETCURSEL, 0, 0)=Index then
  Result:= True;
end;

//////////////////////////////////////////////////////////
procedure CreateComboBoxExItem(Text, FileName: string);
var
  ImageIndex: Integer;
  CBItem: TComboBoxExItem;
  Icon: TNewIcon;
begin
  Icon:= TNewIcon.Create;
  ExtractTemporaryFile(FileName);
  try
    Icon.LoadFromFile(ExpandConstant('{tmp}\'+FileName));
    ImageIndex := ImageList_ReplaceIcon(GImageList, -1, Icon.Handle);
  finally
    Icon.Free;
  end;
  with CBItem do
  begin
    mask := CBEIF_TEXT or CBEIF_IMAGE or CBEIF_SELECTEDIMAGE;
    iItem := -1;
    pszText := Text;
    iImage := ImageIndex;
    iSelectedImage := ImageIndex;
  end;
  SendMessageCBEI(GComboBoxEx, CBEM_INSERTITEM, 0, CBItem);
end;

///////////////////////////
type
  LPARAM = Integer;
  WPARAM = Integer;
  LRESULT = Integer;
  TFNWndProc = Integer;
var
  OldProc: Longint;

function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';

function HiWord(L: DWORD): Word;
begin
  Result := L shr 16;
end;

var
  Text: String;
  nIndex: Integer;

function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
  case Msg of WM_COMMAND:
begin
  if (lParam=GComboBoxEx) and (HIWORD(wParam) = CBN_SELCHANGE) then
    begin
      nIndex:= SendMessage(GComboBoxEx, CB_GETCURSEL, 0, 0);
      WizardForm.NextButton.Caption:= IntToStr(nIndex); // Выбранная строка
      WizardForm.CancelButton.Caption:= IntToStr(SendMessage(GComboBoxEx, CB_GETCOUNT, 0, 0)); // Количество строк
      //
      Text:= '';
      SetLength(Text,SendMessage(GComboBoxEx, CB_GETLBTEXTLEN, nIndex, 0));
      SendMessage(GComboBoxEx, CB_GETLBTEXT, nIndex, CastStringToInteger(Text));
    if WizardForm.Caption<>Text then
      WizardForm.Caption:= Text;
    end;
  end;
end;
  Result := CallWindowProc(OldProc, hWnd, Msg, wParam, lParam);
end;

///////////////////////////
procedure CreateComboBoxEx;
begin
  { create comboex }  // высота с учетом раскрытого списка
  GComboBoxEx := CreateWindowEx(0, WC_COMBOBOXEX, '', WS_VISIBLE or WS_CHILD or CBS_DROPDOWNLIST or CBS_SORT, ScaleX(20), ScaleX(340), ScaleX(210), ScaleY(320), WizardForm.Handle, 0, HInstance, 0);

  { create imagelist } // высота в итоге свернутого 32 (учитывается ImageList_Create)
  GImageList := ImageList_Create(32, 32, ILC_COLOR32{ use ILC_COLOR24 for 24-bit icons }, 0, 0);

  { add items }
  CreateComboBoxExItem('Test entry 1', 'Setup1.ico');
  CreateComboBoxExItem('Test entry 2', 'Setup2.ico');

  { assign imagelist }
  SendMessage(GComboBoxEx, CBEM_SETIMAGELIST, 0, GImageList);

  { set selected item }
  SendMessage(GComboBoxEx, CB_SETCURSEL, 0, 0);

  if GComboBoxEx <> 0 then
    OldProc:= SetWindowLong(WizardForm.Handle, -4, CallbackAddr('WindowProc'));
end;

////////////////////////////
procedure DestroyComboBoxEx;
begin
  if GImageList <> 0 then
    ImageList_Destroy(GImageList);
  if GComboBoxEx <> 0 then
    DestroyWindow(GComboBoxEx);
end;

///////////////////////////
procedure InitializeWizard;
begin
//  WizardForm.OuterNotebook.Hide;
  CreateComboBoxEx;
end;

////////////////////////////
procedure DeinitializeSetup();
begin
  SetWindowlong(WizardForm.Handle, -4, OldProc);
  DestroyComboBoxEx;
end;


dinis.grek 07-05-2016 15:16 2632745

Привет. Подскажите, как проверить установлен ли в системе Adobe Flash Player, и если не установлен то предлагаем скачать.


P.S

По поводу Adobe Flash Player поиск дал ответ хотя понятно мало что. Очень хотелось бы увидеть скрипт полностью, для изучения. AlekseyPopovv, вас ожидает корреспонденция, привет.

И если можно, поделитесь дельным примером использования ISCrypt.dll

Скрытый текст


Код:

[Setup]
AppName=Программа
AppVersion=3
AppPublisher=Программа
DefaultDirName={pf}\Программа
DefaultGroupName=Программа
ShowTasksTreeLines=yes
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
Encryption=Yes
Password=1234567

//// всем файлам, которые используются инсталлятором (библиотеки, фон) надо проставляем флаг noencryption
Source: {app}\МуПрог\*; DestDir: {app}\Программа; Flags: ignoreversion recursesubdirs createallsubdirs noencryption; Components: comp

[Code_]
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpPassword then Result:= True;
end;


Вот что удалось получить. Это все? Или при помощи ISCrypt.dll можно серьезно установить более менее серьезную защиту на сам установщик от распаковки используя шифрование.

habib2302 08-05-2016 11:04 2632928

sergey3695, dll файлы обычно которые заняты процессом explorer. Например aimp_menu64.dll

Sashabyren 09-05-2016 20:31 2633300

Как удалить папку с файлами где будет устанавливаться программа ?

Папка для установки\SOFT // Нужно удалить папку SOFT не зависимо какая папки установки выбрана

P.S
Желать чтобы она удалялась в конце установки

doctor_allcome 10-05-2016 13:22 2633495

Добрый день! Наверное неправильно выразился :) в вопросе.
Есть папка, в ней находятся подпапки, n-шт. При деинсталляции должны удаляться все подпапки кроме одной, а она должна удаляться (или нет) в зависимости от результата ответа на вопрос ...
Код:

if MsgBox('Вы хотите удалить сохранения?',mbconfirmation, mb_YesNo) = IDYES then ...
Если ответ ДА - удалять, НЕТ - оставить.

Serjione 10-05-2016 16:35 2633566

Подскажите пожалуйста, как правильно прописать binary.

Код:

Root: HKCU; Subkey: "SOFTWARE\test"; ValueType: binary; ValueName: "LM"; ValueData: "00,00,00,00,94,2f,1e,e7,e6"; Flags: uninsdeletekey
Value data is not a valid value.

TryRooM 10-05-2016 16:50 2633571

Serjione,
Наверное так.
Код:


Root: HKCU; SubKey: Software\Test\SETTINGS; ValueType: binary; ValueName: Size; ValueData: 70 05 00 00; Flags: uninsdeletekeyifempty


Serjione 10-05-2016 16:58 2633572

TryRooM, в действительности, binary строка длиннее той, что приведена в примере. С длинной бинарной строкой ваш вариант уже не катит.

TryRooM 10-05-2016 17:17 2633583

Serjione,
Если длинна, превышает, через код, как вариант.
Код:

[Files]
Source: "1.reg"; DestDir: {tmp};

[Run]
Filename: {win}\regedit.exe; Parameters: "/s ""{tmp}\1.reg"""; Flags: waituntilterminated;  или так

[code ]
var
ResultCode: Integer;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
//if Installer.Checked then // нужные вам условия
ExtractTemporaryFile('1.reg');
Exec(ExpandConstant('{win}\regedit.exe'), ExpandConstant('/S "{tmp}\1.reg"'), '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;


Serjione 10-05-2016 17:52 2633600

TryRooM

Unrecognized parameter name "procedure CurStepChanged(CurStep"

Ferkads 11-05-2016 00:19 2633720

Здравствуйте, подскажите пожалуйста, как открыть файл .dat или .bin? Хочу открыть файлы репака одной игры без его установки, подозреваю что там вирус.

doctor_allcome 11-05-2016 12:06 2633812

Ferkads
Если репак распаковывает архивы FreeArc, то можно установить FreArc на компьютер и файлы .dat или .bin перименовать в .arc, после этого с ними можно работать как с архивами. При условии того, что они без пароля.

Ferkads2 11-05-2016 12:19 2633814

doctor_allcome там в одном репаке пароль стоит, а в другом не хочет открывать FreArc-ом.

doctor_allcome 11-05-2016 16:00 2633868

Можно еще попробовать .7z, возможно архивы репака были упакован в 7-Zip. Еще можно попробовать http://innounp.sourceforge.net/. Еще есть для Total Commander аддон, для MultiArc http://wincmd.ru/plugring/InnoSetupAddon.html. На крайний случай можно попробовать программу следящую за действиями инсталляторов (куда, чего ставиться). Вроде в Revo Uninstaller Pro есть такая функция.

habib2302 13-05-2016 15:07 2634417

:shout: :shout: :shout:

TryRooM 13-05-2016 18:12 2634497

habib2302,
Пробуйте
Скрытый текст

vadjliss 14-05-2016 10:36 2634653

ребята дайте пример скрипта распаковки через FreeArc

ZVSRus 14-05-2016 21:43 2634798

Может кто подскажет как сделать settings.ini файл для выбора языка по умолчанию.
Так-как у программы не нахожу такого файла ни в локальных папках, ни записей в реестре.
Программа по умолчанию ставиться на английском языке, хотя русский также присутствует.
При переключении с английского на русский, при следующим запуске программы язык так и стоит русский, и это правильно.
По логике вещей где-то должна быть запись на пропись языка.
Все перерыл, не могу найти.
И если у кого есть пример выбора языка по умолчанию через запись в реестр.
Не помню на каком форуме, но такое решение по памяти уже встречал.

Nordek 14-05-2016 22:53 2634822

ZVSRus, Не совсем понятно что вам нужно в действительности.

Цитата:

Цитата ZVSRus
Может кто подскажет как сделать settings.ini файл для выбора языка по умолчанию. »

В settings.ini вносите данные:
Код:

Language=Default
Затем загружаете:
Код:

setup.exe /LOADINF=settings.ini

ZVSRus 15-05-2016 08:29 2634846

Цитата:

Цитата Nordek
Не совсем понятно что вам нужно в действительности.

В действительности нужно создать два settings.ini, в одном прописать для английского языка, в другом для русского, потом в секции [Files] через радиопереключатели выбирать язык, выбрал RadioButton русский, программа установилась по умолчанию с русским интерфейсом, и на оборот.
что-то типа такого:
Цитата:

[Files]
Source: "{app}\SettingsRU.ini"; DestDir: "{app}"; DestName: "Settings.ini"; Check: LangRusCheck and InstallerCheck; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\SettingsEN.ini"; DestDir: "{app}"; DestName: "Settings.ini"; Check: LangEngCheck and InstallerCheck; MinVersion: 0.0,5.0; Flags: ignoreversion

Что нужно внести в settings.ini что-бы реально работало. Если можно пример. На примере выше не совсем понятно.
Можно, если есть пример (как вариант) пример через запись в реестр.
Что-то типа такого:
Цитата:

[Registry]
Root: HKCU; Subkey: "Software\Insofta\CoverCommander"; ValueName: "Language"; ValueType: String; ValueData: "English"; Check: "LangEngCheck and InstallerCheck"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: "Software\Insofta\CoverCommander"; ValueName: "Language"; ValueType: string; ValueData: "Russian"; Check: "LangRusCheck and InstallerCheck"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty


vadjliss 15-05-2016 13:16 2634891

Вложений: 1
парни что за проблема повторяется 2 раза папка установки
скрипт

#define MyAppName "Corel PaintShop Pro X8"
#define MyAppPublisher "Corel"
#define MyAppURL ""
#define MyAppExeName "Corel PaintShop Pro.exe"
#define AppId "{1F666XX0-A000-4F48-66F6-080DEC56E094}"

[Setup]
AppId={{1F666XX0-A000-4F48-66F6-080DEC56E094}
AppVersion=18.2.0.6
VersionInfoVersion=18.2.0.6
AppName={#MyAppName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\Corel\Corel PaintShop Pro X8
VersionInfoDescription=Corel PaintShop Pro X8 18.2.0.6
OutputDir=C:\Users\\WWW\Desktop\скрипт
OutputBaseFilename=Corel PaintShop Pro X8 18.2.0.6
SetupIconFile=C:\Users\WWW\Desktop\скрипт\image\1.ico
PrivilegesRequired=admin
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=image\1.bmp
WizardSmallImageFile=image\2.bmp
UsePreviousGroup=False
DisableProgramGroupPage=yes
UninstallRestartComputer=no
DisableFinishedPage=yes
DiskSpanning=no
SlicesPerDisk=1
DiskSliceSize=2100000000
UninstallDisplayIcon={app}\1.ico
UninstallIconFile=C:\Users\WWW\Desktop\скрипт\image\unistaler.ico


[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
//Name: english; MessagesFile: compiler:Languages\English.isl

[Icons]
Name: "{commondesktop}\Corel PaintShop Pro X8"; Filename: "{app}\Corel\Corel PaintShop Pro X8\Corel PaintShop Pro.exe"; Tasks: DesktopIcon
Name: "{commonstartup}\Corel PaintShop Pro X8"; Filename: "{app}\Corel\Corel PaintShop Pro X8\Corel PaintShop Pro.exe"; Tasks: AutoLaunch
Name: "{group}\Corel PaintShop Pro X8"; Filename: "{app}\Corel\Corel PaintShop Pro X8\Corel PaintShop Pro.exe"; Tasks: AutoLaunch

Nordek 15-05-2016 15:46 2634919

Цитата:

Цитата ZVSRus
[Files]
Source: "{app}\SettingsRU.ini"; DestDir: "{app}"; DestName: "Settings.ini"; Check: LangRusCheck and InstallerCheck; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\SettingsEN.ini"; DestDir: "{app}"; DestName: "Settings.ini"; Check: LangEngCheck and InstallerCheck; MinVersion: 0.0,5.0; Flags: ignoreversion
»

Так:
[Files]
Source: "{src}\SettingsRU.ini"; DestDir: "{app}"; DestName: "Settings.ini"; Check: LangRusCheck and InstallerCheck; MinVersion: 0.0,5.0; Flags: ignoreversion external
Source: "{src}\SettingsEN.ini"; DestDir: "{app}"; DestName: "Settings.ini"; Check: LangEngCheck and InstallerCheck; MinVersion: 0.0,5.0; Flags: ignoreversion external


Цитата:

Цитата ZVSRus
В действительности нужно создать два settings.ini »

Цитата:

Цитата ZVSRus
пример (как вариант) пример через запись в реестр. »

Пример в зависимости выбора языка вначале установки, т.е взаимодействие с [Languages]
Код:

[INI]
Filename: {app}\settings.ini; Section: Lang; Key: Languages; String: English; Languages: english
Filename: {app}\settings.ini; Section: Lang; Key: Languages; String: Russian; Languages: russian

Скрытый текст
Если нужно для радиокнопки, то в секции [INI] вместо:
Код:

Languages: english
Languages: russian

Замените на своё значение, например:
Код:

Check: English
Check: Russian



Цитата:

Цитата vadjliss
2 раза папка установки »

Скрытый текст
[Icons]
Name: "{commondesktop}\Corel PaintShop Pro X8"; Filename: "{app}\Corel PaintShop Pro.exe"; Tasks: desktopicon
Name: "{commonstartup}\Corel PaintShop Pro X8"; Filename: "{app}\Corel PaintShop Pro.exe"; Tasks: desktopicon2
Name: "{group}\Corel PaintShop Pro X8"; Filename: "{app}\Corel PaintShop Pro.exe"; Tasks: desktopicon2

vadjliss 15-05-2016 16:50 2634932

Nordek
всё равно не выходит опять 2 папки
[Icons]
Name: "{commondesktop}\Corel PaintShop Pro X8"; Filename: "{app}\Corel PaintShop Pro.exe"; Tasks: desktopicon
Name: "{commonstartup}\Corel PaintShop Pro X8"; Filename: "{app}\Corel PaintShop Pro.exe"; Tasks: desktopicon2
Name: "{group}\Corel PaintShop Pro X8"; Filename: "{app}\Corel PaintShop Pro.exe"; Tasks: desktopicon2

ZVSRus 15-05-2016 17:44 2634944

Цитата:

Цитата Nordek
Пример в зависимости выбора языка вначале установки, т.е взаимодействие с [Languages]

Nordek спасибо за ответ, но вы совсем меня не поняли. Как установить Setting.ini я знаю, через секцию [Files].
Изначально вопрос был поставлен что именно нужно записать в самом файле .INI
В .INI файле однозначно должно быть Language=ru_RU, но что-то должно быть еще для связывания с программой или языковыми файлами, что именно подскажите.

Dodakaedr 15-05-2016 19:40 2634969

Цитата:

Цитата ZVSRus
но что-то должно быть еще для связывания с программой или языковыми файлами, что именно подскажите. »

Это вы должны сами выяснить. Запись в ini делается через секцию [INI] а в реестр через секцию [Registry]. Экстрасенсов здесь нет. Что хоть за программа?

Nordek 15-05-2016 20:16 2634976

Цитата:

Цитата vadjliss
всё равно не выходит опять 2 папки »

Я даже "заморачиваться" не буду т.к ничего непонятно. Вменяемой информации от вас никакой нет.
По этому, см.:
с чистого листа:
Код:

#define AppName "Corel PaintShop Pro X8"
#define AppVersion "18.2.0.6"
#define AppPublisher "Corel"
#define AppPublisherURL "http://www.example.com/"
#define AppSupportURL "http://www.example.com/support"
#define AppUpdatesURL "http://www.example.com/product"
#define AppExeName "Corel PaintShop Pro.exe"
#define AppId "{1F666XX0-A000-4F48-66F6-080DEC56E094}"

[Setup]
AppId={{#AppId}
AppName={#AppName}
AppVersion={#AppVersion}
;AppVerName={#AppName} {#AppVersion}
AppPublisher={#AppPublisher}
AppPublisherURL={#AppPublisherURL}
AppSupportURL={#AppSupportURL}
AppUpdatesURL={#AppUpdatesURL}
DefaultDirName={pf}\{#AppPublisher}\{#AppName}
DefaultGroupName={#AppPublisher}\{#AppName}
OutputDir=.
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[CustomMessages]
CM_DesktopIcon=Создать ярлык на «Рабочем столе»
CM_AutorunIcon=Создать ярлык в папке «Автозагрузка»
CM_GroupIcon=Создать группу с ярлыками в меню «Пуск»
CM_UninstallProgram=Деинсталлировать

[Languages]
Name: default; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: idesktopicon; Description: {cm:CM_DesktopIcon}; GroupDescription: {cm:AdditionalIcons}
Name: iautorunicon; Description: {cm:CM_AutorunIcon}; GroupDescription: {cm:AdditionalIcons}
Name: igroupicon; Description: {cm:CM_GroupIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
;Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: "app_folder\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {commondesktop}\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: idesktopicon
Name: {commonstartup}\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: iautorunicon
Name: {group}\{#AppName}; Filename: {app}\{#AppExeName}; Tasks: igroupicon
Name: {group}\{cm:CM_UninstallProgram}; Filename: {uninstallexe}; Tasks: igroupicon

[Run]
Filename: {app}\{#AppExeName}; Description: {cm:LaunchProgram,{#AppName}}; Flags: nowait postinstall skipifsilent unchecked




Цитата:

Цитата ZVSRus
В .INI файле однозначно должно быть Language=ru_RU »

В оригинале, всё записывается в реестр. Стоит только догадываться что за велосипед вам понадобился:
См. Справка » Константы
Из справки:
{ini:Filename,Section,Key|DefaultValue}
Берёт значение из .INI файла.
  • Filename - имя ini-файла, из которого производится чтение
  • Section - имя секции
  • Key - имя ключа
  • DefaultValue - значение, возвращаемое, если параметр не существует
  • Если вы хотите вставить ",", "|", или "}" в константу, Вы должны ввести "%-шестнадцатеричный номер символа в кодировке". Например, запятая равна "%2c", "|" - "%7c", и "}" - "%7d". Если вы хотите вставить "%", введите "%25".
  • Filename, Section, и Key могут включать константы. Обратите внимание, что описанным выше способом закрывающая фигурная скобка задается только в случае, когда она используется сама по себе. Если же она обозначает константу, подобные изощрения не нужны.
Например:
Код:

{ini:{win}\MyProg.ini,Settings,Path|{pf}\My Program}

ZVSRus 15-05-2016 20:26 2634981

Цитата:

Цитата Dodakaedr
Что хоть за программа

Программа Light Image Resizer 4.7.6.1 взял для экспериментов.
По умолчанию программа устанавливается на языке системы т.е. на русском.
При выборе английского языка, при следующем запуске английский язык так и стоит, значит где-то прописывается язык, где не могу найти ни записей в реестре, ни в локальных папках файлов конфигурации нет.
Что делается через секции [INI] и [Registry] я знаю.
Объясняю в 3 раз что мне нужно: Взять текстовый документ, что-то там написать конкретно для русского или английского языка, потом поменять расширение TXT на INI и чтобы это работало. Вот что написать я не знаю. То есть сделать settings.ini в ручную!

Dodakaedr 15-05-2016 20:44 2634992

Цитата:

Цитата ZVSRus
значит где-то прописывается язык »

в реестре параметр locale_file по пути HKEY_CURRENT_USER\Software\ObviousIdea\ImageResizer\4.0

ZVSRus 15-05-2016 20:58 2634997

Цитата:

Цитата Nordek
В оригинале, всё записывается в реестр

Программу что вы привели в пример запись в реестр реально работает
Цитата:

[Registry]
Root: HKCU; Subkey: "Software\Insofta\CoverCommander"; ValueName: "Language"; ValueType: String; ValueData: "English"; Check: "LangEngCheck and InstallerCheck"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: "Software\Insofta\CoverCommander"; ValueName: "Language"; ValueType: string; ValueData: "Russian"; Check: "LangRusCheck and InstallerCheck"; MinVersion: 0.0,5.0; Flags: uninsdeletevalue uninsdeletekeyifempty

А велосипед из цирка с одним колесом!
Как эти строки приляпать к программе, название сообщением выше.

TryRooM 15-05-2016 21:04 2635000

ZVSRus,
Программа Light Image Resizer
Код:

Root: HKCU; SubKey: Software\ObviousIdea\ImageResizer\4.0; ValueType: string; ValueName: locale_file; ValueData: RSZ_United States.ini; Check: EngLang;
Root: HKCU; SubKey: Software\ObviousIdea\ImageResizer\4.0; ValueType: string; ValueName: locale_file; ValueData: RSZ_Russia.ini; Check: RusLang;


ZVSRus 15-05-2016 21:36 2635009

Цитата:

Цитата Dodakaedr
в реестре параметр locale_file по пути HKEY_CURRENT_USER\Software\ObviousIdea\ImageResizer\4.0

Dodakaedr большое спасибо. Просмотрел данною строку, гляжу в книгу а вижу фигу.
Цитата:

Root: HKCU; SubKey: Software\ObviousIdea\ImageResizer\4.0; ValueType: string; ValueName: locale_file; ValueData: RSZ_Russia.ini; Check: "LangRusCheck and InstallerCheck"; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\ObviousIdea\ImageResizer\4.0; ValueType: string; ValueName: locale_file; ValueData: RSZ_United States.ini; Check: "LangEngCheck and InstallerCheck"; Flags: uninsdeletevalue uninsdeletekeyifempty

Так все работает как положено.
TryRooM вам тоже спасибо за отклик, но уже разобрался.

icetanker 18-05-2016 09:31 2635589

удалено

SBalykov 24-05-2016 20:55 2637380

Подскажите, а средствами Inno возможно ли выполнить прогресс бар, при создании backup файлов и папок без использования дополнительных библиотек?
Должно быть так ...
Цитата:

Цитата icetanker
Код:
Root: HKCU; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings; ValueType: dword; ValueName: SecureProtocols; ValueData: $00002728; Flags: uninsdeletevalue uninsdeletekeyifempty


kotyarko@fb 24-05-2016 22:30 2637389

Цитата:

Цитата SBalykov
Подскажите, а средствами Inno возможно ли выполнить прогресс бар, при создании backup файлов и папок без использования дополнительных библиотек? »

http://forum.oszone.net/post-2032676-1327.html
*без использования сторонних библиотек.

SBalykov 25-05-2016 10:20 2637460

kotyarko@fb, Спасибо. Об этом знаю.
Просто, хотелось что-нибудь проще ...

elChoopacabra 02-06-2016 20:34 2639764

Уважаемые помогите пожалуйста с двумя вопросами:

1. Что я делаю не так? На Win10 не распаковывается правильный (вторая пара) вариант SPTD (SPTD2inst*.exe)
Код:

Source: {app10}\sptd\SPTDinst-x86.exe; DestDir: {app}\; Check: not Is64BitInstallMode; OnlyBelowVersion: 0,6.4; Flags: ignoreversion
Source: {app10}\sptd\SPTDinst-x64.exe; DestDir: {app}\; Check: Is64BitInstallMode; OnlyBelowVersion: 0,6.4; Flags: ignoreversion 64bit
Source: {app10}\sptd\SPTD2inst-x86.exe; DestDir: {app}\; DestName: "SPTDinst-x86.exe"; Check: not Is64BitInstallMode; MinVersion: 0,6.4; Flags: ignoreversion
Source: {app10}\sptd\SPTD2inst-x64.exe; DestDir: {app}\; DestName: "SPTDinst-x64.exe"; Check: Is64BitInstallMode; MinVersion: 0,6.4; Flags: ignoreversion 64bit


2. Имеется ключ реестра
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Конфигурацию 7-Zip SFX\command]
@="wscript \"C:\\Program Files (x86)\\SetTools\\AllInOne.vbs\" \"%1\" /CONFIG"

Конвертер преобразует его в
Код:

Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\CommandStore\shell\Конфигурацию 7-Zip SFX\command; ValueType: string; ValueData: """wscript ""{app}\AllInOne.vbs"" ""%1"" /CONFIG"; Check: IsWin64; Flags: uninsdeletevalue uninsdeletekeyifempty
Но это не совсем то... в итоге ключ заносится неверный.

Заранее спасибо за подсказки.

Dodakaedr 02-06-2016 21:35 2639777

elChoopacabra, а так?
Код:

Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\CommandStore\shell\Конфигурацию 7-Zip SFX\command; ValueType: string; ValueData: "wscript ""{app}\AllInOne.vbs"" ""%1"" /CONFIG"; Check: IsWin64; Flags: uninsdeletevalue uninsdeletekeyifempty

elChoopacabra 02-06-2016 23:05 2639790

Dodakaedr, благодарю. Именно оно.


Добавлено:
С проблемой в Win10 тоже удалось разобраться. Причиной оказалось неверное детектирование "Десятки" программой версии 5.5.2 (нормально это делает только Inno Setup 5.5.6 и выше). Но поскольку (ввиду субъективных причин) переходить на новый билд не хотелось, проблема решилась путём "перекидывания" манифеста из актуальной версии для Setup.e32 и SetupLdr.e32

vadjliss 05-06-2016 15:07 2640427

ребята подскажите как сделать что бы после основного инсталятора запустился другой автоматом

SBalykov 06-06-2016 04:10 2640615

Цитата:

Цитата vadjliss
ребята подскажите как сделать что бы после основного инсталятора запустился другой автоматом

PHP код:

procedure CurStepChanged(CurStepTSetupStep);
begin
  
case CurStep of
  ssInstall
begin ... end;
  
ssPostInstallbegin ... end;
  
ssDonebegin Exec(ExpandConstant('{src}\setup.exe'), ''''1ewNoWaitResultCode); end;
  
end;
end


Max-RZD 12-06-2016 17:46 2642413

Подскажите пожалуйста с таким скриптом. Хотел сделать, что бы в конце установщика был выбор Стандартная или Выборочная установка. Как тут, не всё сразу устанавливалось, а можно было выбрать по отдельности, что устанавливать, а что нет.


Делал по этому образцу на форуме ( Выделение всех компонентов ) http://forum.oszone.net/post-1276947-444.html
Но когда создаю инсталлятор, ругается что то на 38 линию.


Что там может быть не так, подскажите?
Скрипт прикладываю

PHP код:

Script generated by the Inno Setup Script Wizard.
SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[
Setup]
NOTEThe value of AppId uniquely identifies this application.
; Do 
not use the same AppId value in installers for other applications.
; (
To generate a new GUIDclick Tools Generate GUID inside the IDE.)
AppId={{BD9A852C-C404-4988-92C3-8DA3D57B29B5}
AppName=TrainSim.Ru MSTS Addon
AppVerName
=RZD (Russian Railwayshopper cars #0001, 0002, 0003, 0004 (version 1.0)
;AppVerName=TrainSim.Ru MSTS Addon RZD (Russian Railwayshopper cars #0001, 0002, 0003, 0004 (version 1.0)
AppPublisher=rainsim.ru
AppPublisherURL
=http://trainsim.ru
AppSupportURL=http://trainsim.ru
AppUpdatesURL=http://trainsim.ru
DefaultDirName={reg:HKLMSoftwareMicrosoftMicrosoft GamesTrain Simulator1.0,Path}
DefaultGroupName=TrainSim.Ru MSTS Addon
DisableProgramGroupPage
=yes
LicenseFile
=E:Games LaboratoryMicrosoft Train SimulatorTRAINSTRAINSETklrFr_HopperLicense.txt
InfoBeforeFile
=E:Games LaboratoryMicrosoft Train SimulatorTRAINSTRAINSETklrFr_HopperklrFr_Hopper-pack_readme.txt
OutputDir
=E:готово
OutputBaseFilename
=klrFr_Hopper-0001-0002-0003-0004_v1_0
Compression
=lzma
SolidCompression
=yes
WizardImageFile
=D:c.bmp
WizardSmallImageFile
=E:скриныtrain.bmp
Uninstallable
=false
DirExistsWarning
=no

[Languages]
NameenglishMessagesFilecompiler:Default.isl

[Types]
NamefullDescriptionСтандартная
Name
customDescriptionВыборочная

[Components]
NameklrFr_Hopper-0001DescriptionklrFr_Hopper-0001Typesfull custom
Name
klrFr_Hopper-0002DescriptionklrFr_Hopper-0002Typesfull
Name
klrFr_Hopper-0003DescriptionklrFr_Hopper-0003Typesfull
Name
klrFr_Hopper-0004DescriptionklrFr_Hopper-0004Typesfull

[Files]
SourceTrainsTrainsetklrFr_HopperLicense.txtDestDir: {app}klrFr_HopperDestNameLicense.txtComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0001_e.wagDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0001_f.wagDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0001.aceDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0001_e.jpgDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0001_f.jpgDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0001.sDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0001.sdDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperSDW_Hopper.aceDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperSDW_Hopper.sDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-pack_readme.txtDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0001Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperLicense.txtDestDir: {app}klrFr_HopperDestNameLicense.txtComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0002_e.wagDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0002_f.wagDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0002.aceDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0002_e.jpgDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0002_f.jpgDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0002.sDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0002.sdDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperSDW_Hopper.aceDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperSDW_Hopper.sDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-pack_readme.txtDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0002Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperLicense.txtDestDir: {app}klrFr_HopperDestNameLicense.txtComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0003_e.wagDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0003_f.wagDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0003.aceDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0003_e.jpgDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0003_f.jpgDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0003.sDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0003.sdDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperSDW_Hopper.aceDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperSDW_Hopper.sDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-pack_readme.txtDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0003Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperLicense.txtDestDir: {app}klrFr_HopperDestNameLicense.txtComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0004_e.wagDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0004_f.wagDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0004.aceDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0004_e.jpgDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0004_f.jpgDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0004.sDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-0004.sdDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperSDW_Hopper.aceDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperSDW_Hopper.sDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion
Source
TrainsTrainsetklrFr_HopperklrFr_Hopper-pack_readme.txtDestDir: {app}klrFr_HopperComponentsklrFr_Hopper-0004Flagsignoreversion 


Nordek 12-06-2016 19:49 2642430

Цитата:

Цитата Max-RZD
Но когда создаю инсталлятор, ругается что то на 38 линию. »

Знак "-" не используйте, т.е Name: klrFr_Hopper-0001. Используйте "_", т.е Name: klrFr_Hopper_0001.

Max-RZD 12-06-2016 20:40 2642434

Ага помогло, но теперь ругается на 44 линию?

Nordek 12-06-2016 21:53 2642443

Цитата:

Цитата Max-RZD
но теперь ругается на 44 линию? »

Кто в "Components", "klrFr_Hopper-0001" менять будет?

Подчеркну жирным:
«Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Components: klrFr_Hopper-0001; Flags: ignoreversion» - т.е заданное значение у вас зависима от элементов в [Components].
Каждому переназначить по новой.

Готовое к использованию
Замените у себя на эту часть:
Код:

[Components]
Name: klrFr_Hopper_0001; Description: klrFr_Hopper-0001; Types: full custom
Name: klrFr_Hopper_0002; Description: klrFr_Hopper-0002; Types: full
Name: klrFr_Hopper_0003; Description: klrFr_Hopper-0003; Types: full
Name: klrFr_Hopper_0004; Description: klrFr_Hopper-0004; Types: full

[Files]
; klrFr_Hopper-0001
Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001

; klrFr_Hopper-0002
Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002

; klrFr_Hopper-0003
Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003

; klrFr_Hopper-0004
Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004


Max-RZD 13-06-2016 11:27 2642507

Заменил ту часть, что у вас в образце. Всё равно ругается на ту строчку?
Скрытый текст


Прикладываю новый скрипт, всё как получилось.
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{BD9A852C-C404-4988-92C3-8DA3D57B29B5}
AppName=TrainSim.Ru - MSTS Addon
AppVerName=RZD (Russian Railways) hopper cars #0001, 0002, 0003, 0004 (version 1.0)
;AppVerName=TrainSim.Ru - MSTS Addon RZD (Russian Railways) hopper cars #0001, 0002, 0003, 0004 (version 1.0)
AppPublisher=rainsim.ru
AppPublisherURL=http://trainsim.ru
AppSupportURL=http://trainsim.ru
AppUpdatesURL=http://trainsim.ru
DefaultDirName={reg:HKLM\Software\Microsoft\Microsoft Games\Train Simulator\1.0,Path}
DefaultGroupName=TrainSim.Ru - MSTS Addon
DisableProgramGroupPage=yes
LicenseFile=E:\Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\License.txt
InfoBeforeFile=E:\Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-pack_readme.txt
OutputDir=E:\готово
OutputBaseFilename=klrFr_Hopper-0001-0002-0003-0004_v1_0
Compression=lzma
SolidCompression=yes
WizardImageFile=D:\c.bmp
WizardSmallImageFile=E:\скрины\train.bmp
Uninstallable=false
DirExistsWarning=no

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Types]
Name: full; Description: Стандартная
Name: custom; Description: Выборочная

[Components]
Name: klrFr_Hopper_0001; Description: klrFr_Hopper-0001; Types: full custom
Name: klrFr_Hopper_0002; Description: klrFr_Hopper-0002; Types: full
Name: klrFr_Hopper_0003; Description: klrFr_Hopper-0003; Types: full
Name: klrFr_Hopper_0004; Description: klrFr_Hopper-0004; Types: full

[Files]
; klrFr_Hopper-0001
Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0001.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001

; klrFr_Hopper-0002
Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0002.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002

; klrFr_Hopper-0003
Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0003.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003

; klrFr_Hopper-0004
Source: \Trains\Trainset\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-0004.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \Trains\Trainset\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004


Nordek 13-06-2016 13:51 2642537

Цитата:

Цитата Max-RZD
Заменил ту часть, что у вас в образце. Всё равно ругается на ту строчку?
»

Значит во всех будет выводить ошибку. Читайте: "does not exist" - что означает: Файл отсутствует или указан неверный путь к файлу. Не вижу проблем.

Я не могу знать какое у вас расположение файлов.

Особенно раздражает когда вы не прикрепляете никаких файлов.
Смотрите как я это делаю. Уверен сможете повторить. Мне пришлось создать их, т.е повторить чтоб соответствовало - это никому ненужно. Таким образом вы должны были представить, чтоб собеседнику не пришлось страдать головной болью. А вы получили скорый и точный ответ.

Max-RZD 13-06-2016 19:19 2642590

Посмотрел, путь к файлу указан верно, может ещё не хватает какой то команды в скрипте к файлу?
Цитата:

Цитата Nordek
"does not exist" - что означает: Файл отсутствует или указан неверный путь к файлу »

- спасибо, что перевели ошибку, а то я даже не знал, что она означает, так как с англ. у меня очень тяжело, знаю только русский.

Я сначала хотел прикрепить весь скрипт, но файл с расширением .iss нельзя прикрепить, тогда я вот всё скопировал и прикрепил в txt
Спасибо, что подсказали как прикрепить и какие файлы собрать. У меня всё лежит по такому пути. E:\Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper
В папке klrFr_Hopper лежат все файлы.
Только картинки c.bmp, train.bmp по разным местам расположены.
Прикладываю ещё "Образец_script" по его образцу, я собирал инсталлятор, там тоже вагоны разделены по отдельности.

Вот прикрепляю все файлы по вашему образцу. Будут ещё какие то вопросы, пишите. Спасибо вам за помощь!
https://yadi.sk/d/7T9WvrOTsTKs4

Nordek 13-06-2016 19:49 2642596

Max-RZD,
Смотрите что у вас получается:
В скрипте:
klrFr_Hopper-0001_e.wag

В папке:
klrFr_Hopper-0001e.wag

Надеюсь заметите разницу.

Если конечный файл на выходе имеет имя "klrFr_Hopper-0001e.wag", то на вход в инсталлятор должно быть таким же.

Скрипт к ранее прикреплённым файлам:
Т.е скопируйте всё содержимое:
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!


[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)

AppId={{BD9A852C-C404-4988-92C3-8DA3D57B29B5}
AppName=TrainSim.Ru - MSTS Addon
AppVerName=RZD (Russian Railways) hopper cars #0001, 0002, 0003, 0004 (version 1.0)
;AppVerName=TrainSim.Ru - MSTS Addon RZD (Russian Railways) hopper cars #0001, 0002, 0003, 0004 (version 1.0)
AppPublisher=rainsim.ru
AppPublisherURL=http://trainsim.ru
AppSupportURL=http://trainsim.ru
AppUpdatesURL=http://trainsim.ru
DefaultDirName={reg:HKLM\Software\Microsoft\Microsoft Games\Train Simulator\1.0,Path}
DefaultGroupName=TrainSim.Ru - MSTS Addon
DisableProgramGroupPage=yes
LicenseFile=Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\License.txt
InfoBeforeFile=Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-pack_readme.txt
OutputDir=E:\готово
OutputBaseFilename=klrFr_Hopper-0001-0002-0003-0004_v1_0
Compression=lzma
SolidCompression=yes
WizardImageFile=c.bmp
WizardSmallImageFile=train.bmp
Uninstallable=false
DirExistsWarning=no

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Types]
Name: full; Description: Стандартная
Name: custom; Description: Выборочная

[Components]
Name: klrFr_Hopper_0001; Description: klrFr_Hopper-0001; Types: full custom
Name: klrFr_Hopper_0002; Description: klrFr_Hopper-0002; Types: full
Name: klrFr_Hopper_0003; Description: klrFr_Hopper-0003; Types: full
Name: klrFr_Hopper_0004; Description: klrFr_Hopper-0004; Types: full

[Files]
; klrFr_Hopper-0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0001e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0001f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0001.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0001e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0001f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0001.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0001.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001

; klrFr_Hopper-0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0002e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0002f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0002.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0002e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0002f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0002.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0002.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002

; klrFr_Hopper-0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0003e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0003f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0003.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0003e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0003f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0003.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0003.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003

; klrFr_Hopper-0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0004e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0004f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0004.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0004e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0004f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0004.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-0004.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
;
;

Замените в Script.iss.
Отработает без препятствий.


На заметку: Смотрите отмеченное красным: \Trains\Trainset\klrFr_Hopper\License.txt
Обратный слеш вначале - означает корень диска.

Max-RZD 13-06-2016 20:13 2642599

Вроде разобрался, сейчас инсталлятор весь собирается без ошибок.
Я изменил пути в секции [Files], удалил \Trains\Trainset и ошибки не стало.
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{BD9A852C-C404-4988-92C3-8DA3D57B29B5}
AppName=TrainSim.Ru - MSTS Addon
AppVerName=RZD (Russian Railways) hopper cars #0001, 0002, 0003, 0004 (version 1.0)
;AppVerName=TrainSim.Ru - MSTS Addon RZD (Russian Railways) hopper cars #0001, 0002, 0003, 0004 (version 1.0)
AppPublisher=rainsim.ru
AppPublisherURL=http://trainsim.ru
AppSupportURL=http://trainsim.ru
AppUpdatesURL=http://trainsim.ru
DefaultDirName={reg:HKLM\Software\Microsoft\Microsoft Games\Train Simulator\1.0,Path}
DefaultGroupName=TrainSim.Ru - MSTS Addon
DisableProgramGroupPage=yes
LicenseFile=E:\Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\License.txt
InfoBeforeFile=E:\Games Laboratory\Microsoft Train Simulator\TRAINS\TRAINSET\klrFr_Hopper\klrFr_Hopper-pack_readme.txt
OutputDir=E:\готово
OutputBaseFilename=klrFr_Hopper-0001-0002-0003-0004_v1_0
Compression=lzma
SolidCompression=yes
WizardImageFile=D:\c.bmp
WizardSmallImageFile=E:\скрины\train.bmp
Uninstallable=false
DirExistsWarning=no

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Types]
Name: full; Description: Стандартная
Name: custom; Description: Выборочная

[Components]
Name: klrFr_Hopper_0001; Description: klrFr_Hopper-0001; Types: full custom
Name: klrFr_Hopper_0002; Description: klrFr_Hopper-0002; Types: full
Name: klrFr_Hopper_0003; Description: klrFr_Hopper-0003; Types: full
Name: klrFr_Hopper_0004; Description: klrFr_Hopper-0004; Types: full

[Files]
Source: \klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\klrFr_Hopper-0001_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\klrFr_Hopper-0001_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\klrFr_Hopper-0001.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\klrFr_Hopper-0001_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\klrFr_Hopper-0001_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\klrFr_Hopper-0001.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\klrFr_Hopper-0001.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0001
Source: \klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\klrFr_Hopper-0002_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\klrFr_Hopper-0002_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\klrFr_Hopper-0002.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\klrFr_Hopper-0002_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\klrFr_Hopper-0002_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\klrFr_Hopper-0002.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\klrFr_Hopper-0002.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0002
Source: \klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\klrFr_Hopper-0003_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\klrFr_Hopper-0003_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\klrFr_Hopper-0003.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\klrFr_Hopper-0003_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\klrFr_Hopper-0003_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\klrFr_Hopper-0003.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\klrFr_Hopper-0003.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0003
Source: \klrFr_Hopper\License.txt; DestDir: {app}\klrFr_Hopper; DestName: License.txt; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\klrFr_Hopper-0004_e.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\klrFr_Hopper-0004_f.wag; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\klrFr_Hopper-0004.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\klrFr_Hopper-0004_e.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\klrFr_Hopper-0004_f.jpg; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\klrFr_Hopper-0004.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\klrFr_Hopper-0004.sd; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\SDW_Hopper.ace; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\SDW_Hopper.s; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004
Source: \klrFr_Hopper\klrFr_Hopper-pack_readme.txt; DestDir: {app}\klrFr_Hopper; Flags: ignoreversion; Components: klrFr_Hopper_0004

Но теперь появился другой вопрос: В конце установке есть выбор Стандартная или Выборочная установка


Но она почему то расположена не в виде кнопок как здесь


А как в выпадающем меню. Как это можно исправить?

И когда выбираешь Выборочная, никакого выбора нет, как здесь


А просто устанавливается Первый хоппер - klrFr_Hopper-0001 Как это можно всё исправить?

Max-RZD 13-06-2016 21:06 2642606

В скрипте как раз правильно указано:
klrFr_Hopper-0001_e.wag

В папке, так не правильно:
klrFr_Hopper-0001e.wag

Всё уже исправил в папке. Удалил пути в секции [Files], удалил \Trains\Trainset, инсталлятор теперь собирается без ошибок.
Вопрос остаются по выбору вот в конце установке?

habib2302 16-06-2016 11:46 2643153

Доброе время суток. Помогите решить проблему с запуском процесса explorer.exe. Как видно на видео процесс explorer завершается успешно, но после завершения установки софтины инсталлятор обратно запускает explorer, но открывается только папка.

El Sanchez 16-06-2016 14:57 2643204

Цитата:

Цитата habib2302
но после завершения установки софтины инсталлятор обратно запускает explorer, но открывается только папка. »

habib2302, инсталлятор, бездумно играющийся с важными пользовательскими (тем более системными) процессами, не имеет права на существование. Что будет делать ваш инсталлятор, если кто-то запустит его из-под другой учетной записи (например, из-под админской учетки в сеансе пользователя)?

Alloc 22-06-2016 17:02 2644882

Приветствую!

Я не знаю как в зависимости от выбранного языка заставить скрипт выдавать нужный перевод для Типа Диска. Это единственное что я не перевел и как я полагаю функция возвращает результат в зависимости от языка системы, что мне не нужно..

Вместо "Локальный диск/Съемный диск" - должен писать "Logical Disk" и "Removable Disk" соответственно (в случае выбора английского языка). Поможете?



вот сам скрипт:

Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
;BitmapResource=Drive:img_small.bmp
[CustomMessages]
rus.DiskName=Имя
rus.DiskFileSystem=Файловая система
rus.DiskTotal=Ёмкость
rus.DiskFree=Свободно
rus.DiskType=Тип

eng.DiskName=Name
eng.DiskFileSystem=File System
eng.DiskTotal=Capacity
eng.DiskFree=Free Space
eng.DiskType=Type

[.Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
#ifndef NeedHDD
  DRIVE_NO_ROOT_DIR = 1;
  DRIVE_REMOVABLE = 2;
  DRIVE_FIXED = 3;
#endif 
  MAX_PATH = 260;
  SHGFI_ICON = $100;
  SHGFI_SMALLICON = $1;
  SHGFI_DISPLAYNAME = $200;
  SHGFI_TYPENAME = $400;

type
  _SHFILEINFO = record
      hIcon: HICON;
      iIcon: Integer;
      dwAttributes: DWORD;
      szDisplayName: array [0..MAX_PATH-1] of Char;
      szTypeName: array [0..79] of Char;
  end;

  _ULARGE_INTEGER = record
      LowPart: DWORD;
      HighPart: DWORD;
  end;

  DriveInfo = record
      DriveName: String;
      DriveFileSystemName: String;
      DriveSize: Extended;
      DriveFreeSize: array [0..1] of Extended;
      DriveType: String;
      DriveIcon: _SHFILEINFO;
  end;


function SHGetFileInfo(pszPath: String; dwFileAttributes: DWORD; var psfi: _SHFILEINFO; cbFileInfo, uFlags: UINT): DWORD; external 'SHGetFileInfo{#A}@shell32.dll stdcall';
function StrFormatByteSize64(qdw: Currency; var pszBuf: Char; cchBuf: UINT): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function GetVolumeInformationLp(lpRootPathName, lpVolumeNameBuffer: String; nVolumeNameSize, lpVolumeSerialNumber: DWORD; var lpMaximumComponentLength, lpFileSystemFlags: DWORD; lpFileSystemNameBuffer: String; nFileSystemNameSize: DWORD): BOOL; external 'GetVolumeInformation{#A}@kernel32.dll stdcall';
function GetDriveTypeLp(lpRootPathName: String): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';
function GetDiskFreeSpaceEx(lpDirectoryName: String; var lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes: _ULARGE_INTEGER): BOOL; external 'GetDiskFreeSpaceEx{#A}@kernel32.dll stdcall';


function BytesToSize(Bytes: Extended): String;
var
    pszBuf: array [0..15] of Char;
begin
    try
        Result := StrFormatByteSize64(Abs(Bytes div 1E4), pszBuf[0], SizeOf(pszBuf));
    except end;
end;

function CharArrayToString(cArray: array of Char): String;
begin
    Result := '';
    while cArray[Length(Result)] <> #0 do Insert(cArray[Length(Result)], Result, Length(Result)+1);
end;

function Size64(QuadPart: _ULARGE_INTEGER): Extended;
begin
    Result := $7FFFFFFF;
    Result := ((QuadPart.HighPart + integer(QuadPart.LowPart < 0))*Result + QuadPart.HighPart + integer(QuadPart.LowPart < 0))*2 + QuadPart.LowPart;
end;


procedure GetDrivesInfo(var DriveArray: array of DriveInfo);
var
    i, e: Integer;
    iIcon: WORD;
    UndefDriveLetter: String;
    DriveType: UINT;
    DrivePath: String;
    VolumeName, FileSystemName: String;
    ComponentLength, SerialNumber, FileSystemFlags: DWORD;
    FreeBytesAvailableToCaller, TotalNumberOfBytes, TotalNumberOfFreeBytes: _ULARGE_INTEGER;
begin
    for i := 67 to 90 do // Loop from C..Z to determine available drives
    begin
        UndefDriveLetter := Chr(i) + ':\';
        DriveType := GetDriveTypeLp(UndefDriveLetter);
        case DriveType of
            DRIVE_REMOVABLE, DRIVE_FIXED: begin
                VolumeName := StringOfChar(#32, MAX_PATH);
                FileSystemName := StringOfChar(#32, MAX_PATH);
                GetVolumeInformationLp(UndefDriveLetter, VolumeName, MAX_PATH, SerialNumber, ComponentLength, FileSystemFlags, FileSystemName, MAX_PATH);
                GetDiskFreeSpaceEx(UndefDriveLetter, FreeBytesAvailableToCaller, TotalNumberOfBytes, TotalNumberOfFreeBytes);
                SetArrayLength(DriveArray, GetArrayLength(DriveArray)+1);
                e := GetArrayLength(DriveArray)-1;
                SHGetFileInfo(UndefDriveLetter, FILE_ATTRIBUTE_DIRECTORY, DriveArray[e].DriveIcon, sizeof(DriveArray[e].DriveIcon), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_TYPENAME or SHGFI_DISPLAYNAME);
                DriveArray[e].DriveName := CharArrayToString(DriveArray[e].DriveIcon.szDisplayName);
                DriveArray[e].DriveFileSystemName := FileSystemName;
                DriveArray[e].DriveSize := Size64(TotalNumberOfBytes);
                DriveArray[e].DriveFreeSize[0] := Size64(TotalNumberOfFreeBytes);
                if DriveArray[e].DriveSize > 0 then DriveArray[e].DriveFreeSize[1] := DriveArray[e].DriveFreeSize[0]*100/DriveArray[e].DriveSize;
                DriveArray[e].DriveType := CharArrayToString(DriveArray[e].DriveIcon.szTypeName);
            end;
            DRIVE_NO_ROOT_DIR: Continue;
        end;
    end;
end;


procedure DriveListViewOnClick(Sender: TObject);
begin
    if Assigned(TListView(Sender).Selected) then
        WizardForm.DirEdit.Text := AddBackSlash(Copy(TListView(Sender).Selected.Caption, Pos('(', TListView(Sender).Selected.Caption)+1, 2)) + Copy(WizardForm.DirEdit.Text, 4, Length(WizardForm.DirEdit.Text));
end;

procedure DriveListViewColumnClick(Sender: TObject; Column: TListColumn);
begin
    TListView(Sender).Tag := Column.Index;
    with TListView(Sender) do
    begin
        if DesignInfo = 0 then DesignInfo := 1 else DesignInfo := -DesignInfo;
        AlphaSort;
    end;
end;

procedure DriveListViewOnCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
begin
    with TListView(Sender) do
    begin
        if Tag = 0 then
            Compare := DesignInfo*CompareText(Item1.Caption, Item2.Caption)
        else
            Compare := DesignInfo*CompareText(Item1.SubItems[Tag-1], Item2.SubItems[Tag-1]);
    end;
end;

procedure GetDiskInfo;
var
    ReadyArray: array of DriveInfo;
    DriveListView: TListView;
    NewColumn: TListColumn;
    ListItem: TListItem;
    ImgList: TImageList;
    i, e: Integer;
    ico: TIcon;
begin
    GetDrivesInfo(ReadyArray);
    e := GetArrayLength(ReadyArray)-1;

    DriveListView := TListView.Create(nil);
    with DriveListView do
    begin
        Parent := WizardForm.SelectDirPage;
        ViewStyle := vsReport;
        ReadOnly := True;

      //SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + ScaleY(40), WizardForm.DirEdit.Width, ScaleY(200));   
        SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + ScaleY(30), WizardForm.DirEdit.Width+85, ScaleY(99));
   
        OnClick := @DriveListViewOnClick;
        OnColumnClick := @DriveListViewColumnClick;
        OnCompare := @DriveListViewOnCompare;

        ImgList := TImageList.Create(DriveListView);
        ImgList.BkColor := Color;
        for i := 0 to e do
        begin
            ico := TIcon.Create;
            ico.Handle := ReadyArray[i].DriveIcon.hIcon;
            ImgList.AddIcon(ico);
            ico.Free;
        end;
        SmallImages := ImgList;

        NewColumn := Columns.Add;
        NewColumn.Caption := ExpandConstant('{cm:DiskName}');
        NewColumn.Width := ScaleX(130);

        NewColumn := Columns.Add;
        NewColumn.Caption := ExpandConstant('{cm:DiskFileSystem}');
        NewColumn.Width := ScaleX(105);

        NewColumn := Columns.Add;
        NewColumn.Caption := ExpandConstant('{cm:DiskTotal}');
        NewColumn.Width := ScaleX(60);

        NewColumn := Columns.Add;
        NewColumn.Caption := ExpandConstant('{cm:DiskFree}');
        NewColumn.Width := ScaleX(90);

        NewColumn := Columns.Add;
        NewColumn.Caption := ExpandConstant('{cm:DiskType}');
        NewColumn.Width := ScaleX(100);

        for i := 0 to e do
        begin
            ListItem := Items.Add;
            with ListItem do
            begin
                Caption := ReadyArray[i].DriveName;
                SubItems.Add(ReadyArray[i].DriveFileSystemName);
                SubItems.Add(BytesToSize(ReadyArray[i].DriveSize)); 
                SubItems.Add(Format('%s (%d%%)', [BytesToSize(ReadyArray[i].DriveFreeSize[0]), Round(ReadyArray[i].DriveFreeSize[1])]));
                SubItems.Add(ReadyArray[i].DriveType);
                ImageIndex := i;
            end;
        end;
    end;
end;


Sanarialerin 28-06-2016 20:01 2646291

Код:

#define AppNameHL    "Half-Life"
#define AppNameCS    "Counter-Strike"
#define AppVersion  "4554"
#define AppPublisher "Valve Corporation"
#define AppExeHL    "hl.exe"
#define AppExeCS     

[Setup]
AllowCancelDuringInstall=no
AppId={{F6E25E5E-3DDC-46AF-868A-C0057379351B}
AppName={#AppNameCS}
AppPublisher={#AppPublisher}
AppVerName={#AppNameCS}
AppVersion={#AppVersion}
Compression=lzma
DefaultDirName={pf}\{#AppNameHL}
DefaultGroupName={#AppNameHL}
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=yes
DisableWelcomePage=no
OutputBaseFilename=setup
SolidCompression=yes
UninstallDisplayIcon={app}\cstrike\cstrike.ico
UninstallDisplayName={#AppNameCS}

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "C:\DEV\HL\hl.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\DEV\HL\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\{#AppNameHL}"; Filename:"{app}\{#AppExeHL}"; Parameters:"-steam -appid 70";
Name: "{userdesktop}\{#AppNameHL}"; Filename:"{app}\{#AppExeHL}"; Parameters:"-steam -appid 70";

Name: "{group}\{#AppNameCS}"; Filename:"{app}\{#AppExeHL}"; WorkingDir:"{app}";IconFilename:"{app}\cstrike\cstrike.ico"; Parameters:"-game cstrike -steam -appid 10";
Name: "{userdesktop}\{#AppNameCS}"; Filename:"{app}\{#AppExeHL}"; WorkingDir:"{app}";IconFilename:"{app}\cstrike\cstrike.ico"; Parameters:"-game cstrike -steam -appid 10";


Ошибка при удалении
Внутренняя ошибка:Cannot find utCompiledCode record for this version of the uninstaller

Как исправить ?

P.S
Система установлена чистая
Inno Setup 5.5.9 Unicode

nik1967 28-06-2016 21:20 2646310

Sanarialerin, на сколько помню данную ошибку, не надо паковать unins000.dat и unins000.exe. Могу ошибаться.

Sanarialerin 28-06-2016 21:38 2646313

Цитата:

Цитата nik1967
на сколько помню данную ошибку, не надо паковать unins000.dat и unins000.exe. Могу ошибаться. »


Я вас понял,проверю еще раз.

Andrei_IW 29-06-2016 15:50 2646498

Подскажите а как в секцию DefaultDirName поместить свой адрес, сформированный cmd скриптом. А то язык который написан в секции code совсем не понятный.

Cocenalyanas 01-07-2016 17:13 2647249

Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "ExeName.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{7B21D215-88A3-4374-9530-2DCCA0E58863}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Test\ExeName.exe"; DestDir: "{app}"; Flags: ignoreversion  // Вот про это имею ввиду
Source: "C:\Test\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

Обязательна ли строка где указан путь к exe-файлу ?

Nordek 01-07-2016 20:06 2647289

Цитата:

Цитата Cocenalyanas
Обязательна ли строка где указан путь к exe-файлу ? »

В таком случае:
Код:

Source: C:\Test\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

с учётом, что файл ExeName.exe расположен по тому же адресу, то строку:
Код:

Source: C:\Test\ExeName.exe; DestDir: {app}; Flags: ignoreversion
можете беспрепятственно исключить.

Т.е при таком условии:
Код:

Source: C:\Test\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

всё содержимое каталога "Test" будет включено в инсталлятор. На выходе (т.е после инсталляции), файлы и структура каталогов в каталоге установки будет такой же как на данный момент у вас в каталоге "Test"

Но если решите отдельно определить отличное расположение для файла ExeName.exe, то строку нужно будет вернуть/добавить.

Cocenalyanas 01-07-2016 20:41 2647296

Цитата:

Цитата Nordek
Цитата Cocenalyanas:
Обязательна ли строка где указан путь к exe-файлу ? »
В таком случае:
Код:
Source: C:\Test\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
с учётом, что файл ExeName.exe расположен по тому же адресу, то строку:
Код:
Source: C:\Test\ExeName.exe; DestDir: {app}; Flags: ignoreversion
можете беспрепятственно исключить.
Т.е при таком условии:
Код:
Source: C:\Test\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
всё содержимое каталога "Test" будет включено в инсталлятор. На выходе (т.е после инсталляции), файлы и структура каталогов в каталоге установки будет такой же как на данный момент у вас в каталоге "Test"
Но если решите отдельно определить отличное расположение для файла ExeName.exe, то строку нужно будет вернуть/добавить. »

Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName1 "ExeName1.exe"
#define MyAppExeName2 "ExeName2.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{7B21D215-88A3-4374-9530-2DCCA0E58863}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Test\ExeName1.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Test\ExeName2.exe"; DestDir: "{app}"; Flags: ignoreversion 
Source: "C:\Test\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName2}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName2}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

Если exe-файлов несколько и на каждый из нужно создать ярлыки,должно быть вот так или по другому ?

Nordek 02-07-2016 04:07 2647371

Цитата:

Цитата Cocenalyanas
Код:

[Files]
Source: "C:\Test\ExeName1.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Test\ExeName2.exe"; DestDir: "{app}"; Flags: ignoreversion

Source: "C:\Test\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

»

В данном случае, лишнее зачеркнул.


Цитата:

Цитата Cocenalyanas
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName2}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName2}"; Tasks: desktopicon »

Для добавления ярлыков, исп. секция [Icons].

Пример:
Код:

[Icons]
Name: "{commonprograms}\{#MyAppName} 1"; Filename: "{app}\{#MyAppExeName1}"
Name: "{commonprograms}\{#MyAppName} 2"; Filename: "{app}\{#MyAppExeName2}"
Name: "{commondesktop}\{#MyAppName} 1"; Filename: "{app}\{#MyAppExeName1}"
Name: "{commondesktop}\{#MyAppName} 2"; Filename: "{app}\{#MyAppExeName2}"


Maleritanali 02-07-2016 15:35 2647447

HKEY_CURRENT_USER\Software\MyCompany
HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyCompany

Помогите пожалуйста,как можно удалить во время установки и во время деинсталляции ?

Dodakaedr 02-07-2016 19:44 2647491

Цитата:

Цитата Maleritanali
Помогите пожалуйста,как можно удалить во время установки и во время деинсталляции ? »

Код:

Root: HKCU; Subkey: "Software\MyCompany"; Flags: dontcreatekey deletekey uninsdeletekey
Root: HKLM64; Subkey: "Software\MyCompany"; Check: IsWin64; Flags: dontcreatekey deletekey uninsdeletekey
Root: HKLM32; Subkey: "Software\MyCompany"; Check: IsWin64; Flags: dontcreatekey deletekey uninsdeletekey
Root: HKLM32; Subkey: "Software\MyCompany"; Check: not IsWin64; Flags: dontcreatekey deletekey uninsdeletekey


Maleritanali 02-07-2016 21:10 2647518

Цитата:

Цитата Dodakaedr
Root: HKCU; Subkey: "Software\MyCompany"; Flags: dontcreatekey deletekey uninsdeletekey
Root: HKLM64; Subkey: "Software\MyCompany"; Check: IsWin64; Flags: dontcreatekey deletekey uninsdeletekey
Root: HKLM32; Subkey: "Software\MyCompany"; Check: IsWin64; Flags: dontcreatekey deletekey uninsdeletekey »

А как сделать вот это всё с помощью кода (Секция [code]) ?

Dodakaedr 02-07-2016 21:53 2647524

Цитата:

Цитата Maleritanali
А как сделать вот это всё с помощью кода (Секция [code]) ? »

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssInstall:
      begin
        If IsWin64 then RegDeleteKeyIncludingSubkeys(HKLM64, 'Software\MyCompany');
        RegDeleteKeyIncludingSubkeys(HKLM32, 'Software\MyCompany');
        RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MyCompany');
      end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  case CurUninstallStep of
    usUninstall:
      begin
        If IsWin64 then RegDeleteKeyIncludingSubkeys(HKLM64, 'Software\MyCompany');
        RegDeleteKeyIncludingSubkeys(HKLM32, 'Software\MyCompany');
        RegDeleteKeyIncludingSubkeys(HKCU, 'Software\MyCompany');
      end;
  end;
end;


Pagelorichaz 03-07-2016 11:26 2647595

Вложений: 1
Как сменить иконку и сообщение в MessageBox,чтобы вместо MB_ICONQUESTION было MB_ICONWARNING ?
Если что сморите скриншот!


Rhianarkipom 03-07-2016 17:00 2647665

Помогите исправить кнопку на странице приветствия (WelcomePage) вместо "Install" должно быть "Next"
Как сделать такое ?

Скрытый текст

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{07BF4756-493A-4A92-8C99-65465807D1B5}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

DisableDirPage=yes
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=yes
DisableStartupPrompt=yes
DisableWelcomePage=no
DisableFinishedPage=no

[Messages]
ButtonNext=Install

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[code]
var
MainPage : TWizardPage;
edtFolderToInstall : TEdit;
InstallLocation : String;

procedure BrowseClick(Sender : TObject);
var
Dir : String;
begin
Dir := edtFolderToInstall.Text;
if BrowseForFolder('Select Folder',Dir,false) then
edtFolderToInstall.Text := Dir;
end;

procedure InitializeWizard();
var
lblFolderToInstall : TLabel;
btnFolderToInstall : TButton;

begin
MainPage := CreateCustomPage(wpWelcome,'Setup - Test App Name','This will install "Test App Name" to your computer');
lblFolderToInstall := TLabel.Create(MainPage);
lblFolderToInstall.Parent := MainPage.Surface;
lblFolderToInstall.Top := 10;
lblFolderToInstall.Left := 10;
lblFolderToInstall.Caption := 'If you would like to select a different folder, Click Browse.'


edtFolderToInstall := TEdit.Create(MainPage);
edtFolderToInstall.Parent := MainPage.Surface;

edtFolderToInstall.Top := 40;
edtFolderToInstall.Left := 7;
edtFolderToInstall.Width := 321;
edtFolderToInstall.Text := WizardDirValue;


btnFolderToInstall := TButton.Create(MainPage);
btnFolderToInstall.Parent := MainPage.Surface;
btnFolderToInstall.Top := 38;
btnFolderToInstall.Left := 340;
btnfolderToInstall.Caption := 'Browse...';
btnFolderToInstall.OnClick := @BrowseClick;
end;

Dodakaedr 03-07-2016 21:02 2647699

Rhianarkipom,
удалите
Код:

[Messages]
ButtonNext=Install


ZVSRus 03-07-2016 21:28 2647707

Цитата:

Цитата Rhianarkipom
Помогите исправить кнопку на странице приветствия (WelcomePage) вместо "Install" должно быть "Next"

Код:

procedure CurPageChanged(CurPageID: Integer);
  begin
  case
CurPageID of
 
wpWelcome:
  begin
 
WizardForm.NextButton.Caption:= 'Далее'
  end;
 end;
end;


292944028 03-07-2016 22:14 2647718

del

Rhianarkipom 04-07-2016 12:40 2647859

Цитата:

Цитата ZVSRus
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpWelcome:
begin
WizardForm.NextButton.Caption:= 'Далее'
end;
end;
end; »

Если удалить секцию [Messages] вместо "Install" становиться "Next"
Извините меня, не полностью вопрос вчера описал

Вопрос:
На странице приветствия должна быть кнопка "Next", где выбор папки там должна быть кнопка "Install"
Вот этот код полностью игнорирует: WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall) - Установщик будет мультиязычный (несколько языков)

Помогите пожалуйста мне сделать

Скрытый текст

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{07BF4756-493A-4A92-8C99-65465807D1B5}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

DisableDirPage=yes
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=yes
DisableStartupPrompt=yes
DisableWelcomePage=no
DisableFinishedPage=no

[Messages]
ButtonNext=Install

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[code]
var
MainPage : TWizardPage;
edtFolderToInstall : TEdit;
InstallLocation : String;

procedure BrowseClick(Sender : TObject);
var
Dir : String;
begin
Dir := edtFolderToInstall.Text;
if BrowseForFolder('Select Folder',Dir,false) then
edtFolderToInstall.Text := Dir;
end;

procedure InitializeWizard();
var
lblFolderToInstall : TLabel;
btnFolderToInstall : TButton;

begin
MainPage := CreateCustomPage(wpWelcome,'Select Destination Location','Where should {#MyAppName} be installed ?');
lblFolderToInstall := TLabel.Create(MainPage);
lblFolderToInstall.Parent := MainPage.Surface;
lblFolderToInstall.Top := 10;
lblFolderToInstall.Left := 10;
lblFolderToInstall.Caption := 'If you would like to select a different folder, Click Browse.'

edtFolderToInstall := TEdit.Create(MainPage);
edtFolderToInstall.Parent := MainPage.Surface;

edtFolderToInstall.Top := 40;
edtFolderToInstall.Left := 7;
edtFolderToInstall.Width := 321;
edtFolderToInstall.Text := WizardDirValue;

btnFolderToInstall := TButton.Create(MainPage);
btnFolderToInstall.Parent := MainPage.Surface;
btnFolderToInstall.Top := 38;
btnFolderToInstall.Left := 340;
btnfolderToInstall.Caption := 'Browse...';
btnFolderToInstall.OnClick := @BrowseClick;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpWelcome:
begin
WizardForm.NextButton.Caption:= 'Next >';
end;
end;
end;

Dodakaedr 04-07-2016 14:05 2647881

Цитата:

Цитата Rhianarkipom
На странице приветствия должна быть кнопка "Next", где выбор папки там должна быть кнопка "Install" »

Скрытый текст
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{07BF4756-493A-4A92-8C99-65465807D1B5}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

DisableDirPage=yes
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=yes
DisableStartupPrompt=yes
DisableWelcomePage=no
DisableFinishedPage=no

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

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[code]
var
MainPage : TWizardPage;
edtFolderToInstall : TEdit;
InstallLocation : String;

procedure BrowseClick(Sender : TObject);
var
Dir : String;
begin
Dir := edtFolderToInstall.Text;
if BrowseForFolder('Select Folder',Dir,false) then
edtFolderToInstall.Text := Dir;
end;

procedure InitializeWizard();
var
lblFolderToInstall : TLabel;
btnFolderToInstall : TButton;

begin
MainPage := CreateCustomPage(wpWelcome,'Select Destination Location','Where should {#MyAppName} be installed ?');
lblFolderToInstall := TLabel.Create(MainPage);
lblFolderToInstall.Parent := MainPage.Surface;
lblFolderToInstall.Top := 10;
lblFolderToInstall.Left := 10;
lblFolderToInstall.Caption := 'If you would like to select a different folder, Click Browse.'

edtFolderToInstall := TEdit.Create(MainPage);
edtFolderToInstall.Parent := MainPage.Surface;

edtFolderToInstall.Top := 40;
edtFolderToInstall.Left := 7;
edtFolderToInstall.Width := 321;
edtFolderToInstall.Text := WizardDirValue;

btnFolderToInstall := TButton.Create(MainPage);
btnFolderToInstall.Parent := MainPage.Surface;
btnFolderToInstall.Top := 38;
btnFolderToInstall.Left := 340;
btnfolderToInstall.Caption := 'Browse...';
btnFolderToInstall.OnClick := @BrowseClick;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
MainPage.ID:
begin
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
end;
end;
end;


Rhianarkipom 04-07-2016 14:54 2647899

Вложений: 2
Как создать Label в окне выбора папки, и сменить заголовок окна "Обзор папок" ?

nik1967 04-07-2016 22:00 2648011

Rhianarkipom, не понятно и не информативно.

Rhianarkipom 05-07-2016 11:51 2648135

Цитата:

Цитата nik1967
Rhianarkipom, не понятно и не информативно »

Я имел ввиду : Нужно сделать как на скриншоте

Смотрите скриншот!
http://forum.oszone.net/attachment.p...8&d=1467633076


Скрытый текст
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{56AC41C4-C68E-4E95-89A2-98EBF2F72921}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableWelcomePage=no
DisableReadyMemo=yes
DisableReadyPage=yes
DisableFinishedPage=no
DisableDirPage=yes
DisableStartupPrompt=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
;Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";

[code]
var
MainPage : TWizardPage;
edtFolderToInstall : TEdit;
InstallLocation : String;

procedure BrowseClick(Sender : TObject);
var
Dir : String;
begin
Dir := edtFolderToInstall.Text;
if BrowseForFolder('Select а folder in the list below, then click OK.',Dir,false) then
edtFolderToInstall.Text := Dir;
end;

procedure InitializeWizard();
var
lblFolderToInstall : TLabel;
btnFolderToInstall : TButton;

begin
MainPage := CreateCustomPage(wpWelcome,'Select Destination Location','Where should {#MyAppName} be installed ?');
lblFolderToInstall := TLabel.Create(MainPage);
lblFolderToInstall.Parent := MainPage.Surface;
lblFolderToInstall.Top := 10;
lblFolderToInstall.Left := 10;
lblFolderToInstall.Caption := 'If you would like to select a different folder, Click Browse.'

edtFolderToInstall := TEdit.Create(MainPage);
edtFolderToInstall.Parent := MainPage.Surface;

edtFolderToInstall.Top := 40;
edtFolderToInstall.Left := 7;
edtFolderToInstall.Width := 321;
edtFolderToInstall.Text := WizardDirValue;

btnFolderToInstall := TButton.Create(MainPage);
btnFolderToInstall.Parent := MainPage.Surface;
btnFolderToInstall.Top := 38;
btnFolderToInstall.Left := 340;
btnfolderToInstall.Caption := 'Browse...';
btnFolderToInstall.OnClick := @BrowseClick;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
MainPage.ID:
begin
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall);
end;
end;
end;


vadjliss 09-07-2016 08:53 2649195

как закрепить ярлык на панели задач

ZVSRus 09-07-2016 10:59 2649213

Цитата:

Цитата vadjliss
как закрепить ярлык на панели задач

Пример от saurn
Скрытый текст
Код:

#define MyAppName "MyProg"
 #define MyAppVersion "1.5"
 #define MyAppExeName "MyProg.exe"

[Setup]
AppId={{C3296BC8-00E4-4112-A1FB-4E710F84662C}
 AppName={#MyAppName}
 
AppVersion={#MyAppVersion}
 
;AppVerName={#MyAppName} {#MyAppVersion}
 
DefaultDirName={pf}\{#MyAppName}
 
DefaultGroupName={#MyAppName}
 
DisableProgramGroupPage=yes
 OutputBaseFilename=setup
 Compression=lzma
 SolidCompression=yes

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

[Files]
Source: "C:\Program Files (x86)\Inno Setup v.5.5.1\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[ Code]
const                                                                                                       
   
LOAD_LIBRARY_AS_DATAFILE = $2;                                                                         
                                                                                                             
#define A = (Defined UNICODE) ? "W" : "A"
                                                                                                           
function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
                                                                                                             
function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;                                   
// szFilename : full path to executable file                                                                 
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar                                           
var                                                                                                         
   
hInst: THandle;                                                                                         
    buf: array [0..255] of Char;                                                                             
    i, res: Integer;                                                                                         
    strLnk, strVerb: String;                                                                                 
    objShell, colVerbs: Variant;                                                                             
begin                                                                                                       
   
Result := False;                                                                                         
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }         
                                                                                                             
    { String resources }                                                                                     
   
if IsPin then                                                                                           
    begin                                                                                                   
        if
SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then                       
        begin                                                                                               
            while
buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);       
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;                                                                                                 
        res := 5386;        { Pin to Tas&kbar }                                                             
   
end else res := 5387;  { Unpin from Tas&kbar }                                                         
                                                                                                             
  { Load string resource }                                                                                   
 
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);                 
  if hInst <> 0 then                                                                                         
  try                                                                                                       
    for
i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);                   
    try                                                                                                     
     
objShell := CreateOleObject('Shell.Application');                                                     
      colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
      for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then               
      begin                                                                                                 
         
colVerbs.Item[i].DoIt;                                                                             
          Result := True;                                                                                   
          Break;                                                                                             
      end;                                                                                                   
      except                                                                                                 
       
Exit;                                                                                               
      end;                                                                                                   
  finally                                                                                                   
     
FreeDLL(hInst);                                                                                       
  end;                                                                                                       
end;                                                                                                       

procedure CurStepChanged(CurStep: TSetupStep);                                                                               
var                                                                                                                         
 
ResultCode: Integer;                                                                                                       
  r: integer;                                                                                                               
begin                                                                                                                       
  case
CurStep of                                                                                                           
   
ssPostInstall:                                                                                                           
    begin                                                                                                                   
   
PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
    end;                                                                                                                   
  end;                                                                                                                       
end;                                                                                                                         
                                                                                                                             
Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);                                                         
                                                                                                                             
{ UnPin }                                                                                                                   
begin                                                                                                                       
  case
CurUninstallStep of                                                                                                   
     
usUninstall: PinToTaskbar( ExpandConstant( '{app}\MyProg.exe' ), False );
  end;                                                                                                                       
end;

                                                                                                                         


Nordek 09-07-2016 21:52 2649329

Цитата:

Цитата Rhianarkipom
Как создать Label в окне выбора папки, и сменить заголовок окна "Обзор папок" ? »

Не понятно. Вам на странице SelectDirPage под DirEdit нужно окно для выбора месторасположения установки?

Пример:
Код:

#define AppName "My Program"

[Setup]
AppName={#AppName}
AppVersion=1.5
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Code]
var
 WTV_Window: TFolderTreeView;

procedure WTV_WindowChange(Sender: TObject);
begin
 WizardForm.DirEdit.Text:=AddBackslash(WTV_Window.Directory) + '{#AppName}'
end;

procedure InitializeWizard();
begin
  WTV_Window := TFolderTreeView.Create(WizardForm);
  with WTV_Window do
  begin

    Parent := WizardForm.SelectDirPage;
    SetBounds(ScaleX(0), ScaleY(96), ScaleX(417), ScaleY(113));
    OnChange := @WTV_WindowChange;
  end;
end;


vadjliss 10-07-2016 07:56 2649379

ребята подскажите как сделать что бы компонент был включен как на скрине у меня стоят компоненты через Tasks

vint56 10-07-2016 09:38 2649386

vadjliss,
Пример

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup

[Tasks]
Name: ProgFiles; Description: Program Files
Name: HelpFile; Description: Help File
Name: ReadmeFile; Description: Readme File
Name: ReadmeFile\1; Description: English; Flags: exclusive
Name: ReadmeFile\2; Description: German; Flags: exclusive

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
//Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectTasks then
begin
WizardForm.TasksList.Checked[0] := True;
WizardForm.TasksList.Checked[3] := True;
WizardForm.TasksList.ItemEnabled[0] := False;
WizardForm.TasksList.TreeViewStyle := True;
WizardForm.TasksList.ShowLines := True;
end;
end;


vadjliss 10-07-2016 09:57 2649391

У меня вот так
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup

[Files]
Source: soft\Microsoft Visual C++.exe; DestDir: {tmp}; Tasks: fbrinst; Flags: deleteafterinstall
Source: soft\NET Framework 4.5.2(онлайн-установка).exe; DestDir: {tmp}; Tasks: aaa; Flags: deleteafterinstall
Source: soft\NET Framework 4.6(онлайн-установка).exe; DestDir: {tmp}; Tasks: ddd; Flags: deleteafterinstall
Source: soft\DirectX (онлайн-установка).exe; DestDir: {tmp}; Tasks: bbb; Flags: deleteafterinstall


[Tasks]
Name: fbrinst; Description: "Microsoft Visual C++"
Name: aaa; Description: "NET Framework 4.5.2(онлайн-установка)"
Name: ddd; Description: "NET Framework 4.6(онлайн-установка)"
Name: bbb; Description: "DirectX (онлайн-установка)"

[Run]
Filename: {tmp}\Microsoft Visual C++.exe; Description: "Launch Firebird Setup"; Tasks: fbrinst
Filename: {tmp}\NET Framework 4.5.2(онлайн-установка).exe; Description: "Launch Firebird Setup"; Tasks: aaa
Filename: {tmp}\NET Framework 4.6(онлайн-установка).exe; Description: "Launch Firebird Setup"; Tasks: ddd
Filename: {tmp}\DirectX (онлайн-установка).exe; Description: "Launch Firebird Setup"; Tasks: bbb

Nordek 10-07-2016 10:09 2649395

vadjliss,
Пример:
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"


[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup

[Files]
Source: soft\Microsoft Visual C++.exe; DestDir: {tmp}; Tasks: fbrinst; Flags: deleteafterinstall
Source: soft\NET Framework 4.5.2(онлайн-установка).exe; DestDir: {tmp}; Tasks: aaa; Flags: deleteafterinstall
Source: soft\NET Framework 4.6(онлайн-установка).exe; DestDir: {tmp}; Tasks: ddd; Flags: deleteafterinstall
Source: soft\DirectX (онлайн-установка).exe; DestDir: {tmp}; Tasks: bbb; Flags: deleteafterinstall

[Tasks]
Name: fbrinst; Description: Microsoft Visual C++
Name: aaa; Description: NET Framework 4.5.2(онлайн-установка)
Name: ddd; Description: NET Framework 4.6(онлайн-установка)
Name: bbb; Description: DirectX (онлайн-установка)

[Run]
Filename: {tmp}\Microsoft Visual C++.exe; Description: Launch Firebird Setup; Tasks: fbrinst
Filename: {tmp}\NET Framework 4.5.2(онлайн-установка).exe; Description: Launch Firebird Setup; Tasks: aaa
Filename: {tmp}\NET Framework 4.6(онлайн-установка).exe; Description: Launch Firebird Setup; Tasks: ddd
Filename: {tmp}\DirectX (онлайн-установка).exe; Description: Launch Firebird Setup; Tasks: bbb

[Code]
procedure CurPageChanged(CurPageID: Integer);
 begin
 if
CurPageID = wpSelectTasks then
    begin
     
WizardForm.TasksList.Checked[0] := True;
      WizardForm.TasksList.ItemEnabled[0] := False;
      WizardForm.TasksList.Checked[2] := True;
      WizardForm.TasksList.ItemEnabled[2] := False;
    end;
end;

Также обратите внимание на сообщение #1613, коллега vint56 поправил пример.


vadjliss, Пользуйтесь тегом [CODE][/CODE] для оформления кодов Inno Setup.

Bajuyngaonau 13-07-2016 17:34 2650529

Скрытый текст
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{C5AD9121-9AE4-48DB-9913-539017B5EF4D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableWelcomePage=no
DisableReadyMemo=yes
DisableReadyPage=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon


[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpSelectDir) or (CurPageID = wpReady) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)
else if (CurPageID = wpFinished) then
WizardForm.NextButton.Caption := SetupMessage(msgButtonFinish)
else
WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
end;

const
MF_BYCOMMAND = $00000000;
MF_BYPOSITION = $00000400;

type
HMENU = THandle;

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: HMENU; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetMenuItemCount(hMenu: HMENU): Integer; external 'GetMenuItemCount@user32.dll stdcall';

procedure InitializeWizard;
var
SystemMenu: HMENU;
begin
SystemMenu := GetSystemMenu(WizardForm.Handle, False);
DeleteMenu(SystemMenu, 9999, MF_BYCOMMAND);
DeleteMenu(SystemMenu, GetMenuItemCount(SystemMenu)-1, MF_BYPOSITION);
end;



Куда лучше вставить эту строку : WizardForm.SelectDirBrowseLabel.Caption:= 'To continue, click Install. If you would like to select a different folder, click Browse.'; ?

P.S
Знаю что можно использовать секцию [Messages], но мне нужно чтобы было в секции [code]

ZVSRus 13-07-2016 18:31 2650555

Цитата:

Цитата Bajuyngaonau
Куда лучше вставить эту строку

Вставьте после begin в procedure InitializeWizard;

Bajuyngaonau 13-07-2016 19:05 2650577

Цитата:

Цитата ZVSRus
Вставьте после begin в procedure InitializeWizard; »

Спасибо, в таком случаи буду использовать секцию [Message] от нужны чтобы не мешать код :) :

А не скажите как сделать чтобы этот код был юникодным (Преобразовать из ANSI в Unicode) ?

ZVSRus 13-07-2016 19:40 2650588

Цитата:

Цитата Bajuyngaonau
А не скажите как сделать чтобы этот код был юникодным (Преобразовать из ANSI в Unicode) ?

У меня ANSI. Как преобразовать ANSI в Unicode не знаю, так-как данные действия меня не интересовали.

Nordek 14-07-2016 03:40 2650669

Цитата:

Цитата Bajuyngaonau
как сделать чтобы этот код был юникодным »

Используете AkelPad.
Код:

"C:\Program Files\AkelPad\AkelPad.exe" /OpenFile("Input_ISScript.iss", 1251) /SaveFile("Output_ISScript.iss", 65001, 1) /Quit
Цитата:

Цитата Bajuyngaonau
А не скажите как сделать чтобы этот код был юникодным (Преобразовать из ANSI в Unicode) ? »

Опять от вас пользователей никакой информации.
Выдавая предложение "Преобразовать из ANSI в Unicode", какую цель преследуете?
Если для галочки, то данное действие вам ненужно т.к программа Inno версии Ansi не понимает Unicode - иначе в Inno на выходе вместо этого, получите вот это.

ZVSRus 14-07-2016 09:17 2650723

Вложений: 3
Цитата:

Цитата Bajuyngaonau
А не скажите как сделать чтобы этот код был юникодным (Преобразовать из ANSI в Unicode) ?

Преобразовать из ANSI в Unicode до вчерашнего дня не интересовало, сегодня решил на данном вопросе остановиться по-подробнее. Преобразовывать из ANSI в Unicode никого смысла нет так-как InnoSetup Unicode понимает обе кодировки, InnoSetup ANSI только свою ANSI кодировку. Соглашусь с Nordek'ом многие не понимают какую цель преследуете?.
Но все-же если вас интересует преобразование кодировок, то в комплекте с расширенной версией InnoSetup идет Inno Script Studio , в которой можно преобразовывать. Авто (ANSI или UTF-8) для обеих версий Inno, (UTF-8) только для Unicode версии.

Bajuyngaonau1 14-07-2016 15:28 2650852

Цитата:

Цитата Nordek
Опять от вас пользователей никакой информации.
Выдавая предложение "Преобразовать из ANSI в Unicode", какую цель преследуете?
Если для галочки, то данное действие вам ненужно т.к программа Inno версии Ansi не понимает Unicode - иначе в Inno на выходе вместо этого, получите вот это. »

Я "хозяин" вопроса , данные аккаунта утерял!

Использую только Inno Setup Unicode!
Без AkelApad это что невозможно сделать ?

P.S
Нужно только средствами Inno Setup Unicode это сделать !

Bajuyngaonau1 14-07-2016 17:27 2650930

Вот это имею ввиду

Вот это нужно чтобы приложение было полностью юникодным (чтобы не было всяких "иероглифов")
https://msdn.microsoft.com/ru-ru/library/dybsewaf.aspx
https://msdn.microsoft.com/en-us/library/2dax2h36.aspx

Примерно тоже самое хочу сделать в Inno Setup Unicode

P.S
Если есть Inno Setup Unicode значит должен быть способ как сделать установщик с полной поддержкой юникода (По умолчанию там используеться код ANSI)


А всякие способы которые вы предлагаете сделать с помощью AkelPad они без смысленны, то есть без смысленное занятие "пустой" работой
Вы хоть видели приложение юникодное на C++ (вот эти ссылки они показывают как писать с ипользованием юникода)?
Та и тем более это ваш "AkelPad" не понятно кто разрабатывает все кому не трудно, так что такой вызывает негатив.

habib2302 14-07-2016 23:01 2651028

Доброе время суток. Извините, что задаю вопрос повторно т.к. лень искать подобное сообщение
Как организовать страницу компонентов заменив SelectComponentsPage и при этом чтобы компоненты остались компонентами и чтобы лишние компоненты становились неактивны и снимались галочки в зависимости от компонента

vint56 17-07-2016 16:45 2651647

habib2302,
http://rgho.st/7nj6p9ZHL

El Sanchez 18-07-2016 20:15 2651966

Цитата:

Цитата Bajuyngaonau1
Вот это нужно чтобы приложение было полностью юникодным (чтобы не было всяких "иероглифов") »

Bajuyngaonau1, а что не так? Юникодная версия Inno Setup делает юникодную версию установщика. Проблема лишь с заданием юникодных строковых литералов, но это не проблема самой Inno Setup, а используемого в ней скриптового движка ROPS:
Цитата:

Цитата Help\Other information\Unicode Inno Setup
The new RemObjects PascalScript version used by the Unicode compiler supports Unicode, but not for its input source. This means it does use Unicode string types as said, but any literal Unicode characters in the script will be converted to ANSI. This doesn't mean you can't display Unicode strings: you can for example instead use encoded Unicode characters to build Unicode strings (like S := #$0100 + #$0101 + 'Aa';), or load the string from a file using LoadStringsFromFile, or use a {cm:...} constant.


vadjliss 22-07-2016 19:41 2653329

Вложений: 2
парни помогите хочу сделать инсталятор как Ashampoo
картинка

может кто то на подобие знает или со скриптом помогите
вот скрипт от Ashampoo
очень надо

Bajuyngaonau1 26-07-2016 11:53 2654203

Цитата:

Цитата El Sanchez
а что не так? Юникодная версия Inno Setup делает юникодную версию установщика. Проблема лишь с заданием юникодных строковых литералов, но это не проблема самой Inno Setup, а используемого в ней скриптового движка ROPS: »

Как сделать что я хочу ?


P.S
В Делфи они есть, и здесь должны быть!

dimantv_wot@vk 28-07-2016 13:18 2654835

Вложений: 1
Парни помогите давно не делал установщик с описанием и с картинками, вроде все правильно пути а ошибка (((

Nordek 28-07-2016 19:11 2654995

dimantv_wot@vk, Сообщение изображённое на снимке экрана, прямым текстом так и оповещает: Имя пользовательского сообщения неизвестно.

dimantv_wot@vk, Теперь у меня вопрос: Так и есть в действительности "AddCompDescription (3, CustomMessage('CompDescПрицел Дамоклов Меч'),..."? Или всё-таки после CompDesc пишется что-то другое?

Представлю наглядный пример:
Код:

[CustomMessages]
MyText=Сообщение

Правильно:
Код:

    Caption := CustomMessage ('MyText');
Не правильно:
Код:

    Caption := CustomMessage ('МойText');

dimantv_wot@vk 28-07-2016 21:04 2655018

Nordek, Попробую по другому

dimantv_wot@vk 29-07-2016 20:57 2655400

Как убрать тут галочки: Name: tweaker; Description: Wot Tweaker; Flags: dontinheritcheck , парни помогите пожалуйста

Zasanialhodda 29-07-2016 21:26 2655406

Как сделать чтобы можно было запустить только одну копию установщика без вывода сообщений ?

El Sanchez 01-08-2016 12:16 2655894

Цитата:

Цитата Zasanialhodda
Как сделать чтобы можно было запустить только одну копию установщика без вывода сообщений ? »

Zasanialhodda, пример:
Скрытый текст

Код:

#define AppMutex "MySuperPuperMutexUniqueName"

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}\test
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
function WINAPI_CreateMutex(lpMutexAttributes: Longint; bInitialOwner: BOOL; lpName: string): THandle; external 'CreateMutex{#A}@kernel32.dll stdcall';
function ReleaseMutex(hMutex: THandle): BOOL; external 'ReleaseMutex@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';

const
 
ERROR_ACCESS_DENIED = $0005;
  ERROR_ALREADY_EXISTS = $00B7;

var
 
GMutex: THandle;

//////////////////////////////////
function InitializeSetup: Boolean;
var
 
L: Longint;
begin
 
GMutex := WINAPI_CreateMutex(0, False, '{#AppMutex}');
  L := DLLGetLastError;
  if (GMutex = 0) or (L = ERROR_ACCESS_DENIED) then
   
RaiseException(SysErrorMessage(L));
  Result := L <> ERROR_ALREADY_EXISTS;
end;

////////////////////////////
procedure DeinitializeSetup;
begin
  if
GMutex <> 0 then
  begin
   
ReleaseMutex(GMutex);
    CloseHandle(GMutex);
    GMutex := 0;
  end;
end;


AlexanderSergeev 01-08-2016 16:34 2655956

Вложений: 1
Как грузить маску из потока без создания дополнительных файлов в темпе?
При компиляции скрипта требуется расширенная китайская версия от Restools.

Большое спасибо El Sanchez за предоставленный скрипт.

Nhameyarnkelf 01-08-2016 17:00 2655962

Как сделать такое сообщение на кнопке "Отмена" ?

dimantv_wot@vk 02-08-2016 12:59 2656142

Как убрать тут галочки: Name: tweaker; Description: Wot Tweaker; Flags: dontinheritcheck , парни помогите пожалуйста

AlekseyPopovv 02-08-2016 19:12 2656234

del

vadjliss 02-08-2016 21:15 2656272

ребята подскажите скрипт вот на такую форму инсталлятора и что бы кнопка закрытия не была активной


и ещё полный скрипт распаковки FreeArc
а то я его что то не нашёл
с меня +

dimantv_wot@vk 04-08-2016 12:39 2656814

Как сделать что бы после установки файлов была папка где можно удалить установщик

vadjliss 05-08-2016 17:38 2657201

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

AlekseyPopovv 06-08-2016 10:56 2657342

Как сделать привязку через code?
Скрытый текст

vint56 06-08-2016 14:30 2657382

AlekseyPopovv,
Пример

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Files]
;Source: compiler:Examples\Readme.txt; DestDir: {app}\1; Check: IsChecked(1)
;Source: compiler:Examples\Readme.txt; DestDir: {app}\2; Check: IsChecked(2)

[Icons]
//0
Name: "{commondesktop}\Версия 1.1.0.0 (рекомендуется)"; Filename: "{app}\MyProg.exe"; Check: IsChecked(1)
Name: "{commondesktop}\Версия 1.1.0.1"; Filename: "{app}\MyProg.exe"; Check: IsChecked(2)
Name: "{commondesktop}\Версия 1.1.0.5"; Filename: "{app}\MyProg.exe"; Check: IsChecked(3)
Name: "{commondesktop}\Версия 1.1.0.7"; Filename: "{app}\MyProg.exe"; Check: IsChecked(4)
Name: "{commondesktop}\Версия 1.1.0.8"; Filename: "{app}\MyProg.exe"; Check: IsChecked(5)

Name: "{commondesktop}\Haali Matroska Muxer 2013.04.14"; Filename: "{app}\MyProg.exe"; Check: IsChecked(6)
Name: "{commondesktop}\Surcode DTS Encoder 1.0.29.0"; Filename: "{app}\MyProg.exe"; Check: IsChecked(7)
Name: "{commondesktop}\Nero AAC Encoder 1.5.4.0"; Filename: "{app}\MyProg.exe"; Check: IsChecked(8)
Name: "{commondesktop}\Nero Audio Decoder 7"; Filename: "{app}\MyProg.exe"; Check: IsChecked(9)
Name: "{commondesktop}\Sonic Audio Decoder 4.3.0.169"; Filename: "{app}\MyProg.exe"; Check: IsChecked(10)

[code]
var
TasksPage,TasksPage2: TWizardPage;
CheckListBox,CheckListBox2: TNewCheckListBox;
BorderWidth,BorderWidth2: Integer;

function IsChecked(const Index: Integer): Boolean;
begin
Result:= CheckListBox.Checked[Index]
end;

procedure InitializeWizard();
begin
TasksPage := CreateCustomPage(wpWelcome, 'Выберите дополнительные задачи', 'Какие дополнительные задачи необходимо выполнить?');
CheckListBox := TNewCheckListBox.Create(WizardForm);
CheckListBox.Parent := TasksPage.Surface;
CheckListBox.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(210));
BorderWidth := (CheckListBox.Width-CheckListBox.ClientWidth) div 2;
CheckListBox.Flat := False;
CheckListBox.Color := clMenu;
CheckListBox.BorderStyle := bsNone;
CheckListBox.WantTabs :=True;

CheckListBox.AddCheckBoxEx('ArcSoft DTS decoder', '', 0, True, True, True, True, nil, True);
CheckListBox.AddRadioButtonEx('Версия 1.1.0.0 (рекомендуется)', '', 1, True, True, nil, False);
CheckListBox.AddRadioButtonEx('Версия 1.1.0.1', '', 1, False, True, nil, True);
CheckListBox.AddRadioButtonEx('Версия 1.1.0.5', '', 1, False, True, nil, True);
CheckListBox.AddRadioButtonEx('Версия 1.1.0.7', '', 1, False, True, nil, True);
CheckListBox.AddRadioButtonEx('Версия 1.1.0.8', '', 1, False, True, nil, True);

CheckListBox.AddCheckBoxEx('Haali Matroska Muxer 2013.04.14', '', 0, True, True, True, True, nil,True);
CheckListBox.AddCheckBoxEx('Surcode DTS Encoder 1.0.29.0', '', 0,True, True, True, True, nil,True);
CheckListBox.AddCheckBoxEx('Nero AAC Encoder 1.5.4.0', '', 0, True, True, True, True, nil,True);
CheckListBox.AddCheckBoxEx('Nero Audio Decoder 7', '', 0,True, True, True, True, nil,True);
CheckListBox.AddCheckBoxEx('Sonic Audio Decoder 4.3.0.169', '', 0, True, True, True, True, nil,True);
end;

AlekseyPopovv 06-08-2016 17:10 2657408

vint56, Спасибо :up У меня есть этот код, только вот почему то "[Index]" потерялось :lol:

valyok666 07-08-2016 18:47 2657661

Доброго времени суток =) Такой вопрос люди добрые,Inno Setup Ultra ещё есть?Или проект уже закрылся?

dimantv_wot@vk 08-08-2016 23:56 2657972

Как сделать при запуске установщика всплывчатое лого

ZVSRus 09-08-2016 08:41 2658015

Вложений: 1
dimantv_wot@vk
Цитата:

Как сделать при запуске установщика всплывчатое лого

dimantv_wot@vk 09-08-2016 09:46 2658034

Как можно в установщике прописать отдельный путь к распаковки удаления инсталлятора

dimantv_wot@vk 09-08-2016 10:06 2658039

ZVSRus, А на Юникоде как сделать что бы работало ?

ZVSRus 09-08-2016 10:59 2658064

Цитата:

Цитата dimantv_wot@vk
А на Юникоде как сделать что бы работало

У меня ANSI (видно в подписи), на Юникоде не проверял, так-как нету Юникоде и как сделать не знаю.

PS. Если у вас InnoSetup Ultra Unicode, тогда попробуй так: В папке куда установлена InnoSetup Ultra есть папка Dll Examples в ней папка Isgsg [0.6.0.69] данный пример работает и на Unicode

vint56 09-08-2016 11:07 2658068

dimantv_wot@vk,
procedure ShowSplashScreen(p1:HWND;p2:Ansistring;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

dimantv_wot@vk 10-08-2016 09:57 2658366

vint56, спс большое работает

Парни помогите! давно хотел сделать как после установке модификации, сделать в папке этой папку отдельную где можно удалить модификации.

1SPY 10-08-2016 13:18 2658436

Здравствуйте!

Наверное уже не раз спрашивали, потому простите если глупый вопрос.

Как реализовать проверку наличия логического диска D с последующей установкой программы в D:\someprogram, если же диск разбит только на один раздел C - тогда установка в C:\Program Files\someprogram?

vadjliss 10-08-2016 19:43 2658597

имеется скрипт в нём сначала устанавливается программа
затем я хочу сделать что бы в папку с установленной программой установились отдельные файлы на замену оригинальным
может кто посоветует как сделать
Скрипт
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"

[Setup]
AppId={{F43A5908-7E02-4CD6-83BB-DA2F084AAF51}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
CreateAppDir=no
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Files]
/////////////// перенос файла в установленную программу //////////////////////
Source: C:\Photo Stamp Remover 8.3\Photo Stamp Remover.exe; DestDir: "{app}\TeamViewer"
///////// запуск программы ///////////////
Source: C:\TeamViewer Corporate 11.0.64630 Multilingual + Portable\TeamViewer.exe; DestDir: {tmp};

[Run]
Filename: {tmp}\TeamViewer.exe; Description:


dimantv_wot@vk 11-08-2016 13:02 2658811

Парни помогите! давно хотел сделать как после установке модификации, сделать в папке этой папку отдельную где можно удалить модификации.

qwea234 17-08-2016 15:56 2660757

Здравствуйте, подскажите пожалуйста, как сделать прозрачность при переносе инсталлятора по рабочему столу ?

это не реклама - сегодня скачал игру Sniper Blacklist - очень понравилось как он затухает и становится прозрачным, когда перетаскиваешь по экрану.. (меняешь позицию расположения окна на рабочем столе..)

AlexanderSergeev 21-08-2016 12:28 2661860

Вложений: 1
Как отобразить кастомный курсор без выгрузки файла на диск?
Благодарю за помощь автора скрипта El Sanchez.

qwea234 24-08-2016 12:48 2662776

АП, как сделать прозрачность инсталлятора, когда перетаскиваешь окно по рабочему столу..

vovann01 01-09-2016 14:48 2664845

Ребят, у меня ещё такой вопрос:

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

Я в общем не понимаю что и как. Спасибо.

El Sanchez 01-09-2016 20:31 2664945

Цитата:

Цитата vovann01
В общем мне нужен код, который спрашивал имя компа, и относительно имени "Вася" или "Маша" (условно), "Васе"- ставил одни файлы, "Маше" другие. »

vovann01,
Скрытый текст

Код:

[Files]
Source: vasya.txt; DestDir: {app}; Check: IsComputerName('Vasya')
Source: masha.txt; DestDir: {app}; Check: IsComputerName('Masha')

[Code]
function IsComputerName(Name: string): Boolean;
begin
 
Result := CompareText(Name, GetComputerNameString) = 0;
end;


Banan330 02-09-2016 09:59 2665090

Хрень,надо так

Скрытый текст

[Files]
Source: {#MyAppSource}\*.*; DestDir: {#OutputDir}\Vasya
Source: {#MyAppSource}\*.*; DestDir: {#OutputDir}\Masha

[Run]
Filename: "{cmd}"; Parameters: "/c if /i ""%computername%"" == ""123"" (xcopy /e /y ""{#OutputDir}\Vasya\*.txt"" ""{#MyAppName}\Vasya\"" )";
Filename: "{cmd}"; Parameters: "/c if /i ""%computername%"" == ""123"" (xcopy /e /y ""{#OutputDir}\Masha\*.txt"" ""{#MyAppName}\Masha\"" )";

ZVSRus 02-09-2016 14:33 2665179

Всем Доброго времени суток. У кого есть код для командных файлов (.cmd):

"Setup.exe" /VERYSILENT /I /RU
"Setup.exe" /VERYSILENT /I /EN
"Setup.exe" /VERYSILENT /P

Решение найдено.

Последняя загвоздка с прописыванием пути "setup.exe" /VERYSILENT /P /D="D:\MyPortable".

El Sanchez 02-09-2016 16:50 2665229

Цитата:

Цитата Banan330
Хрень,надо так »

Banan330, т.е. давайте плодить файлы сначала в {#OutputDir}, а потом героически копировать оттуда нужные в {#MyAppName}, зная, что деинсталлятору во время удаления про файлы из {#MyAppName} ничего не будет известно. А потом - чё это у меня файлы остаются после удаления?

vadjliss 11-09-2016 07:37 2667533

парни помогите со скриптом распаковка FreeArc
если можно то наглядный скрипт что куда прописывать
прочитал много но не догнал что и как
заранее спасибо.

Habetdin 11-09-2016 21:35 2667713

El Sanchez, да, и Check - это уже не модно :jester:

vadjliss, ссылка на пример скрипта дана в шапке темы, что конкретно непонятно в примере?

vadjliss 12-09-2016 11:36 2667827

Вложений: 1
я не понял как прописать архив что бы после распаковки установилось программа
ярлыки прописать программы

R.i.m.s.k.y. 14-09-2016 12:16 2668531

Господа
насколько я понимаю для определения windows10 нужен инно 5,5,6 или выше
Но беда - у меня скрипт на расширенной версии инно от restools еще от инноультра 5,5,1(а)
Сайт restools http://restools.hanzify.org/ лежит, инноультра сдох
Вопрос: где теперь все это брать?

и если с новыми версиями все так плохо то как можно выкрутиться для корректного опознавания вин10 в инно версии 5,5,1ее(а) через Version: TWindowsVersion?

R.i.m.s.k.y. 14-09-2016 13:24 2668557

Цитата:

Цитата R.i.m.s.k.y.
и если с новыми версиями все так плохо то как можно выкрутиться для корректного опознавания вин10 в инно версии 5,5,1ее(а) через Version: TWindowsVersion? »

через ntoskrnl.exe
Код:

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "version"
#define MyAppVersion "1.0"
#define MyAppExeName "MyProg.exe"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{8D07C1DF-B738-44EC-AAB9-42EE73B52969}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
CreateAppDir=no
OutputDir=.
OutputBaseFilename=version
Compression=lzma
SolidCompression=yes
Uninstallable=false

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Code]

var
  Version: TWindowsVersion;

Function InitializeSetup: Boolean;
var ResultStr, s, st, s_apprun, s_app :string; ResultCode, res, i, ErrorCode: Integer; rim, b1,b2 : boolean; VersionMS0x86, VersionLS0x86 : cardinal;
Begin
  GetWindowsVersionEx (version)
  GetVersionNumbers(ExpandConstant('{sys}\ntoskrnl.exe'), VersionMS0x86, VersionLS0x86);
  s:= 'ntoskrnl.exe = ' + IntToSTR(VersionMS0x86) + '.' + IntToSTR(VersionLS0x86) + #13#10 +
      'OS = ' + inttostr(Version.Major) + '.' + inttostr(Version.minor);
  if  VersionMS0x86 = $60001 then MsgBox(s + ' // ' + 'Windows 7', mbInformation, MB_OK);
  if  VersionMS0x86 = $60002 then MsgBox(s + ' // ' + 'Windows 8.0', mbInformation, MB_OK);
  if  VersionMS0x86 = $60003 then MsgBox(s + ' // ' + 'Windows 8.1', mbInformation, MB_OK);
  if  VersionMS0x86 = $A0000 then MsgBox(s + ' // ' + 'Windows 10', mbInformation, MB_OK);
  if  VersionMS0x86 = $A0001 then MsgBox(s + ' // ' + 'Windows 10.1', mbInformation, MB_OK);

  Result:= false
end;
end.



655360 это 000А 0000, 0000А = 10
причем обратите внимание что сам инно 5,5,1 опознает систему как вин 8,0, даже не вин 8,1 из-за старого манифеста (OS = ), но через версию файла ntoskrnl.exe опознает ОС как десятку в hex, т.е. как надо
В общем даже на старом инно если применять этот метод будет опознавать еще долго, если МС опять что-нибудь не начудит

нужно было поменять if на case но вломм
Мысль ясна

doctor_allcome 14-09-2016 13:52 2668565

Добрый день!
Возник вопрос. В окне SelectDirPage при нажатии кнопки "Далее>" выходит сообщение о том что "Папка не существует" и предложение создать её.
Как сделать так, что бы папка создавалась автоматически и сообщение не выводилось?

R.i.m.s.k.y. 14-09-2016 13:56 2668567

doctor_allcome, DirExistsWarning и EnableDirDoesntExistWarning в секции Setup

doctor_allcome 14-09-2016 14:01 2668569

R.i.m.s.k.y., Спасибо!

Nordek 14-09-2016 14:52 2668584

Цитата:

Цитата R.i.m.s.k.y.
Сайт restools http://restools.hanzify.org/ лежит, инноультра сдох »

Inno Setup Ultra.

В теме Inno Setup. Прочие вопросы - из первого сообщения ещё доступны к скачиванию по прямым ссылкам файлы Inno Setup Compiler build 121216 и Inno ISCmplr Setup build 121002.
Версии ispack доступны к скачиванию отсюда (Например: ispack-5.5.1.exe и ispack-5.5.1-unicode.exe)

Версии isetup доступны к скачиванию отсюда (Например: isetup-5.5.1.exe и isetup-5.5.1-unicode.exe).

R.i.m.s.k.y. 14-09-2016 14:54 2668586

Nordek, это все 5.5.1
а нужно 5.5.6 минимум

El Sanchez 14-09-2016 21:31 2668685

Цитата:

Цитата R.i.m.s.k.y.
и если с новыми версиями все так плохо то как можно выкрутиться для корректного опознавания вин10 в инно версии 5,5,1ее(а) через Version: TWindowsVersion? »

R.i.m.s.k.y., и года не прошло:)

R.i.m.s.k.y. 15-09-2016 09:45 2668754

Цитата:

Цитата El Sanchez
R.i.m.s.k.y., и года не прошло »

не работает BASS module с компилятором с правленным манифестом, ругается на неизвестный тип PChar
но таки мой способ будет работать и дальше, а манифест этот опять придется просить поправить

semiono 16-09-2016 00:24 2669009

Помогите! Мне нужно разрешение экрана в секции [registry]

Вот тут какой-то код, но мне MsgBox не нужен, а нужна строка, например 1440x900, чтобы в реестре записать.
Скрытый текст

[code]
Код:

    function GetSystemMetrics (nIndex: Integer): Integer;
      external 'GetSystemMetrics@User32.dll stdcall setuponly';
   
    Const
        SM_CXSCREEN = 0; // The enum-value for getting the width of the cient area for a full-screen window on the primary display monitor, in pixels.
        SM_CYSCREEN = 1; // The enum-value for getting the height of the client area for a full-screen window on the primary display monitor, in pixels.
   
    function InitializeSetup(): Boolean;
      var
          hDC: Integer;
          xres: Integer;
          yres: Integer;
    begin
        xres := GetSystemMetrics(SM_CXSCREEN);
        yres := GetSystemMetrics(SM_CYSCREEN); //vertical resolution
   
        MsgBox( 'Current resolution is ' + IntToStr(xres) +
            'x' + IntToStr(yres)
    , mbInformation, MB_OK );
   
        Result := true;
    end;


nik1967 16-09-2016 12:33 2669146

semiono,
пример для обычного инно

Код:

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Registry]
Root: HKLM; SubKey: SOFTWARE\MyApp; ValueType: string; ValueName: Resolution ; ValueData: {code:Res}; Flags: uninsdeletekey;

[Code]
Const
 
SM_CXSCREEN = 0;
  SM_CYSCREEN = 1;

function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@User32.dll stdcall setuponly';   
   
function Res(S: String): String;
begin
  S:= IntToStr(GetSystemMetrics(SM_CXSCREEN))+'x'+IntToStr(GetSystemMetrics(SM_CYSCREEN)); 
  Result:= S;
end;


пример для инно от китайцев (проще)

Код:

#ifndef IS_ENHANCED
  #error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Registry]
Root: HKLM; SubKey: SOFTWARE\MyApp; ValueType: string; ValueName: Resolution ; ValueData: {code:Res}; Flags: uninsdeletekey;

[Code]     
function Res(S: String): String;
begin
  S:= IntToStr(Screen.Width)+'x'+IntToStr(Screen.Height);   
  Result:= S;
end;


El Sanchez 16-09-2016 17:57 2669244

Цитата:

Цитата R.i.m.s.k.y.
не работает BASS module с компилятором с правленным манифестом, ругается на неизвестный тип PChar »

R.i.m.s.k.y., манифест не виноват в том, что тип PChar отсутствует в Unicode-версии Inno Setup. Ну замени на AnsiString.

semiono 16-09-2016 22:27 2669352

Нужно установить "дата и время создания папки" = 2001-01-01 00:00:00

SetFileTime function :o

R.i.m.s.k.y. 21-09-2016 16:56 2670888

мне нужно прописать в ярлык в параметры совместимости "runasadmin"

Насколько я помню за это отвечает ключ
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
пишется строковое имя параметра в виде пути и параметр
C:\Program Files\7-Zip\7zFM.exe=RUNASADMIN

Скажите, пожалуйста, это правильно и работает ли оно в 8/10?

gurulea93 23-09-2016 14:44 2671428

Привет можыте памагати
как правилина писати код в секции Exec

Код:


procedure CurStepChanged(CurStep: TSetupStep);
begin
  If NewCheckBox1.Checked then
begin
Exec('{sys}\net.exe, user 1csupport {code:GetUser|Password1}', '/add, /fullname:""1csupport"", /comment:""1csupport"", /active:yes, /expires:never, /passwordchg:no'), '',;
end;
end;

Вот веси код
Скрытый текст


[code]

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=Output

Код:

{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
  authentication: TWizardPage;
  PasswordEdit1: TPasswordEdit;
  PasswordEdit2: TPasswordEdit;
  PasswordEdit3: TPasswordEdit;
  PasswordEdit4: TPasswordEdit;
  PasswordEdit5: TPasswordEdit;
  NewCheckBox1: TNewCheckBox;
  NewCheckBox2: TNewCheckBox;
  NewCheckBox3: TNewCheckBox;
  NewCheckBox4: TNewCheckBox;
  NewCheckBox5: TNewCheckBox;

function _NextButtonClick(Sender: TWizardPage): Boolean; forward;

procedure RedesignWizardForm;
begin
  { Creates custom wizard page }
  authentication := CreateCustomPage(wpSelectDir, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

  { authentication }
  with authentication.Surface do
  begin
    authentication.OnNextButtonClick := @_NextButtonClick;
  end;

  { PasswordEdit1 }
  PasswordEdit1 := TPasswordEdit.Create(WizardForm);
  with PasswordEdit1 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(240);
    Top := ScaleY(24);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  { PasswordEdit2 }
  PasswordEdit2 := TPasswordEdit.Create(WizardForm);
  with PasswordEdit2 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(240);
    Top := ScaleY(64);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  { PasswordEdit3 }
  PasswordEdit3 := TPasswordEdit.Create(WizardForm);
  with PasswordEdit3 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(240);
    Top := ScaleY(104);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  { PasswordEdit4 }
  PasswordEdit4 := TPasswordEdit.Create(WizardForm);
  with PasswordEdit4 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(240);
    Top := ScaleY(148);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  { PasswordEdit5 }
  PasswordEdit5 := TPasswordEdit.Create(WizardForm);
  with PasswordEdit5 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(240);
    Top := ScaleY(192);
    Width := ScaleX(121);
    Height := ScaleY(21);
    Text := '';
  end;

  { NewCheckBox1 }
  NewCheckBox1 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox1 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(32);
    Top := ScaleY(24);
    Width := ScaleX(193);
    Height := ScaleY(17);
    Caption := '1csupport/1csupport2/1csupport3';
  end;

  { NewCheckBox2 }
  NewCheckBox2 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox2 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(32);
    Top := ScaleY(64);
    Width := ScaleX(153);
    Height := ScaleY(17);
    Caption := 'Boss';
  end;

  { NewCheckBox3 }
  NewCheckBox3 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox3 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(32);
    Top := ScaleY(104);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'Contabil1';
  end;

  { NewCheckBox4 }
  NewCheckBox4 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox4 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(32);
    Top := ScaleY(148);
    Width := ScaleX(177);
    Height := ScaleY(17);
    Caption := 'Contabil2';
  end;

  { NewCheckBox5 }
  NewCheckBox5 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox5 do
  begin
    Parent := authentication.Surface;
    Left := ScaleX(32);
    Top := ScaleY(192);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'Contabil3';
  end;

  PasswordEdit1.TabOrder := 0;
  PasswordEdit2.TabOrder := 1;
  PasswordEdit3.TabOrder := 2;
  PasswordEdit4.TabOrder := 3;
  PasswordEdit5.TabOrder := 4;
  NewCheckBox1.TabOrder := 5;
  NewCheckBox2.TabOrder := 6;
  NewCheckBox3.TabOrder := 7;
  NewCheckBox4.TabOrder := 8;
  NewCheckBox5.TabOrder := 9;

{ ReservationBegin }
  // This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure PasswordEdit1Change(Sender: TObject);
begin

end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

function GetUser(Param: String ): String;
begin
  if Param = 'Password1' then
    Result := PasswordEdit1.Text;
begin
  if Param = 'Password2' then
    Result := PasswordEdit1.Text;
begin
  if Param = 'Password3' then
    Result := PasswordEdit1.Text;
begin
  if Param = 'Password4' then
    Result := PasswordEdit1.Text;
begin
  if Param = 'Password5' then
    Result := PasswordEdit1.Text;
end;
end;
end;
end;
end;

function _NextButtonClick(authentication: TWizardPage): Boolean;
var
  ResultCode: Integer;
begin
  if NewCheckBox1.Checked then begin
    if PasswordEdit1.Text = '' then begin
      MsgBox('Введите пароль 1csupport/1csupport2/1csupport3!', mbError, MB_OK);
      Result := False;
      end;
    end;
  if NewCheckBox2.Checked then begin
    if PasswordEdit2.Text = '' then begin
      MsgBox('Введите пароль Boss!', mbError, MB_OK);
      Result := False;
      end;
    end;
  if NewCheckBox3.Checked then begin
    if PasswordEdit3.Text = '' then begin
      MsgBox('Введите пароль Contabil1!', mbError, MB_OK);
      Result := False;
      end;
    end;
  if NewCheckBox4.Checked then begin
    if PasswordEdit4.Text = '' then begin
      MsgBox('Введите пароль Contabil2!', mbError, MB_OK);
      Result := False;
      end;
    end;
  if NewCheckBox5.Checked then begin
    if PasswordEdit5.Text = '' then begin
      MsgBox('Введите пароль Contabil3!', mbError, MB_OK);
      Result := False;
      end;
    end;
  end;

  function GetCheckBox1(): Boolean;
begin
  if Param = 'Password1' then
    Result := PasswordEdit1.Text;
begin
  if Param = 'Password2' then
    Result := PasswordEdit1.Text;
begin
  if Param = 'Password3' then
    Result := PasswordEdit1.Text;
begin
  if Param = 'Password4' then
    Result := PasswordEdit1.Text;
begin
  if Param = 'Password5' then
    Result := PasswordEdit1.Text;
end;
end;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  If NewCheckBox1.Checked then
begin
Exec('{sys}\net.exe, user 1csupport {code:GetUser|Password1}', '/add, /fullname:""1csupport"", /comment:""1csupport"", /active:yes, /expires:never, /passwordchg:no'), '',;
end;

begin
  If NewCheckBox2.Checked then
begin
Exec('{sys}\net.exe', 'user 1csupport {code:GetUser|Password1}', '/add', '/fullname:""1csupport""', '/comment:""1csupport""', '/active:yes', '/expires:never', '/passwordchg:no');
end;

begin
  If NewCheckBox3.Checked then
begin
Exec('{sys}\net.exe', 'user 1csupport {code:GetUser|Password1}', '/add', '/fullname:""1csupport""', '/comment:""1csupport""', '/active:yes', '/expires:never', '/passwordchg:no');
end;

begin
  If NewCheckBox4.Checked then
begin
Exec('{sys}\net.exe', 'user 1csupport {code:GetUser|Password1}', '/add', '/fullname:""1csupport""', '/comment:""1csupport""', '/active:yes', '/expires:never', '/passwordchg:no');
end;

begin
  If NewCheckBox5.Checked then
begin
Exec('{sys}\net.exe', 'user 1csupport {code:GetUser|Password1}', '/add', '/fullname:""1csupport""', '/comment:""1csupport""', '/active:yes', '/expires:never', '/passwordchg:no');
end;
end;
end;
end;
end;
end;


vadjliss 01-10-2016 20:55 2674163

парни как сделать чтобы при выборе портабле не устанавливалась папка в пуск меню
и соответственно она устанавливалась при установке

Dodakaedr 01-10-2016 20:59 2674164

vadjliss, сделайте так чтобы при портабле не создавались ярлыки.

habib2302 02-10-2016 00:04 2674205

vadjliss, есть такой вариант
Код:

[Setup]
DisableProgramGroupPage=yes

[Tasks]
Name: group; Description: {cm:CreateStartMenuIcon}; Components: I;

[Icons]
Name: {group}\Soft; Filename: {app}\soft.exe; Tasks: group;


Krinkels 05-10-2016 21:42 2675419

Вложений: 1
Может кому пригодится. Плагин для поддержки регулярных выражений в инно. Во вложении либа + скрипт с несколькими примерами.

El Sanchez 06-10-2016 09:39 2675495

Цитата:

Цитата Krinkels
Плагин для поддержки регулярных выражений в инно. »

Krinkels, есть же объект VBScript.RegExp из стандартной vbscript.dll

Krinkels 06-10-2016 12:09 2675536

Цитата:

Цитата El Sanchez
есть же объект VBScript.RegExp из стандартной vbscript.dll »

Кому что удобнее, вообще делал для себя, и ни кого не принуждаю к использованию

AlekseyPopovv 13-10-2016 05:42 2677581

Всем привет. У меня в инсталляторе содержатся файлы "*.msi" и пока они копируются (не устанавливаются) в папку "Temp" мне нужно удалить папку именно на этапе копирования а не установки. Как сделать?

yar_mary 13-10-2016 10:21 2677642

Всем доброго времени суток. Очень нужна помощь специалистов. По наследству от админа досталась прога на inno setup которая копирует архив с ПК пользователя на сервер. Теперь грядет модернизация серверов и нужно в срочном порядке настроить копирование не на расшаренную папку сервера, а на ftp ресурс. Опыта написания в inno setup нет, так что взываю к помощи
Исходный код копирования:
FileCopy(ExpandConstant('{tmp}\{computername}.zip'), '\\ipсервера\расшаренная папка\' + GetIPAddress() + '.zip', false)
Пробовала сделать вот так, но не копирует:
FileCopy(ExpandConstant('{tmp}\{computername}.zip'), 'ftp://логин:пароль@IPадрес' +\папка'+ GetCommandLineParam('/REG') + '\' + GetIPAddress() + '.zip', false)

gurulea93 16-10-2016 02:04 2678532

На счёт отправки файла на FTP почитай, что пишут - можно с помощью штатной виндовской программы ftp.exe.

habib2302 16-10-2016 11:24 2678592

AlekseyPopovv,
Код:

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
begin
  RemoveDir(ExpandConstant('{app}'));
 end;
end;

Доброе время суток. Возможно ли организовать MsgBox с отрицательным и положительным ответом на перезагрузку ПК после окончания установки?

nik1967 18-10-2016 12:41 2679346

habib2302,
справка
[Setup]: AlwaysRestart

Возможные значения: yes или no
Значение по умолчанию: no

Описание:
При значении yes инсталлятор будет всегда предлагать перезагрузить компьютер после успешной установки, даже если этого не нужно (в секции [Files] могут быть параметры с флагом restartreplace).

habib2302 18-10-2016 15:26 2679415

nik1967, у меня последняя страница отключена

Dodakaedr 18-10-2016 17:00 2679457

habib2302, вот так пробуй
Скрытый текст
Код:

[Setup]
AppName=App
AppverName=App v1.0
DefaultDirName={pf}\App
OutputDir=.
DisableFinishedPage=yes

[Code]
Procedure Reboot();
var
i: integer;
begin
  Exec('shutdown.exe', '/r /t 0 /d u:4:2', '', SW_HIDE, ewNoWait, i);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
  begin
    if MsgBox('Для завершения установки требуется перезагрузка системы.'+#13#10+'Перезагрузить сейчас?', mbInformation, MB_YESNO) = 6 then Reboot();
  end;
end;


habib2302 18-10-2016 20:59 2679533

Помогите решить еще одну проблему. не запускается екзешник, который посредством команды /(un)install /silent должен запустить или удалять службу
https://yadi.sk/d/IpYZ28CBx6ozB
Код:

[Run]
Filename: {app}\USBSRService.exe; Parameters: "/install /silent"; Flags: waituntilterminated

[UninstallRun]
Filename: "{app}\USBSRService.exe"; Parameters: "/uninstall /silent";

[Code]
 procedure CurStepChanged(CurStep: TSetupStep);
var
 RC: integer;
begin
  if CurStep = ssInstall then
  Exec(ExpandConstant('{app}\USBSRService.exe'), '/uninstall /silent', '', SW_HIDE, ewWaitUntilTerminated, RC);
end;


Dodakaedr 18-10-2016 21:07 2679541

habib2302,
Код:

Exec(ExpandConstant('{app}\USBSRService.exe'), ' /uninstall /silent', '', SW_HIDE, ewWaitUntilTerminated, RC);

habib2302 18-10-2016 21:22 2679550

Dodakaedr, а с секций run?

Dodakaedr 18-10-2016 21:31 2679556

habib2302, там все правильно

semiono 19-10-2016 18:12 2679855

Нужно добваить пару строк в {sys}\drivers\etc\hosts

Код:

127.0.0.1      www.addr1.com
127.0.0.1      www.addr2.com

Во-первых, хотелось бы добавить строки только при их отсутствии, то есть без повторения строк.
Во-вторых, хотелось бы учесть случай отсутствия \n в конце последней записи существующего файла.
Однако, добавлять NEWLINE в пустой файл вначале, тоже не хотелось бы, для этого я думаю можно использовать
проверку размера файла == 0 и тогда делать записи с первой строки.

Желательно не выводить окна, если Non Admin mode, чтобы всё тихо было.
Лучше бы установить права доступа на файл в любом режиме, но я думаю это лишнее, возможно даже совсем не нужно.

El Sanchez 20-10-2016 11:34 2680045

Цитата:

Цитата semiono
Нужно добваить пару строк в {sys}\drivers\etc\hosts »

semiono,
Скрытый текст

Код:

//////////////////////////////////////////////////
function StripWhitespace(const S: string): string;
var
 
C: Char;
  i: Integer;
begin
  for
i := 1 to Length(S) do
  begin
   
C := S[i];
    if (C = ' ') or ((C >= #$0009) and (C <= #$000D)) or (C = #$00A0) or (C = #$0085) then Continue;
    Result := Result + C;
  end;
end;

/////////////////////////////////////////////////////////
function AddEntryToHosts(const Ip, Url: string): Boolean;
var
 
i: Integer;
begin
 
Result := False;
  with TStringList.Create do
  try
   
LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
    for i := 0 to Count - 1 do
      if
CompareText(StripWhitespace(Strings[i]), Trim(Ip) + Trim(Url)) = 0 then Exit;
    Add(Ip + #9 + Url);
    SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts'));
    Result := True;
  finally
   
Free;
  end;
end;

///////////////////////////
procedure InitializeWizard;
begin
  if
AddEntryToHosts('127.0.0.1', 'google.ru') then
   
MsgBox('Done', mbInformation, MB_OK);
end;


Цитата:

Цитата semiono
Желательно не выводить окна, если Non Admin mode, чтобы всё тихо было. »

nonadmin-программам в системных директориях делать нечего.

semiono 20-10-2016 18:43 2680204

Код:

// {sd}\hosts.txt - для теста

procedure InitializeWizard;
begin
  SaveStringToFile(ExpandConstant('{sd}\hosts.txt'),'',true) // случай если файл отсутствует
  AddEntryToHosts('127.0.0.1', 'googl1.ru')
  AddEntryToHosts('127.0.0.1', 'googl2.ru')
  AddEntryToHosts('127.0.0.1', 'googl3.ru')
end;


Unknown00 27-10-2016 22:03 2682236

Уважаемые знатоки инно, подскажите, пожалуйста, как вызвать процедуру до запуска инсталлятора? (требуется запустить проверку хэш-суммы до запуска инсталлятора)

R.i.m.s.k.y. 28-10-2016 10:48 2682362

скажите, пожалуйста, можно ли распаковать запароленный установщик сделанный в инно "Inno Setup Compiler version 5.5.1.ee2 (a)" при известном пароле, но забубенном типа !@#$%^&*()}{POIUYTREWQasdfghjkl;'\
даю команду
innounp.exe -x -d1 -fpass setup.bin
и прилетает птица обломинго
The setup files are corrupted or made by incompatible version. Maybe it's not an
Inno Setup installation at all.
(0048C402)


innounp.exe версии 046 лежит в папке с установщиком, в текстовом файле pass с кодировкой ср-1251 записан пароль, комстрока запускается в папке со всем этим барахлом

innoextractor опознал запароленные блоки но не имеет параметра для ввода пароля архива

F1!!!

Dark_Delphin 31-10-2016 02:11 2683203

Всем привет.

Почему при выборе директории добавляется директори "Новая папка" ???
Как сделать, что-бы ничего не было, что-бы я мог указать путь к корню??

Что писать суда или куда? DefaultDirName

Заранее благодарен!!!

R.i.m.s.k.y. 31-10-2016 09:38 2683239

Dark_Delphin, DefaultDirName в секции setup, не?
скрипт бы показал лучше

Dark_Delphin 31-10-2016 10:17 2683255

R.i.m.s.k.y., вот
Код:

...
[Setup]
AppName=Название мода
AppVerName=Название
DefaultDirName= {*}
DefaultGroupName=не
OutputDir=.
MinVersion=0.1
DisableReadyPage=yes
WizardImageFile=Img2.bmp
SetupIconFile=icon.ico
UninstallIconFile=icon.ico
#ifdef Components

[Types]
 Name: full; Description: Full installation; Flags: iscustom

....


R.i.m.s.k.y. 31-10-2016 10:35 2683260

Цитата:

Цитата Dark_Delphin
DefaultDirName= {*} »

это замазано или так и есть?
попробуй поставить DefaultDirName=www
или тебе в корень надо ставить? зачем в корень?

Dark_Delphin 31-10-2016 10:39 2683262

R.i.m.s.k.y., нужен корень, я делаю установку мода в папку с игрой...

Dark_Delphin 31-10-2016 11:02 2683273

Я уже всё перепробовал... хз че делать

R.i.m.s.k.y. 31-10-2016 11:04 2683275

Цитата:

Цитата Dark_Delphin
нужен корень, я делаю установку мода в папку с игрой... »

кмк уже неверно
как я вижу нужно узнать в какой папке установлена игра (через реестр или конф файлы или еще как) и это присваивать DefaultDirName
вот нопремер код от моего установщика мегаведьмака
Код:

[Setup]
DefaultDirName={code:Path|{pf}\TheWitcherGold}

[CODE]
function Path(String: String): String;
var s1, s2 : string; i : integer;
begin
Result := ExpandConstant('{pf}\TheWitcherGold');
if (not noskin) then begin
for i := ord('c') to ord('z') do begin
  s1 := chr(i);
  if (DirExists(s1+':\Games')) then begin
    Result := s1 + ':\Games\TheWitcherGold';
    break;
  end;
  if (DirExists(s1+':\Game')) then begin
    Result := s1 + ':\Game\TheWitcherGold';
    break;
  end;
end;//for
end;//if (not noskin)
if RegQueryStringValue(HKLM, 'SOFTWARE\CD Projekt Red\The Witcher','InstallFolder', s2)
 then begin
  s2 := RemoveBackslashUnlessRoot(s2);
  if (s2 <> '') then Result := s2;
end;
end;//Path

т.е. сначала по дискам ищется папка Games или Game и если находится предлагаем поставить туда, потом смотрим установлена ли уже мегаигра по реестру, ну и если ни папки ни установлена то предлагаем обычную дефолтную в програмфилес

Dark_Delphin 31-10-2016 11:18 2683283

R.i.m.s.k.y., а попроще ничего нету?
И оно ругается на noskin

R.i.m.s.k.y. 31-10-2016 11:26 2683294

Цитата:

Цитата Dark_Delphin
И оно ругается на noskin »

это моя внутренняя переменная
Установщик мегаведьмака с накрученной музыкой, оформлениями и прочими свистелками
Если что-то не сработает то выскочит ошибка и поставить будет нельзя, и я реализовал ключ /noskin, при таком запуске весь оформительский триппер отключается и установщик становится совершенно стандартным
Условие
if (not noskin)
...
end;//if (not noskin)
как раз за это и отвечает, при запуске с /noskin всё что в этом if будет пропущено

Dark_Delphin 31-10-2016 11:42 2683298

R.i.m.s.k.y., без реестра можно как то сделать?
Мне нужно вручную указать директорию без всяких папок лишних.

R.i.m.s.k.y. 31-10-2016 11:51 2683300

Цитата:

Цитата Dark_Delphin
Мне нужно вручную указать директорию без всяких папок лишних. »

[Setup]
DefaultDirName={pf}\megagame}

Dark_Delphin 31-10-2016 11:56 2683302

R.i.m.s.k.y., оно добавляет папку megagame в конец строки.
Мне не нужно что-бы добавляло, чтото?
Или мы не можем понять друг-друга?

Dark_Delphin 31-10-2016 12:29 2683313

нашел наконец

AppendDefaultDirName=False

http://forum.oszone.net/post-1800267-212.html

Вы рядом с теми сообщениями были, истину рядом видели и опять забыли))

R.i.m.s.k.y. 31-10-2016 12:40 2683317

Цитата:

Цитата Dark_Delphin
Вы рядом с теми сообщениями были, истину рядом видели и опять забыли)) »

Цитата:

Отправлено: 22:55, 21-11-2011
ничоси 5 лет назад!
и поправь инвективщину пока не забанили
Цитата:

Цитата Dark_Delphin
Мне не нужно что-бы добавляло, чтото »

так бы сразу
Цитата:

Цитата Dark_Delphin
AppendDefaultDirName=False »

оно и есть

nystic 07-11-2016 09:45 2685333

Приветствую форумчане подскажите пожалуйста в вопросе,
как сменить иконку ярлыка на рабочем столе
по умолчанию выводится иконка exe файла, а нужна своя (другая)
В папке есть иконка вот ее надо отобразить,а у exeшника своя иконка эту не надо показывать.

boss911 07-11-2016 11:18 2685358

Цитата:

Цитата nystic
как сменить иконку ярлыка на рабочем столе
по умолчанию выводится иконка exe файла, а нужна своя (другая) »

Код:

[Icons]
Name: {userdesktop}\MyApp; Filename: {app}\MyApp.exe; WorkingDir: {app}; IconFilename: %SystemRoot%\system32\shell32.dll; IconIndex: 130


IconFilename
Имя файла иконки (расположенной в системе пользователя). Это может быть файл с расширением .exe или .dll, содержащий иконки, или файл .ico. Если этот параметр не указан или пустой, Windows будет использовать иконку, выбранную по умолчанию. Параметр может содержать константы.

IconIndex
Нулевой индекс иконки, используемый в файле IconFilename. Значение по умолчанию - 0.
Если значение IconIndex ненулевой и IconFilename не указан или пустой, IconFilename присвоится то же значение, что и Filename.

Optitron 07-11-2016 17:33 2685517

Здравствуйте. Подскажите пожалуйста, как сделать так, чтобы при деинсталляции можно было выбрать, удалить ли настройки программы (допустим они находятся в папке "Мои Документы").

Dark_Delphin 08-11-2016 18:35 2685841

Optitron, через библиотеки опшин конекшен

vadjliss 09-11-2016 18:44 2686135

ребята может кто подсказать запуск url сайта через батник

boss911 09-11-2016 21:23 2686176

Цитата:

Цитата vadjliss
запуск url сайта через батник »

Код:

start http://google.com
или
rundll32.exe shell32 ShellExec_RunDLL http://google.com

Код:

[Run]
Filename: {app}\script.cmd; WorkingDir: {app}; Flags: waituntilterminated runhidden

Если я правильно понял ваш вопрос.

slonick2011 09-11-2016 22:31 2686196

Кто знает из-за чего может перестать реагировать на кнопку закрытия и alt+f4 инсталлятор?

WizardForm.CancelButton.Hide - не дает закрыть форму

john458 10-11-2016 11:37 2686299

Вложений: 1
Ребят, подскажите пожалуйста, что именно нужно прописать в скрипте (и где именно), чтобы вот именно этот чекбокс был активным (чтобы стояла галочка) при установке инсталлятора?

Скриншот

ZVSRus 10-11-2016 12:55 2686317

john458

Скрытый текст

Цитата:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DefaultGroupName=My Application
AllowNoIcons=yes

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


slonick2011 10-11-2016 16:58 2686376

Можно как-то изменить расстояние между элементами в "TasksList", чтобы их выровнять?

john458 11-11-2016 00:04 2686490

Цитата:

Цитата ZVSRus
Цитата:
Скрытый текст
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DefaultGroupName=My Application
AllowNoIcons=yes

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

После компиляции скрипта ничего не произошло, то есть, галочка не установлена. Может нужно ещё что-то прописать в скрипте или наоборот удалить?

Вот мой скрипт:

Скрытый текст
#define MyAppName "Azur & Asmar"
#define MyAppVersion "1.0"
#define MyAppExeName "Azur & Asmar.exe"


[Setup]
AppId={{C063DBD3-E8FB-43EA-A5D2-FD093A33FCFC}
AppName=My Application
AppVersion=1.0
AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName=C:\Games\My Application
DefaultGroupName=My Application
AllowNoIcons=yes
OutputDir=C:\Users\john458\Desktop\Azur & Asmar
OutputBaseFilename=Azur & Asmar
SetupIconFile=C:\Users\john458\Desktop\Azur & Asmar\icon.ico
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";

[Files]
Source: "C:\Program Files (x86)\Azur & Asmar\Azur & Asmar.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files (x86)\Azur & Asmar\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs


[Icons]
Name: "{group}\My Application"; Filename: "{app}\My Application.exe"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[UninstallDelete]
Name: "{app}\*.*"; Type: filesandordirs
Name: (app); Type: dirifempty;


Я порылся в сети и нашёл кое что с этим связанное, только я не знаю как это должно всё правильно прописываться и выглядеть в скрипте.
/NOICONS
Instructs Setup to initially check the Don't create a Start Menu folder check box on the Select Start Menu Folder wizard page.
Pascal Scripting: WizardNoIcons
Prototype:
function WizardNoIcons: Boolean;
Description:
Returns the current setting of the Don't create a Start Menu folder check box on the Select Start Menu Folder page of the wizard.
Query NoIconsCheck checkbox directly:
if not WizardForm.NoIconsCheck.Checked then

slonick2011 11-11-2016 01:54 2686497

john458, Вот, держи
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectProgramGroup then
    WizardForm.NoIconsCheck.Checked := True;
end;


john458 11-11-2016 02:13 2686498

slonick2011
А где его именно нужно прописать? В какой секции? Можно полностью показать на примере моего скрипта? - буду очень благодарен.

slonick2011 11-11-2016 02:33 2686502

john458, В секцию [code], просто скопируй и вставь

john458 11-11-2016 02:34 2686503

Всё получилось, огромнейшее спасибо, уже дней 5 ищу как это сделать
Прописывать нужно в секции [code]

Скрытый текст
[code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectProgramGroup then
WizardForm.NoIconsCheck.Checked := True;
end;

ZVSRus 11-11-2016 07:42 2686518

john458
Пример от slonick2011 решение правильное. Но есть один вопрос, если это вам нужно лично для себя то это одно, если вы хотите это выкладывать в интернет тогда возникает вопрос надо ли это конечному пользователю?.
Стандартный чекбокс должен выглядеть стандартно (то-есть чекбокс должен быть не отмечен, поставить галочку, это выбор конечного пользователя)
P.S. Если не хотите создавать папку в меню пуск, удалите из секции [Setup], [Icons] все что связано с программной группой.

В расширенной версии Inno делается на раз, два

Цитата:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DefaultGroupName=My Application
AllowNoIcons=yes
OutputDir=.

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

[code]
procedure InitializeWizard();
begin
with
WizardForm.NoIconsCheck do
begin
Checked := True;
State := cbChecked;
end;
end;


habib2302 12-11-2016 15:54 2686933

Доброе время суток. Помогите с параметрами запуска.
Код:

[Run]
Filename: netsh.exe; Parameters: """advfirewall firewall add rule name=""ashsnapinst"" dir=in action=block program=""{app}\{#Exe}"" enable=yes"""
Filename: netsh.exe; Parameters: """advfirewall firewall add rule name=""ashsnapinst"" dir=out action=block program=""{app}\{#Exe}"" enable=yes"""

[UninstallRun]
Filename: netsh.exe; Parameters: """advfirewall firewall delete rule name=""ashsnapinst"""

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
var
  RC: integer;
begin
  if CurStep = ssInstall then
    Exec(ExpandConstant('netsh.exe'), ' advfirewall firewall delete rule name="ashsnapinst"', '', SW_HIDE, ewWaitUntilTerminated, RC)
end;


vadjliss 12-11-2016 18:25 2686966

ребята что надо прописать в батнике что бы он при запуске удалил ключи установленной программы

Dodakaedr 13-11-2016 01:22 2687117

habib2302, так пробуйте
Код:

[Run]
Filename: netsh.exe; Parameters: "advfirewall firewall add rule name=""ashsnapinst"" dir=in action=block program=""{app}\{#Exe}"" enable=yes"
Filename: netsh.exe; Parameters: "advfirewall firewall add rule name=""ashsnapinst"" dir=out action=block program=""{app}\{#Exe}"" enable=yes"

[UninstallRun]
Filename: netsh.exe; Parameters: "advfirewall firewall delete rule name=""ashsnapinst"""

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
var
  RC: integer;
begin
  if CurStep = ssInstall then
    Exec('netsh', ' advfirewall firewall delete rule name="ashsnapinst"', '', SW_HIDE, ewWaitUntilTerminated, RC)
end;

Цитата:

Цитата vadjliss
что надо прописать в батнике »

перейти в тему батников и там спросить

habib2302 13-11-2016 10:13 2687149

Dodakaedr, так не работает. через код работает, но не определяет путь к программе. хоть с кавычками хоть без них
Код:

[code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  RC: integer;
begin
  if CurStep = ssDone then
  Exec('netsh', ' advfirewall firewall add rule name=ashsnapinst dir=in action=block program={app}\{#Exe} enable=yes', '', SW_HIDE, ewWaitUntilTerminated, RC)
  Exec('netsh', ' advfirewall firewall add rule name=ashsnapinst dir=out action=block program={app}\{#Exe} enable=yes', '', SW_HIDE, ewWaitUntilTerminated, RC)
end;

Скрытый текст

nik1967 13-11-2016 12:20 2687181

habib2302, а так работает :)
Скрытый текст

Код:

#define Exe "ashsnap.exe"

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Code]       
procedure CurStepChanged(CurStep: TSetupStep);
var
 
RC: integer;
  SIn,SOut: String;
begin
  if
CurStep = ssDone then begin
    SIn:= ' advfirewall firewall add rule name=ashsnapinst dir=in action=block program='+ExpandConstant('"{app}\{#Exe}"')+' enable=yes';
    SOut:= ' advfirewall firewall add rule name=ashsnapinst dir=out action=block program='+ExpandConstant('"{app}\{#Exe}"')+' enable=yes';
    Exec('netsh', SIn, '', SW_HIDE, ewWaitUntilTerminated, RC);
    Exec('netsh', SOut, '', SW_HIDE, ewWaitUntilTerminated, RC);
  end;
end;


Optitron 22-11-2016 18:56 2689727

Подскажите пожалуйста, что нужно прописать в скрипт, чтобы перед установкой инсталлятор убивал процесс (в моем случае steam.exe).

nik1967 22-11-2016 22:16 2689786

Optitron, в шапке темы "Ссылки на примеры скриптов: => Закрытие процесса - пример скрипта для закрытия запущенного процесса, (ссылка на сообщение);"

Optitron 24-11-2016 09:40 2690106

nik1967, Спасибо!
Еще такой вопрос, можно ли создавать собственные ключи командной строки, пр.: чтобы не писать "/Components=Directx", а просто "/Directx".

Dodakaedr 24-11-2016 22:07 2690325

Подскажите, можно ли как-то в секции Setup для параметра UninstallLogMode задать определенное условие? Что-то типа такого:
Код:

[Setup]
...
UninstallLogMode={code:GetUniMode}

[code]
function GetUniMode(s: string): string;
begin
  if условие then
  s := 'new' else s := 'append';
  Result := s;
end;


4o_kavo 27-11-2016 10:48 2690832

Всем привет.
есть кто в этой проге силен ? Мне надо сделать просто Setup что бы файлы распаковывались в свои папки и всё, кто может помочь? С меня 100р за простую работу, напишите в лс кто согласен :)

El Sanchez 29-11-2016 12:07 2691427

Цитата:

Цитата Dodakaedr
можно ли как-то в секции Setup для параметра UninstallLogMode задать определенное условие? »

Dodakaedr, нет, и я не советую для данной директивы менять значение по умолчанию.

Optitron 02-12-2016 10:15 2692247

Здравствуйте. Не подскажите, как сделать так, чтобы при выборе компонента "1" его дефолтный путь установки был выбран как обычно (в Program Files), а при выборе компонента "2" дефолтный путь был бы установлен на рабочий стол (при этом путь установки можно поменять).

Nordek 02-12-2016 13:44 2692328

Optitron, Например так (В данном примере рассматривается включённый в инсталлятор отдельный файл):
Код:

[Components]
Name: cmp1; Description: Компонент 1
Name: cmp2; Description: Компонент 2

[Files]
Source: File.exe; DestDir: {app}\Application; Flags: ignoreversion; Components: cmp1
Source: File.exe; DestDir: {userdesktop}\Application; Flags: ignoreversion; Components: cmp2


Или например так (В данном примере рассматривается включённый в инсталлятор каталог с файлами и подкаталогами):
Код:

[Components]
Name: cmp1; Description: Компонент 1
Name: cmp2; Description: Компонент 2

[Files]
Source: Folder\*; DestDir: {app}\Application; Flags: ignoreversion recursesubdirs createallsubdirs; Components: cmp1
Source: Folder\*; DestDir: {userdesktop}\Application; Flags: ignoreversion recursesubdirs createallsubdirs; Components: cmp2

В обоих вариантах для "Компонент 2" используется константа {userdesktop} - означает, что файлы или каталог с файлами будут размещены на Рабочем столе текущего пользователя. Если нужно чтоб расположение для файлов было размещено для всех пользователей, используйте константу {commondesktop}

Учтите, что для "Компонент 2" путь жёстко привязан.

Optitron 02-12-2016 17:30 2692397

Nordek, Спасибо, но мне как раз таки нужно, чтобы для компонента "2" путь был привязан не жестко, например изначально он задавался бы на рабочий стол, но его можно было бы поменять.

R.i.m.s.k.y. 05-12-2016 09:18 2693049

Подскажите, пожалуйста, как можно в секции реестра подставлять в путь выхлоп функции из секции code

Прокатит так?

Код:

[Registry]
Root: HKU; SubKey: {code:GetOriginalSID}\www; ValueType: binary; ValueName: www_setup; ValueData: 12345

________

ап: да, прокатило

Irenis 16-12-2016 19:45 2696290

Добрый вечер! Подскажите пожалуйста, что такое модуль IDP в Inno Setup и как его убрать? Дело в том, что при компиляции у меня практически всегда файл setup с вирусом HEUR/QVM06.1.0000.Malware.Gen (при проверке через virustotal.com). Нашла такую фразу
Цитата:

HEUR/QVM06.1.0000.Malware.Gen (например в Qihoo-360) - это ложно положительное срабатывание, например, на инсталлятор Inno Setup с модулем IDP, нужен для скачивания недостающих файлов во время установки.
. Так вот и думаю, может как то убрать этот модуль и тогда на virustotal не будет показывать, что в установщике вирус, ведь я вирусов не добавляю и во время установки тоже ничего не скачивается. Надеюсь на ответ. Спасибо)

RADEON73 19-12-2016 15:36 2696898

Только начал освоение InnoSetup, чую что вопрос пустяковый, но сам дойти пока не могу...
Нужно сделать чтобы во время установки выводился запрос на указание пути к файлу, а после его указания путь к этому файлу использовался бы в создании ярлыка для другого файла как параметр. Притом оба этих файла распаковываются только во время установки, то есть окно выбора должно появляться после распаковки файлов, но перед окончанием установки ... то есть:
Например нужно создать ярлык для приложения №1 с параметрами [Путь к файлу №2 -l -c] , где "-l -c" тоже параметры, само приложение №1 лежит в установленном каталоге {app}, а вот путь к файлу №2 который мы выбираем, как и название этого файла после установки могут быть в разных местах (единственное что всегда верно, это его расширение) и выбираются во время загрузки...

Использовал Afterinstall чтобы войти в установку перед ее окончанием, но после распаковки файлов:

#define XXXName - объявленная переменная, где XXXName - файл №1
ProjectName - переменная содержащая в себе путь к файлу №2

procedure AfterInstall1 ;
var
ProjectName: String;
begin
ProjectName := '';
if GetOpenFileName('', ProjectName,'', 'Text Documents (*.txt)|*.txt|All Files|*.*', 'txt') then
begin
CreateShellLink(ExpandConstant('{userdesktop}\XXX.lnk') , '' , ExpandConstant('{app}\Просто_путь\{#XXXName}') , ExpandConstant('ProjectName') , ExpandConstant('') , ExpandConstant('D:\IS FILES\eye.ico') , 0 , SW_SHOWNORMAL);
end;
end;

Выделенное жирным и есть блок ответственный за установку параметров, но он воспринимает функцию ProjectName как текст, а нужно чтобы он считывал путь из нее...ну и чтобы там же еще прописывались -l -c , но это вторично.... Буду признателен и за менее топорное решение... да я знаю что я краб :) Спасибо...

El Sanchez 20-12-2016 20:20 2697247

Цитата:

Цитата RADEON73
но он воспринимает функцию ProjectName как текст, а нужно чтобы он считывал путь из нее »

RADEON73, ProjectName без кавычек сделайте, это ж переменная, а не литерал.
Цитата:

Цитата RADEON73
Притом оба этих файла распаковываются только во время установки, то есть окно выбора должно появляться после распаковки файлов »

RADEON73, если устанавливаются оба, то путь второго файла-параметра известен, зачем тогда указывать?

RADEON73 21-12-2016 08:03 2697333

El Sanchez, Вот я краб, все так просто путь сработал, сейчас остальные параметры прикрутить попробую...выбор второго файла обусловлен тем что программа инсталлятора задумывается как шаблон, в котором потом будут менять отдельные файлы копируемого содержимого внутри папок и компилировать заново , и будут меняться названия файлов... человек который будет это делать - не я... требовать от него называть файл одним и тем же именем каждый раз так себе решение..., подумывал сделать тупо поиск по маске расширения, и автоматический выбор, но есть вероятность что там единовременно окажутся несколько файлов с одинаковым расширением, поэтому остановился на ручном вводе...если есть другие идеи было бы интересно услышать

El Sanchez 21-12-2016 09:19 2697341

Цитата:

Цитата RADEON73
сейчас остальные параметры прикрутить попробую »

RADEON73, пока вы не начудили:
Скрытый текст

Код:

if GetOpenFileName('', ProjectName, '', 'Text Documents (*.txt)|*.txt|All Files|*.*', 'txt') then
begin
 
ProjectName := Format('"%s" -l -c', [ProjectName]);
  CreateShellLink(ExpandConstant('{userdesktop}\') + 'XXX.lnk', '', ExpandConstant('{app}\') + 'Просто_путь\{#XXXName}' , ProjectName, '', 'D:\IS FILES\eye.ico', 0, SW_SHOWNORMAL);
end;


RADEON73 21-12-2016 09:44 2697349

El Sanchez, Буду иметь ввиду, но я использовал уже такой вариант (ExpandConstant(ProjectName) + ' -l -c'), вроде работает, вопрос другой появился, при создании ярлыков через секцию кода, как прикрутить на их создание условие от галочек

"Не устанавливать ярлыки на рабочий стол..."
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";

И "Не создавать папку в меню пуск?"
AllowNoIcons=yes

Этот скрипт создает ярлыки в любом случае ( даже при выключенной галочке рабочий стол), и выдает ошибку если папки {group} не существует ( в случае если отказаться от установки в меню пуск)...может можно проверку как-нибудь на состояние переменной прикрутить?

El Sanchez 21-12-2016 12:29 2697401

Цитата:

Цитата RADEON73
но я использовал уже такой вариант (ExpandConstant(ProjectName) + ' -l -c'), вроде работает »

RADEON73, возможен сценарий, когда пользователь укажет путь, содержащий в себе папки с именами вида {чего-нибудь}. ExpandConstant будет пытаться раскрывать такие имена и обломается с руганью.
Цитата:

Цитата RADEON73
может можно проверку как-нибудь на состояние переменной прикрутить? »

RADEON73, проверка выбрана ли задача - функция IsTaskSelected, проверка "Не создавать папку в меню пуск?" - функция WizardNoIcons.

RADEON73 21-12-2016 14:39 2697420

El Sanchez, Первое проверил, и правда ругается, хотя шанс что такая папка попала бы в рамках этого инсталлятора стремиться к нулю, но на всякий случай переписал, спасибо...
Второе попробую завтра :)

habib2302 24-12-2016 13:07 2698046

Доброе время суток. Возможно ли выгрузить dll-файл без завершения процесса Explorer?

Bio_Hazard 24-12-2016 19:39 2698110

Здравствуйте. Простите за наглость, хотел попросить помощи сделать ингалятор программы с выбором компонентов, режимом установки/распаковки и созданием ярлыков. Если можно, поделитесь скриптом, дальше попробую со всем разобраться. Интерфейс инсталлятора самый простой. Заранее благодарю.

habib2302 24-12-2016 21:04 2698132

Bio_Hazard, для примера https://yadi.sk/d/lpuo1KLi34kri3

Bio_Hazard 24-12-2016 21:39 2698134

habib2302, кроме inno setup еще что-то нужно? При компиляции вылетает ошибка.

habib2302 24-12-2016 21:49 2698137

Bio_Hazard, нужна inno setup ultra т.к. на стандартной версии не работает

Bio_Hazard 24-12-2016 22:11 2698144

habib2302, поставил inno setup ultra 5.5.1, дает такую ошибку при компиляции.

nik1967 24-12-2016 22:42 2698158

Bio_Hazard, предыдущую строку закончи символом ";"
Потому, что UNICODE версия менее терпима к огрехам, чем ANSI.

habib2302 24-12-2016 23:16 2698172

Цитата:

Цитата nik1967
Потому, что UNICODE версия менее терпима к огрехам, чем ANSI. »

:yes:
Bio_Hazard,
Поэтому ставьте ANSI версию

RADEON73 28-12-2016 09:49 2698937

Блин тупой вопрос вроде, а не дойду никак...
[RUN]
Filename: "{cmd}"; Parameters: "/c" "REG DELETE HKCU\Software\ПУТЬ С ПРОБЕЛАМИ"

Не работает, естественно первое решение взять путь в кавычки...
Filename: "{cmd}"; Parameters: "/c" "REG DELETE "HKCU\Software\ПУТЬ С ПРОБЕЛАМИ""

Но так тоже не работает он путается в параметрах...как реализовать попроще задумку но без использования сторонних файлов типа .bat .cmd хочу прямо в коде ISS обрабатывать, желательно без использования секции [code]

Dodakaedr 28-12-2016 10:22 2698946

RADEON73,
Код:

Filename: "{cmd}"; Parameters: "/c REG DELETE ""HKCU\Software\ПУТЬ С ПРОБЕЛАМИ"""
В справку заглядывали? Там все это есть.

RADEON73 28-12-2016 12:37 2698994

Dodakaedr, Блин, тупо!!! Я его первым делом пробовал, не получилось, видимо где-то не уследил за знаками...

boss911 28-12-2016 13:02 2699011

Цитата:

Цитата RADEON73
как реализовать попроще задумку но без использования сторонних файлов типа .bat .cmd хочу прямо в коде ISS обрабатывать »

Вам нужно удалить ключ перед инсталляцией?
Код:

[Registry]
Root: HKCU; SubKey: Software\Bla Bla Bla; ValueType: none; Flags: deletekey

Если нужно еще и после деинсталляции удалить, тогда добавьте флаг uninsdeletekey.

RADEON73 28-12-2016 13:25 2699021

boss911, да уже сообразил что RUN выполняется после Registry, так пробовал сразу но почему то не удаляет, хотя должен...не пойму почему...когда на значение указываешь работает, а вот когда на каталог нет...

Использовал пока вот такой BEFOREINSTALL костыль, по условию установки чекбокса, но все равно хочу разобраться нет ли способа проще...


procedure DELETEREGKEY ;
begin
RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\Bla Bla Bla')
end;

nik1967 01-01-2017 01:19 2699953

С Новым Годом! Ура! Счастья всем!

R.i.m.s.k.y. 03-01-2017 18:26 2700427

подскажите, пожалуйста, как в винде х64 внести параметр в в реестр HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
по-умолчанию установщик фунциклирует в х86 режиме и ключи записываются в HKLM\Software\wow6432node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers и естественно не работает как надо
Узнал чтоименно надо без \wow6432node\ по регшоту и проверке руками этого ключа реестра

ставить в setup
ArchitecturesAllowed=x64, x86
ArchitecturesInstallIn64BitMode=x64
не очень хочется тк установщик ставит запускает на установку дирекс9, вкредист 2013 х86 и немножко кодеков х86, есть сомнения что в винде х64 все полетит не в ту секцию тк в справке написано
If your application's binaries are all 32-bit and run in user mode, you should not change this directive from its default value (specifically, don't set it to x86), because normally such binaries will run without issue on the x64 and Itanium editions of Windows via the WOW64 emulator.
Прога в установщике х86, вот как записать в HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers, минуя WOW64emulator?

boss911 03-01-2017 18:57 2700442

Цитата:

Цитата R.i.m.s.k.y.
как записать в HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers, минуя WOW64emulator? »

Код:

[Registry]
Root: HKLM64; SubKey: Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers; ValueType: none; ValueName: ; ValueData: ; Check: IsWin64
Root: HKLM; SubKey: Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers; ValueType: none; ValueName: ; ValueData: ; Check: NOT IsWin64


R.i.m.s.k.y. 03-01-2017 19:06 2700444

точно! забыл уже как делал это! склероз мне изменяет! :D

Nightwishh 06-01-2017 18:18 2701299

Всем Здрасте!!! Хочу спросить можно ли изменить цвет шрифта (не используя скина), что бы он был одного цвета во всех окошках и меседж боксах

R.i.m.s.k.y. 12-01-2017 12:27 2702872

подскажите, пожалуйста, как на FinishedPage делать неснимаемыми галочки на элементах, создаваемых стандартными строчками в секции Run

делаю так, ошибки при компиляции и при выполнении не возникает но галка снимается и ставится, элемент рабочий
If CurPageID=wpFinished then begin
RunSetup := WizardForm.RunList.Items.IndexOf(ExpandConstant('{cm:RunSetup}'));
readme := WizardForm.RunList.Items.IndexOf(ExpandConstant('{cm:readme}'));
if (readme + runsetup >= 0) then begin
WizardForm.RunList.ItemEnabled[readme]:=False; WizardForm.RunList.Checked[readme]:=True;
WizardForm.RunList.ItemEnabled[runsetup]:=False; WizardForm.RunList.Checked[runsetup]:=True;
end;
end;

ZVSRus 12-01-2017 18:12 2702978

R.i.m.s.k.y.,
А чекбоксы RunSetup, readme как созданы можно посмотреть?
Вам нужно чтобы чекбоксы, что прописаны стандартно в секции [Run] были отмечены, но не активны?

Dodakaedr 13-01-2017 07:53 2703158

R.i.m.s.k.y., так сойдет?
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpFinished then
begin
  WizardForm.RunList.ItemEnabled[0] := false; //допустим это runsetup
  WizardForm.RunList.ItemEnabled[1] := false; //а это readme
end;
end;


El Sanchez 13-01-2017 09:13 2703177

Цитата:

Цитата R.i.m.s.k.y.
подскажите, пожалуйста, как на FinishedPage делать неснимаемыми галочки на элементах, создаваемых стандартными строчками в секции Run »

R.i.m.s.k.y., раз выбора у пользователя нет, то смысл в выводе галок? Удалить строку с readme (с флагом isreadme) из [Files] и использовать директиву InfoAfterFile в [Setup], в [Run] в строке с runsetup удалить флаг postinstall

jdcorg 13-01-2017 10:49 2703199

При запуске инсталятора от имени админа, все файлы устанавливаются в папки админа, а не пользователя, вошедшего в систему.
Как сделать, чтобы установка производилась с правами админа, но в папки текущего (т.е. вошедшего в систему) юзера?

R.i.m.s.k.y. 13-01-2017 13:39 2703232

Цитата:

Цитата ZVSRus
Вам нужно чтобы чекбоксы, что прописаны стандартно в секции [Run] были отмечены, но не активны? »

да
уже сделал
ошибка была в if (readme + runsetup >= 0), один элемент не создавался и имел индекс -1 (была проверка Check: (if fileexist...), второй создавался с индексом 0 и сумма была -1
Всем дзинкуе за внимание!

Цитата:

Цитата El Sanchez
Удалить строку с readme (с флагом isreadme) из [Files] и использовать директиву InfoAfterFile в [Setup], в [Run] в строке с runsetup удалить флаг postinstall »

да так и было без флага postinstall, но мне это не нравиццо тк хорошо бы проинформировать пользователя что по окончании будет запущено вот это (натсройки и ридми как запускать) и пользователь не мог снять галки

Цитата:

Цитата jdcorg
Как сделать, чтобы установка производилась с правами админа, но в папки текущего (т.е. вошедшего в систему) юзера? »

сперва почитать про current user и original user
потом сформулировать вопрос правильно, а я пока поищу у себя, когда-то давным давно я так делал :D

jdcorg 13-01-2017 13:58 2703235

Цитата:

Цитата R.i.m.s.k.y.
сперва почитать про current user и original user
потом сформулировать вопрос правильно, а я пока поищу у себя, когда-то давным давно я так делал :D »

О current user и original user Google ничего не выдаёт и в документации на jrsoftware тоже не нашел.
Может у Вас есть ссылочки?

Valera90 13-01-2017 14:01 2703236

Вложений: 1
Всем привет как убрать выбор компонентов, на картинке выделил !

R.i.m.s.k.y. 13-01-2017 14:09 2703239

Цитата:

Цитата jdcorg
О current user и original user Google ничего не выдаёт и в документации на jrsoftware тоже не нашел.
Может у Вас есть ссылочки? »

есть http://forum.oszone.net/post-2321537.html#post2321537 :laugh: (вторая ссылка в яндексе по поиску originaluser currentuser)

я те прям работающий кусок кода дам

Код:

[CODE]
var
  Original_SID, Original_UserName : string;

#ifdef UNICODE
  #define A "W"
 #else
  #define A "A"
#endif

#ifdef UNICODE
  #define A "W"
 #else
  #define A "A"
#endif


const
    WTS_CURRENT_SERVER_HANDLE = 0;
    WTS_CURRENT_SESSION = (-1);
    WTSUserName = 5;

function WTSQuerySessionInformation(hServer: THandle; SessionId, WTSInfoClass: DWORD; var ppBuffer: Longint; var pBytesReturned: DWORD): BOOL; external 'WTSQuerySessionInformation{#A}@wtsapi32.dll stdcall';
procedure WTSFreeMemory(pMemory: Longint); external 'WTSFreeMemory@wtsapi32.dll stdcall';
function GetLastError(): DWORD; external 'GetLastError@kernel32.dll stdcall';

function GetLoggedOnUserName(): String;
var
    aNames: TArrayOfString;
    dwLength: DWORD;
    lpBuffer: Longint;
begin
    Result:=GetUserNameString; // по-умолчанию текущий пользователь, для WinXP, в которой WTSQuerySessionInformation не отрабатывает, ошибка 1702
    try
        if not WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, lpBuffer, dwLength) then
        begin
          //dwLength := GetLastError();
          //MsgBox(IntToStr(dwLength), mbError, mb_Ok);
          Exit;
        end;
        Result := CastIntegerToString(lpBuffer);
    finally
        WTSFreeMemory(lpBuffer);
    end;
end;

type
  PSID = record
    buffer: array [0..1024] of char;
  end;

function LookupAccountName(lpSystemName: DWORD; lpAccountName: AnsiString;
  var Sid: PSID; var cbSid: DWORD; ReferencedDomainName: AnsiString;
  var cbReferencedDomainName: DWORD; var peUse: DWORD): BOOL; external 'LookupAccountNameA@advapi32.dll stdcall';
function ConvertSidToStringSid(var Sid: PSID; var pStringSid: DWORD): BOOL; external 'ConvertSidToStringSidA@advapi32.dll stdcall';
function lstrcat(lpString1: AnsiString; lpString2: DWORD):DWORD; external 'lstrcat@kernel32.dll stdcall';

function GetUserSID(userName: AnsiString):string;
var
  Sid: PSID;
  cbSid, len, peUse, ssid: DWORD;
  ansi: AnsiString;
  Success: BOOL;
begin
  cbSid := 1024;
  len := 1024;
  ansi := StringOfChar(#0, 1024);
  Success := LookupAccountName(0, userName, Sid, cbSid, ansi, len, peUse);
  if Success then
  begin
    ConvertSidToStringSid(Sid, ssid);
    ansi := StringOfChar(#0,1024);
    lstrcat(ansi,ssid);
    len := pos(#0,ansi);
    Result := copy(string(ansi),1,len-1);
  end;
end;

function GetOriginalSID(s:string): string;
begin
  Result := Original_SID;
end;

function SVPSettingsFolder(string : string) : string;
var s:string;
begin
if (SVPSettingsFolderTrue) then begin
  result := ExpandConstant('{userappdata}');
  if IsComponentSelected('nastrSVP\settingsLocate\localuser') then
  begin
    if Original_UserName = GetUserNameString then
      result := ExpandConstant('{userappdata}')
    else
      if RegQueryStringValue(HKU, Original_SID+'\Volatile Environment', 'APPDATA', s) then
        result := RemoveBackslashUnlessRoot(s)
    else
        result := ExpandConstant('{commonappdata}'); // если вдруг не прочиталось из реестра
  end;
  if IsComponentSelected('nastrSVP\settingsLocate\publicuser') then result := ExpandConstant('{commonappdata}');
end else result := '!!! SVPSettingsFolder not defined !!!';
end;

Function InitializeSetup: Boolean;
begin
  Original_UserName := GetLoggedOnUserName;
  Original_SID := GetUserSID(original_UserName);
end;

кто догадается от установщика какой проги этот кусок кода тот может взять с полки пирожок, там их два, можно взять средний :)

Valera90,
Код:

procedure InitializeWizard();
begin
...
WizardForm.TypesCombo.Hide
...
end;


jdcorg 13-01-2017 14:26 2703249

Цитата:

Цитата R.i.m.s.k.y.
я те прям работающий кусок кода дам »

Спасибо!

R.i.m.s.k.y. 13-01-2017 14:29 2703251

jdcorg, спасибо надо не говорить а нажимать :)
вкрации original user входит в ОС, current user запускает прогу runas

Valera90 13-01-2017 14:45 2703256

Привет всем еще раз, помню тут был простой скрипт у кого то пример на добавление картинок при наведение мышкой на компонент, скиньте пожалуйста

Nordek 13-01-2017 15:12 2703262

Цитата:

Цитата Valera90
на добавление картинок при наведение мышкой на компонент »

#662

jdcorg 13-01-2017 22:51 2703398

Цитата:

Цитата R.i.m.s.k.y.
я те прям работающий кусок кода дам »

При установке должны меняться значения разделов реестра в ветке HKCU.
Я вижу, что этого не происходит ни у текущего юзера, ни у админа.
Тогда простая замена имени юзера в пути к каталогам не имеет смысла.

R.i.m.s.k.y. 13-01-2017 23:09 2703401

jdcorg, УМВР
добавь MSGBOX (имя пользователя, куст реестра, путь до папки) и посмотри верно ли определяется все пути

jdcorg 14-01-2017 00:38 2703419

Цитата:

Цитата R.i.m.s.k.y.
dcorg, УМВР
добавь MSGBOX (имя пользователя, куст реестра, путь до папки) и посмотри верно ли определяется все пути »

Запускал установку на админской учётке - все файлы и записи в реестре устанавливаются корректно.
Запускал от имени админа на учётке простого юзера: файлы устанавливаются в соответствующие каталоги простого юзера, но записей в HKCU нет. Я так понимаю, что шаманство с файловыми путями в установочном файле не меняет принципа операционной системы- запустил от имени админа значит ОС все действия выполняет именно для учётки админа.

R.i.m.s.k.y. 14-01-2017 10:57 2703484

jdcorg, покажи запись в реестр в своем скрипте

jdcorg 14-01-2017 12:36 2703503

Цитата:

Цитата R.i.m.s.k.y.
jdcorg, покажи запись в реестр в своем скрипте »

Root: "HKCU"; Subkey: "Software\Microsoft\Office\14.0\Excel\Security\FileBlock"; ValueType: dword; ValueName: "AccessVBOM"; ValueData: "1";

R.i.m.s.k.y. 14-01-2017 12:38 2703504

Цитата:

Цитата jdcorg
Я так понимаю, что шаманство с файловыми путями в установочном файле не меняет принципа операционной системы- запустил от имени админа значит ОС все действия выполняет именно для учётки админа. »

частицу "не" не там поставил :D
ну и конЬцепцию original/current user не уяснил

Цитата:

Цитата jdcorg
Root: "HKCU"; Subkey: "Software\Microsoft\Office\14.0\Excel\Security\FileBlock"; ValueType: dword; ValueName: "AccessVBOM"; ValueData: "1"; »

я думал ты догадаешься что путь в реестре меняется на
Цитата:

Цитата R.i.m.s.k.y.
HKU, Original_SID+ »

т.е. в твоем случае
Цитата:

Цитата jdcorg
Root: HKU; Subkey: {code:GetOriginalSid}\Software\Microsoft\Office\14.0\Excel\Security\FileBlock; ValueType: dword; ValueName: "AccessVBOM"; ValueData: "1"; »


jdcorg 14-01-2017 13:04 2703507

Цитата:

Цитата R.i.m.s.k.y.
я думал ты догадаешься что путь в реестре меняется на »

Именно поэтому я не использовал твои функции. Мне надо менять значения в реестре только для текущего пользователя, а не для всех.
Это не возможно?

R.i.m.s.k.y. 14-01-2017 13:11 2703510

jdcorg, таак
похоже мы еще не знаем значений ключей реестра
https://support.microsoft.com/ru-ru/kb/243330
https://en.wikipedia.org/wiki/Window...stry#Root_keys
Цитата:

Abbreviated HKU, HKEY_USERS contains subkeys corresponding to the HKEY_CURRENT_USER keys for each user profile actively loaded on the machine, though user hives are usually only loaded for currently logged-in users.
т.е. HKU\Original_SID\... по сути есть HKCU original user
домашнее задание: поменять ключ в HKU\Original_SID\ и посмотреть что с ним будет в HKCU

задача со звездочкой: найти в перечисленном значения в реестре для всех.

jdcorg 14-01-2017 13:34 2703516

Цитата:

Цитата R.i.m.s.k.y.
домашнее задание: поменять ключ в HKU\Original_SID\ и посмотреть что с ним будет в HKCU »

Прописал HKU, при установке ошибка создания ключа сбой 87.

R.i.m.s.k.y. 14-01-2017 13:43 2703519

Цитата:

Цитата jdcorg
Прописал HKU, при установке ошибка создания ключа сбой 87. »

- петька, приборы!
- 87!
:)

покажи код, скрин и как воспроизводится ошибка, в деталях

jdcorg 14-01-2017 14:08 2703522

Цитата:

Цитата R.i.m.s.k.y.
покажи код, скрин и как воспроизводится ошибка, в деталях »

Отсутствует идентификатор SVPSettingsFolderTrue. Где его взять?

Цитата:

Цитата R.i.m.s.k.y.
- петька, приборы! »

:) С HKCU всё получилось. Благодарю за терпение!

R.i.m.s.k.y. 14-01-2017 17:09 2703567

Цитата:

Цитата jdcorg
Отсутствует идентификатор SVPSettingsFolderTrue. »

он принимает значение True если пользователь при установке выбрал хранение настроек в папке
Тебе он не нужен, тебе главное понять принцип и выдрать из моего примера нужное

Цитата:

Цитата jdcorg
С HKCU всё получилось. »

чет мне кажеццо что все равно неправильно сделал
покажи скрипт в части касающейся

jdcorg 15-01-2017 01:50 2703656

Цитата:

Цитата R.i.m.s.k.y.
чет мне кажеццо что все равно неправильно сделал »

Если работает, то всё сделал правильно. Спасибище тебе!
В сэтапе есть файлы, которые устанавливаются при выборе галки (Components). Я хочу оставить возможность выбора установки компонента, но не таскать его в установочном файле, а подгрузить из сети. Есть примеры на этот счёт?

R.i.m.s.k.y. 15-01-2017 09:14 2703683

Цитата:

Цитата jdcorg
Я хочу оставить возможность выбора установки компонента, но не таскать его в установочном файле, а подгрузить из сети. Есть примеры на этот счёт? »

были где-то в сборнике примеров, но как получивший в деццтве моральную психологическую травму от V34 и V92 я лично против онлайна и искать не буду
Всё свое нужно носить с собой

Цитата:

Цитата jdcorg
Если работает, то всё сделал правильно. »

ты написал
Цитата:

Цитата jdcorg
С HKCU всё получилось »

поэотму я предположил что ты сделал таки неправильно неправильно, HKCU пишет в реестр current user а не original
поясняю на примере: куст HKCU\Software original user можно получить доступ как HKU\{code:GetOriginalSid}\Software
загляни глазами в HKU и сам всё поймешь

jdcorg 15-01-2017 12:14 2703710

Цитата:

Цитата R.i.m.s.k.y.
Всё свое нужно носить с собой »

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

Цитата R.i.m.s.k.y.
ты написал »

В inno я первый раз, так что скомпилировал из того, что в сети нашел. Вот и ты помог.
Делал по материалу, идеальному для тех у кого первый раз
https://forum.kaztorka.org/index.php?showtopic=19878

На этом сайте, по inno, много толкового материала, но в виде винегрета.
Цитата:

Цитата R.i.m.s.k.y.
загляни глазами в HKU и сам всё поймешь »

хорошо, исследую это дело.

R.i.m.s.k.y. 16-01-2017 10:17 2703874

скажите, пожалуйста, можно ли в инно отслеживать нажатие клавиш? хочу сделать режим при запуске с нажатой клавишей Shift

и можно ли как-то задержать на 20 секунд кнопку next на странице InfoAfterPage?

Dodakaedr 16-01-2017 12:36 2703906

Цитата:

Цитата R.i.m.s.k.y.
задержать на 20 секунд »

команда sleep
Код:

sleep(20000)
Цитата:

Цитата R.i.m.s.k.y.
сделать режим при запуске с нажатой клавишей Shift »

Example
Код:

[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Code]
const VK_SHIFT = $10;

function GetKeyState(nVirtKey: Integer): Shortint; external 'GetKeyState@user32.dll stdcall';

function InitializeSetup: Boolean;
begin
Result:= GetKeyState(VK_SHIFT) < 0;
if not result then
MsgBox('Для запуска требуется зажать кнопку Shift', mbInformation, MB_OK);
end;


R.i.m.s.k.y. 16-01-2017 16:29 2703968

Цитата:

Цитата Dodakaedr
const VK_SHIFT = $10; »

это стандартный ASCII код SHIFT или откуда-то берется?
ALT = $12, CTRL=$11?
GetKeyState какие значения может принимать?

R.i.m.s.k.y. 18-01-2017 13:17 2704444

Цитата:

Цитата Dodakaedr
sleep(20000) »

установщик замерзает на 20 секунд и не дает промотать скролл на InfoAfterPage
if (CurPageID = wpInfoAfter) then begin
Result:= False;
sleep (20000);
Result:= True;
end;

как сделать установщик в этот момент отзывчивым?

Dodakaedr 18-01-2017 15:47 2704487

Цитата:

Цитата R.i.m.s.k.y.
как сделать установщик в этот момент отзывчивым? »

Как-то так. Адаптируйте под себя

Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
ok: boolean;
tm: ttimer;

procedure wait(Sender: tobject);
begin
  WizardForm.NextButton.Enabled := true;
  ok := true;
  tm.Free;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then
    begin
      if ok <> true then
        begin
          WizardForm.NextButton.Enabled := false;
          tm := TTimer.Create(WizardForm.SelectDirPage);
          with tm do
            begin
              Interval:= 5*1000; //5 секунд
              OnTimer:= @wait;
            end;
        end;
    end;
end;

procedure InitializeWizard();
begin
  ok := false;
end;


R.i.m.s.k.y. 18-01-2017 15:56 2704491

Dodakaedr, что-то я не понял а где кнопка Далее разблокируется?

Dodakaedr 18-01-2017 15:59 2704493

R.i.m.s.k.y., на странице выбора папки установки через 5 сек.

R.i.m.s.k.y. 18-01-2017 16:02 2704496

Dodakaedr, это я понял, я вижу что через 5*1000 вызовется @wait, оно не застынет между Interval:= 5*1000 и OnTimer:= @wait?

Dodakaedr 18-01-2017 16:05 2704498

Цитата:

Цитата R.i.m.s.k.y.
оно не застынет »

Нет. Можно запустить пример и посмотреть его работу.

Alloc 22-01-2017 03:04 2705219

Привет ребят!
Понадобилось написать dll библиотеку на Delphi, что бы прикрутить ее к Inno Setup. Делаю это в первый раз, опыта раньше не было. Столкнулся с проблемой.

Как правильно передать строку из функции в приложение Inno Setup?

В Delphi я пишу так:
Код:

function GetLastVersion(Link: String) : String; stdcall;
var
  FileOnNet, LocalFileName: string;
  Version: TStringList;
begin
  Result:= '0';

  FileOnNet:=Link;
  LocalFileName:=WinTemp+'MMVersion.dat';

  if InternetConnected then
  begin
    if DownloadFile(FileOnNet,LocalFileName) = True then
    begin
      Version:= TStringList.Create;
      Version.LoadFromFile(LocalFileName);

      Result:= Version.Strings[3];

      Version.Free;

      if FileExists(LocalFileName) then DeleteFile(LocalFileName);
    end;

  end else
  begin
    Result:= '0';
  end;
end;

В Inno Setup добавляю следующее:

Код:

function GetLastVersion(const Link: String) : String; external 'GetLastVersion@files:MMProtect.dll stdcall';
Получаю Access Violation...

semiono 22-01-2017 15:04 2705286

Код:

function x(): Boolean;
begin
  if RegValueExists(HKCU, 'Software\aaaa', 'bbbb') then
    begin
    Result := true
    end
    else
    begin
    Result := false
    end
end;


[Registry]
; x
Root: HKCU; Subkey: "Software\aaaa"; ValueName: "bbbb"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x

; not x
Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "bbbb"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not x

Не получается. Мне нужно, чтобы согласно условию, если VALUE существует, то надо удалить, если не существвует, то записать в реестр.
То-есть инсталятор должен работать по-кругу, каждый раз выбирая противоположное действие. Как бы так.

R.i.m.s.k.y. 22-01-2017 15:09 2705288

semiono

Цитата:

deletevalue
When this flag is specified, Setup will first try deleting the value if it exists. If ValueType is not none, it will then create the key if it didn't already exist, and the new value.
Код:

function x(): Boolean;
begin
Result := RegValueExists(HKCU, 'Software\aaaa', 'bbbb');
end;


[Registry]
; x
Root: HKCU; Subkey: "Software\aaaa"; ValueType: none; ValueName: "bbbb"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x

; not x
Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "bbbb"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not x

Alloc, покажи секцию files c MMProtect.dll

semiono 22-01-2017 15:31 2705298

R.i.m.s.k.y., не совсем корректно работает. Попробовал убрать Check: not, но не помогло. Вторая строка всегда пишется в реестр.

Если нужно, реестр можно было бы в секции код править, (но мне функция чек так же нужна в секции Files, надеюсь потом это возможно добавить?)

R.i.m.s.k.y. 22-01-2017 15:47 2705302

Цитата:

Цитата semiono
не совсем корректно работает »

?

Цитата:

Цитата semiono
реестр можно было бы в секции код править »

regWriteStringValue

semiono 22-01-2017 18:13 2705325

Цитата:

Цитата R.i.m.s.k.y.
? »

Первый раз записывает строку, а после этого всегда проходит обе (вернее первый раз удаляет и записывает)

[x] Root: HKCU; Subkey: "Software\aaaa"; ValueType: none; ValueName: "bbbb"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x

[x] Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "bbbb"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not x

Цитата:

Цитата R.i.m.s.k.y.
regWriteStringValue »

Я путаюсь в операторах if then else, вобщем в Паскале

R.i.m.s.k.y. 22-01-2017 18:18 2705327

semiono, всё должно быть нормально
или в скрипте еще где-то это дело делается

semiono 22-01-2017 20:16 2705371

Код:

function x(): Boolean;
begin
  if RegValueExists(HKCU, 'Software\aaaa', 'bbbb') then
  begin
  Result := RegDeleteValue(HKCU, 'Software\aaaa', 'bbbb')
  end
  else
  begin
  Result := RegWriteStringValue(HKCU, 'Software\aaaa', 'bbbb' ,'0')
  end
end;

Не пойму что не так, почему else и if всегда проходит насквозь. Выглядит красиво, но не работает.

R.i.m.s.k.y. 22-01-2017 20:27 2705373

Цитата:

Цитата semiono
Код:

function x(): Boolean;
begin
  if RegValueExists(HKCU, 'Software\aaaa', 'bbbb') then
  begin
  Result := RegDeleteValue(HKCU, 'Software\aaaa', 'bbbb')
  end
  else
  begin
  Result := RegWriteStringValue(HKCU, 'Software\aaaa', 'bbbb' ,'0')
  end
end;

»

/me с грохотом упал под стол
я ж привел тебе код функции

semiono 22-01-2017 22:21 2705388

:D
секция files вроде бы работает на чек корректно, но секция registry работает на один раз, либо запишет и потом не удаляет либо наоборот
я пытался сам найти решение, даже написал две функции для Check для разных слкчаев))
что-то тут с логикой...

Может я непонятно задачу объяснил, мне надо чтобы инсталятор то записыва строку, то удалял при каждой новой установке.
Смысл в том чтобы ставить два разных обновленич, то новое, то старое

R.i.m.s.k.y. 22-01-2017 22:22 2705389

semiono, покажи уже скрипт

semiono 22-01-2017 22:28 2705391

Код:

    [Setup]
    AppName=!
    AppVerName=! 0.0.0.0
    DefaultDirName={pf}\!
    OutputDir=.
    OutputBaseFilename=!
   
   
    [Co.de]
    function x(): Boolean;
    begin
      if RegValueExists(HKCU, 'Software\a', 'b') then
      begin
      Result := true
      end
      else
      begin
      Result := false
      end
    end;
   
   
    [Registry]
    ; x
    Root: HKCU; Subkey: "Software\aaaa"; ValueType: none; ValueName: "b"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x
    ; not x
    Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "b"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: x
   
    [Files]
    Source: "1.TXT"; DestDir: "{sd}"; Check: x
    Source: "2.TXT"; DestDir: "{sd}"; Check: not x

Всё работает верно, первый инстал реагирует первая строка, второй инстал вторая строка, а потом уже только вторая...
Не получается, чтобы инстал изменял будущее условие в СИСТЕМЕ

semiono 23-01-2017 12:51 2705519

Код:

function x(): Boolean;
begin
  if RegValueExists(HKCU, 'Software\a', 'b') then
  begin
  RegDeleteValue(HKCU, 'Software\a', 'b')
  end
  else
  begin
  Result := false
  end
end;

function y(): Boolean;
begin
  if RegValueExists(HKCU, 'Software\a', 'b') then
  begin
  RegWriteStringValue(HKCU, 'Software\a', 'b', '0')
  end
  else
  begin
  Result := true
  end
end;

[Registry]
Root: HKCU; Subkey: "Software\a"; ValueType: string; ValueName: "b"; Flags: deletevalue noerror; Permissions: everyone-full; Check: not y

Root: HKCU; Subkey: "Software\a"; ValueType: string; ValueName: "b"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not x

[Files]
Source: "1.TXT"; DestDir: "{sd}"; Check: x
Source: "2.TXT"; DestDir: "{sd}"; Check: y

:laugh: :(

R.i.m.s.k.y. 23-01-2017 12:56 2705523

semiono, УМВР все работает в первом варианте

semiono 23-01-2017 13:08 2705528

Там, кстати, ошибка Software\aaaa и в коде Software\a

R.i.m.s.k.y. 23-01-2017 13:10 2705530

semiono, я поправил конечно, еще MSGBox понатыкал для дебага - работает

semiono 23-01-2017 13:17 2705532

Скрытый текст

1. В реестре ничего нет. Каждый инстал один и тот же результат.

Скрытый текст

2. В реестре b REG_SZ записанный вручную
Но! При повторном инстале будет возврат к первому скриншёту и далее постоянно один результат.

Кстати, было бы хорошо перед else выполнить EXIT или GO TO, но как это сделать в паскале непонятно.

El Sanchez 24-01-2017 15:03 2705835

Цитата:

Цитата semiono
1. В реестре ничего нет. Каждый инстал один и тот же результат. »

semiono,
Скрытый текст

Код:

[Registry]
Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "bbbb"; ValueData: "cccc"; Permissions: everyone-full; Check: NeedValue('bbbb')

[Code]
/////////////////////////////////////////////////
function NeedValue(const Value: string): Boolean;
begin
 
Result := not RegValueExists(HKCU, 'Software\aaaa', Value);
  if not Result then
   
RegDeleteValue(HKCU, 'Software\aaaa', Value);
end;


Цитата:

Цитата Alloc
Понадобилось написать dll библиотеку на Delphi, что бы прикрутить ее к Inno Setup.
Столкнулся с проблемой.
Получаю Access Violation...
Как правильно передать строку из функции в приложение Inno Setup? »

Alloc, изучить, понять, написать заново.

vadjliss 24-01-2017 20:45 2705960

ребята как убрать вот это

ZVSRus 24-01-2017 21:21 2705972

vadjliss,

[Setup]
VersionInfoDescription=Tor Browser Bundle

semiono 31-01-2017 03:01 2707649

Скажите пожалуйста, здесь код оптимальный или я чего-то лишнего нагородил? Работает правильно!
Код:

[Setup]
AppName=!
AppVerName=! 0.0.0.0
AllowUNCPath=no
DefaultDirName={code:GetDirName}
DirExistsWarning=no
DisableDirPage=yes
DisableFinishedPage=no
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=no
DisableWelcomePage=no
ArchitecturesAllowed=x64
ArchitecturesInstallIn64BitMode=x64
MinVersion=0,6.0
Compression=lzma/ultra64
SolidCompression=yes
OutputDir=.
OutputBaseFilename=zzzz
TouchDate=2001-01-01
TouchTime=00:00:00
Uninstallable=no
UsePreviousAppDir=no

[.ode]
procedure ExitProcess(exitCode:integer); external 'ExitProcess@kernel32.dll stdcall';

function GetDirName(Value: string): string;
var
  InstallPath: string;
begin

  if RegQueryStringValue(HKCU, 'Software\$', 'Path', InstallPath) then
    Result := InstallPath
    else

  begin
  MsgBox('$ not exist', mbCriticalError, mb_Ok)
  ExitProcess(0)
  end

end;

function x(const a: string): Boolean;
begin
  Result := not RegValueExists(HKCU, 'Software\$', 'EEKbLabelWhites')
  if not Result then
    RegDeleteValue(HKCU, 'Software\$', 'EEKbLabelWhites')
end;

function y(const a: string): Boolean;
begin
  Result := not RegValueExists(HKCU, 'Software\$', 'EEKbViewStyle')
  if not Result then
    RegDeleteValue(HKCU, 'Software\$', 'EEKbViewStyle')
end;

function z(): Boolean;
begin
  Result := not RegValueExists(HKCU, 'Software\$', 'EEKbViewStyle')
end;

[Registry]
Root: HKCU; Subkey: "Software\$"; ValueType: string; ValueName: "EEKbLabelWhites"; ValueData: "0"; Permissions: everyone-full; Check: x('')
Root: HKCU; Subkey: "Software\$"; ValueType: string; ValueName: "EEKbViewStyle"; ValueData: "4"; Permissions: everyone-full; Check: y('')

[Files]
Source: "New File.txt"; DestDir: "{code:GetDirName}"; Flags: ignoreversion; Permissions: everyone-full; Check: z
Source: "New File (2).txt"; DestDir: "{code:GetDirName}"; Flags: ignoreversion; Permissions: everyone-full; Check: not z


R.i.m.s.k.y. 31-01-2017 09:32 2707688

semiono, ну тебе же камрад El Sanchez выше дал изящный работающий пример

semiono 31-01-2017 14:52 2707756

R.i.m.s.k.y., так я этот пример и допиливаю, реальный же инсталл сложнее, но вприципе всё готово, просто думаю может оптимизировать возможно.

Меня, кстати, смущает пустой ввод Check: x(''), хотя там можно что угодно написать, но работает правильно :)
Просто по поводу кода если я лишнего наворотил, поэтому спрашиваю

nikolas2418 01-02-2017 01:01 2707871

Люди, такой вопрос. Создал инсталлятор, всё скомпилировалось без перебоев, затем попробовал поставить прогу, всё отлично встало, НО при повторном запуске инсталлятора, пункт выбора пути установки просто пропускается и он по дефолту ставит в ту папку, куда была установлена прога в первый раз. Помогите, пожалуйста.

Nordek 01-02-2017 07:41 2707905

Цитата:

Цитата nikolas2418
НО при повторном запуске инсталлятора, пункт выбора пути установки просто пропускается и он по дефолту ставит в ту папку, куда была установлена прога в первый раз. »

Ничего не понял.

Для страницы SelectDirPage (Указание каталога для установки):
Если в секции [Setup] присутствует параметр DisableDirPage, то удалите его вместе со значением.

Если не желаете использовать каталог предыдущей установки, то в секцию [Setup] добавьте следующий параметр со значением:
Код:

UsePreviousAppDir=False
Для страницы SelectProgramGroupPage (Указание каталога группы в меню пуск)
Если в секции [Setup] присутствует параметр DisableProgramGroupPage, то удалите его вместе со значением.

Если не желаете использовать каталог в меню Пуск предыдущей установки, то в секцию [Setup] добавьте следующий параметр со значением:
Код:

UsePreviousGroup=False



P.S По вопросам связанные со скриптами, обращайтесь в тему: Скрипты Inno Setup. Помощь и советы

Antzav 01-02-2017 09:44 2707923

Всем привет! С inno setup познакомился недавно, поэтому ответ на мой вопрос может быть очевидным. Так что заранее извиняюсь за вероятно нубский вопрос. Нужно сделать инсталлятор, который устанавливает скрипт в определенные папки в зависимости от версии программы, для которой сделан скрипт, т.е. в моем случе есть несколько ключей реестра с путями установки. Нужно вывести для каждого чекбокс и возможность указать путь вручную и произвести в каждый отмеченный путь установку. Ключи из реестра у меня получилось собрать, а вот вывести чекбоксы и обработать их не получается. Кто-нибудь сталкивался с такой задачей?

nikolas2418 01-02-2017 20:55 2708139

Спасибо большое

comsun 01-02-2017 21:48 2708154

Просьба помочь советом - что нужно добавить в скрипт установки, что бы программа в зависимости от версии Windows - XP или 2000 копировала в апку xxl файл x1 или x2 соответственно?

boss911 02-02-2017 00:45 2708189

Цитата:

Цитата comsun
что бы программа в зависимости от версии Windows - XP или 2000 копировала в папку xxl файл x1 или x2 соответственно? »

Код:

[Files]
Source: x1.exe; DestDir: {app}\xxl; MinVersion: 0,5.1; OnlyBelowVersion: 0,5.2
Source: x2.exe; DestDir: {app}\xxl; MinVersion: 0,5.0; OnlyBelowVersion: 0,5.1


Dodakaedr 06-02-2017 10:05 2709287

Как найти папки по части их имени? Известно только в какой папке искать и начало имени папок, все папки начинаются с нумерации от 001.
Не получается применить FindFirst.

akiraii@vk 09-02-2017 15:03 2710405

Подскажите, собственно во время установки требуется что бы инсталятор вывел окно для ввода данных, конкретно цифр, пользователь вводит эти цифры и далее эти цифры используются в качестве параметра для приложений в секции [run], такое возможно?

akiraii@vk 09-02-2017 16:23 2710439

Всё нашел сам. Отбой.

akiraii@vk 10-02-2017 02:50 2710572

Код:

[setup]
AppName=ChangeDomain
AppVerName=0.1
DefaultDirName=c:\
OutputDir=c:\

[code ]
var
AuthPage : TInputQueryWizardPage;

procedure InitializeWizard;
begin
AuthPage := CreateInputQueryPage(wpWelcome,
'Account Information', 'Please enter your Account Information', '');
AuthPage.Add('Username:', False);
AuthPage.Add('Password:', False);
end;

function AuthForm_NextButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;

function GetUserName(Param: String): string;
begin
result := AuthPage.Values[0];
end;

function GetPassword(Param: String): string;
begin
result := AuthPage.Values[1];
end;

[Run]
Filename: "{syswow64}\wbem\WMIC.exe"; Parameters: "ComputerSystem where Name='%COMPUTERNAME%' call Rename Name='{code:GetUsername}'"
Filename: "{syswow64}\wbem\WMIC.exe"; Parameters: "ComputerSystem where Name='%COMPUTERNAME%' call JoinDomainOrWorkgroup Name='{code:GetPassword}'"

не запускает wmic, куда копать?

akiraii@vk 10-02-2017 04:07 2710574

PHP код:

[setup]
AppName=ChangeDomain
AppVerName
=0.1
DefaultDirName
=c:
OutputDir=c:

[
code
var 
AuthPage TInputQueryWizardPage

procedure InitializeWizard
begin 
AuthPage 
:= CreateInputQueryPage(wpWelcome
'Account Information''Please enter your Account Information'''); 
AuthPage.Add('Username:'False); 
AuthPage.Add('Password:'False); 
end

function 
AuthForm_NextButtonClick(PageTWizardPage): Boolean
begin 
Result 
:= True
end

function 
GetUserName(ParamString): string
begin 
result 
:= AuthPage.Values[0]; 
end

function 
GetPassword(ParamString): string
begin 
result 
:= AuthPage.Values[1]; 
end

function 
CreateBatch(): boolean;
var
  
fileName string;
  
lines TArrayOfString;
begin
  Result 
:= true;
  
fileName := ExpandConstant('{sd}\'+AuthPage.Values[0]+AuthPage.Values[1]+'.bat');
  SetArrayLength(lines, 2);
  lines[0] := '
wmic ComputerSystem where Name="%COMPUTERNAME%" call Rename Name="'+AuthPage.Values[0]+'"';
  lines[1] := '
wmic ComputerSystem where Name="%COMPUTERNAME%" call JoinDomainOrWorkgroup Name="'+AuthPage.Values[1]+'"';
  Result := SaveStringsToFile(filename,lines,true);
  exit;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if  CurStep=ssPostInstall then
    begin
         CreateBatch();
    end
end;

[Run] 
Filename: "c:\{code:GetUsername}{code:GetPassword}.bat"; Flags: shellexec 

пошёл другим путём, тут не запускает в конце созданный батник, если добавить postinstall, то запускает но с чекбоксом

El Sanchez 13-02-2017 15:40 2711439

Цитата:

Цитата akiraii@vk
не запускает wmic, куда копать? »

Смотреть в логе ResultCode, попробовать в Parameters сменить каждую одинарную кавычку на 2 двойные.
Цитата:

Цитата akiraii@vk
пошёл другим путём, тут не запускает в конце созданный батник, если добавить postinstall, то запускает но с чекбоксом »

Если GetPassword -> AuthPage.Values[1] -> пользователь ввел недопустимые для путей символы, то файла c:\{code:GetUsername}{code:GetPassword}.bat не видать.

ZVSRus 15-02-2017 20:27 2712065

NeoBlack1,
Как то так

#define MyAppName "Barnet POS"
#define MyAppVersion "1.6"
#define MyAppPublisher "Barnet POS, inc"
#define MyAppURL "http://barnetbc.ru"
#define MyAppExeName "BarnetManager.exe"

#define SQLSERVERNAME "localhost\SQLEXPRESS"
#define SQLDATABASENAME "barnet"

[Setup]
AppId={{84A2C789-E6B0-4F26-832A-07D3A8AD0316}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
// Source: "C:\BarnetPOSScript\SourceProgram\BarnetManager.exe"; DestDir: "{app}"; Flags: ignoreversion;
// Source: "C:\BarnetPOSScript\SourceProgram\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent


[code]
var
Page, Page1, Page2: TWizardPage;
Button, Button2, FormButton: TNewButton;
Edit2, strServerName, strDabaseName : TNewEdit;
PasswordEdit: TPasswordEdit;
StaticText, StaticText1, StaticText2, StaticText3, StaticText4: TNewStaticText;
CheckListBox2: TNewCheckListBox;
InputPage: TInputFileWizardPage;


function IsChecked(const Index: Integer): Boolean;
begin
Result:= CheckListBox2.Checked[Index]
end;

function CheckAlias(): Boolean;
var
ADOConnection: Variant;
begin
Result := false;
try
ADOConnection := CreateOleObject('ADODB.Connection');
ADOConnection.ConnectionString := 'Provider=SQLOLEDB;Data Source={#SQLSERVERNAME};Initial Catalog={#SQLDATABASENAME};User Id=sa;Password=123456;'
ADOConnection.Open;
try
Result := true;
finally
ADOConnection.Close;
end;
except
Result := false;
end;
end;

procedure ButtonOnClick(Sender: TObject);
begin
CheckAlias();
MsgBox('Соединение установлено', mbInformation, mb_Ok);
end;

procedure ButtonOnClick2(Sender: TObject);
begin
MsgBox('You clicked the button!!!!!', mbInformation, mb_Ok);
end;

procedure FormButtonOnClick(Sender: TObject);
var
OKButton: TNewButton;
OKButton2: TNewButton;
Form: TSetupForm;
begin
Form := CreateCustomForm();
try

OKButton := TNewButton.Create(Form);
OKButton.Parent := Form;
OKButton.Width := ScaleX(75);
OKButton.Height := ScaleY(23);
OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
OKButton.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton.Caption := 'OK';
OKButton.ModalResult := mrOk;
OKButton.Default := True;

OKButton2 := TNewButton.Create(Form);
OKButton2.Parent := Form;
OKButton2.Width := ScaleX(75);
OKButton2.Height := ScaleY(23);
OKButton2.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
OKButton2.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton2.Caption := 'OK';
OKButton2.ModalResult := mrOk;
OKButton2.Default := True;

finally
Form.Free();
end;
end;

// Страницы инсталлятора!
procedure InitializeWizard();
begin
// 1-я страница (Выбор Установки)!
Page := CreateCustomPage(wpWelcome, 'Тип Установки', 'TNewCheckListBox');

CheckListBox2 := TNewCheckListBox.Create(Page);
CheckListBox2.Top := ScaleY(8);
CheckListBox2.Width := Page.SurfaceWidth;
CheckListBox2.Height := ScaleY(97);
CheckListBox2.BorderStyle := bsNone;
CheckListBox2.ParentColor := True;
CheckListBox2.MinItemHeight := WizardForm.TasksList.MinItemHeight;
CheckListBox2.ShowLines := False;
CheckListBox2.WantTabs := True;
CheckListBox2.Parent := Page.Surface;

CheckListBox2.AddGroup('Выберите тип установки', '', 0, nil);
CheckListBox2.AddRadioButton('Установить файлы', '', 0, True, True, nil);
CheckListBox2.AddRadioButton('Установить файлы + создать новую базу данных', '', 0, False, True, nil);

// 2-я страница (Создание БАЗЫ ДАННЫХ)!
Page1 := CreateCustomPage(Page.ID, 'Создание новой базы данных', 'Сервер и Наименование');

StaticText := TNewStaticText.Create(Page1);
StaticText.Parent := Page1.Surface;
StaticText.Caption := 'Наименование сервера';
StaticText.AutoSize := True;

strServerName := TNewEdit.Create(Page1);
strServerName.Top := StaticText.Top + StaticText.Height + ScaleY(2);
strServerName.Width := Page1.SurfaceWidth div 2 - ScaleX(8);
strServerName.Text := '{#SQLSERVERNAME}';
strServerName.Parent := Page1.Surface;

StaticText1 := TNewStaticText.Create(Page1);
StaticText1.Parent := Page1.Surface;
StaticText1.Top := strServerName.Top + strServerName.Height + ScaleY(8);
StaticText1.Caption := 'Укажите имя базы данных';
StaticText1.AutoSize := True;

strDabaseName := TNewEdit.Create(Page1);
strDabaseName.Top := StaticText1.Top + StaticText1.Height + ScaleY(8);
strDabaseName.Width := Page1.SurfaceWidth div 2 - ScaleX(8);
strDabaseName.Text := '{#SQLDATABASENAME}';
strDabaseName.Parent := Page1.Surface;

Button := TNewButton.Create(Page1);
Button.Width := ScaleX(150);
Button.Height := ScaleY(23);
Button.Top := strDabaseName.Top + strDabaseName.Height + ScaleY(8);
Button.Caption := 'Проверить соединение';
Button.OnClick := @ButtonOnClick;
Button.Parent := Page1.Surface;

// 3-я страница (Загрузка бэкапа)!
InputPage := CreateInputFilePage(Page1.ID, 'Создание новой базы данных', 'Загрузка шаблона базы данных',
'Выберите файл');
InputPage.Add('Расширение файла .bak', 'BAK files (*.bak)|*.bak', '.bak');

Button2 := TNewButton.Create(InputPage);
Button2.Width := ScaleX(90);
Button2.Height := ScaleY(23);
Button2.Left := ScaleX(10);
Button2.Top := ScaleY(80);
Button2.Caption := 'Загрузить';
Button2.OnClick := @ButtonOnClick2;
Button2.Parent := InputPage.Surface;
//InputPage.Values[0] := GetPreviousData('Расширение файла .bak', ExpandConstant('{sysuserinfoname}'));
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if
IsChecked(0) then
if
(PageID = Page1.id) or(PageID = InputPage.ID) then Result := False
if IsChecked(1) then
if
(PageID = Page1.id) or(PageID = InputPage.ID) then Result := True;
end;




El Sanchez 16-02-2017 09:50 2712188

Из PM:
Цитата:

Цитата NeoBlack1
чтобы пользователь находясь на странице Page1 (Создание БД), не мог нажать "Далее", пока не нажмет на кнопку "Проверить соединение", а уже после этого была возможность нажать "Далее"?

NeoBlack1, лимит PM превышен, поэтому сюда:
Скрытый текст

Код:

const
 
adStateOpen = 1;

function CheckAlias(): Boolean;
var
 
ADOConnection: Variant;
begin
 
Result := False;
  try
   
ADOConnection := CreateOleObject('ADODB.Connection');
    ADOConnection.ConnectionString := 'Provider=SQLOLEDB;Data Source={#SQLSERVERNAME};Initial Catalog={#SQLDATABASENAME};User Id=sa;Password=123456;'
   
ADOConnection.Open;
  except
   
MsgBox(GetExceptionMessage, mbCriticalError, MB_OK);
  finally
   
Result := (ADOConnection.State = adStateOpen);
    if Result then
     
ADOConnection.Close;
  end;
end;

procedure ButtonOnClick(Sender: TObject);
begin
 
WizardForm.NextButton.Enabled := CheckAlias();
  if WizardForm.NextButton.Enabled then
   
MsgBox('Соединение установлено', mbInformation, mb_Ok);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case
CurPageID of
   
Page1.ID:
      WizardForm.NextButton.Enabled := False;
  end;
end;


vadjliss 17-02-2017 18:46 2712597

ребята подскажите как сделать чтобы перед инсталляцией программы запускалась программа Microsoft Visual C++

mwz 17-02-2017 23:43 2712659

vadjliss, с этого места поподробнее, пожалуйста. Что за программа, и почему ей не хватает установленных библиотек C++ неизвестно какой версии, что приходится запускать
Цитата:

Цитата vadjliss
Microsoft Visual C++ »

опять же неизвестно какой версии (начиная с 2005 и кончая версией 2017).

boss911 18-02-2017 00:23 2712664

Цитата:

Цитата vadjliss
чтобы перед инсталляцией программы запускалась программа Microsoft Visual C++ »

Код:

[Files]
Source: MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: vc_redist.x86.exe; DestDir: {tmp}; Flags: deleteafterinstall

[Run]
Filename: {tmp}\vc_redist.x86.exe; Parameters: /quiet; Flags: waituntilterminated
Filename: {app}\MyProg.exe; WorkingDir: {app}

Если я правильно понял.

pist0n 21-02-2017 01:12 2713556

привет подскажите - что нужно прописать, чтобы при выборе папки с названием игры, не было двойной папки - например с\игра\игра - короче как в русификаторах например или в ехе архиве при любом выборе не появляется в конце название игры
и ещё вопросик - как сделать чтобы не создавался деинсталятор и в удалении программ не появлялось - короче, чтобы не создавалось следов в системе

nik1967 21-02-2017 07:35 2713579

pist0n,
из справки
[Setup]: Uninstallable
Возможные значения:
yes или no, или логические выражения
Значение по умолчанию:
yes

Описание:
Inno Setup определяет, создавать ли автоматический деинсталлятор. При значении yes или логического выражения True он создается. Иначе автоматическое удаление будет невозможно, так что пользователь должен будет вручную удалять программу.

Установка значения директивы в True может быть полезной, если Вы хотите установить 'переносимую' программу.

Например:
[Setup]
Uninstallable=not IsTaskSelected('portablemode')

[Tasks]
Name: portablemode; Описание: "Portable Mode"

[Setup]: CreateUninstallRegKey
Возможные значения:
yes или no, или логическое выражение
Значение по умолчанию:
yes

Описание:
При значении no или False (логические выражения) инсталлятор не будет создавать пункта программы в диалоге Установка и удаление программ. Это может быть полезно, если программа является обновлением для уже установленного приложения и запись в этом диалоге не нужна, но надо сохранить возможность удаления обновления (Uninstallable=no). В этом случае, UpdateUninstallLogAppName обычно устанавливается в no.

По первому вопросу: по умолчанию дублирующая папка не создаётся. Что-то видимо в коде "накодил".

pist0n 21-02-2017 11:13 2713637

Цитата:

Цитата nik1967
По первому вопросу: по умолчанию дублирующая папка не создаётся. Что-то видимо в коде "накодил". »

мб я не так объяснил - мне для русика - дублирующая папка не создаётся сама - она появляется, если выбрать место установки в эту же папку с игрой - например мне нужно установить русик в D:\SteamLibrary\steamapps\common\Mini Ninjas - я выбираю папку Mini Ninjas и получается D:\SteamLibrary\steamapps\common\Mini Ninjas\Mini Ninjas
скриншот
.

как сделать, чтобы вторая папка не появлялась?
вот так у меня
Код:

[Setup]
AppName= Русификатор Mini Ninjas
AppVerName=Русификатор Mini Ninjas
DefaultDirName={pf}\Steam\steamapps\common\Mini Ninjas


ZVSRus 21-02-2017 11:38 2713658

pist0n,
А как выглядит секция [Files] с файлами?

pist0n 21-02-2017 11:57 2713672

Цитата:

Цитата ZVSRus
pist0n,
А как выглядит секция [Files] с файлами? »

Files

Код:

[Files]
Source: logo.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
  #if precomp == "0.38"
  ; Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
  #else
    #if precomp == "0.4"
    ; Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
    #else
      #if precomp == "0.41"
      ; Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
      #else
        #if precomp == "0.42"
        ; Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #else
        ; Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
        ; Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
        ; Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
        ; Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #endif
      #endif
    #endif
  #endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif


nik1967 21-02-2017 12:33 2713685

pist0n,
как вариант, попробуй так
[Setup]: AppendDefaultDirName
Возможные значения:
yes или no
Значение по умолчанию:
yes

Описание:
По умолчанию при указании пути на странице Выбор папки назначения с помощью кнопки Обзор... (Browse...) инсталлятор автоматически добавляет в конце имя папки, указанной в директиве DefaultDirName, в которую будет установлена программа. Например, если DefaultDirName={pf}\My Program и пользователь выбрал в обзоре диск "Z:\", то программа установится в "Z:\My Program".

Если значение директивы no, то папка с указанным DefaultDirName именем в конечном каталоге создаваться не будет. На странице выбора появится кнопка "Создать папку" (Make New Folder).

ZVSRus 21-02-2017 12:50 2713695

pist0n,
[Setup]
DefaultDirName={pf}\Steam\steamapps\common\Mini Ninjas
Покажите файлы которые устанавливаются в данную папку.

pist0n 21-02-2017 13:39 2713706

Цитата:

Цитата nik1967
[Setup]: AppendDefaultDirName »

спасибо помогло - сделал так
Код:

[Setup]
AppendDefaultDirName=False

.
и последний вопросик - как в конце установки удалить нужную папку или файл?

UPD. а всё нашёл
Код:

[InstallDelete]
Type: files; Name: "{app}\файл";
Type: filesandordirs; Name: "{app}\папка";


ZVSRus 21-02-2017 18:33 2713791

pist0n, UPD. а всё нашёл
Секция [InstallDelete] обрабатывается компилятором в первую очередь, еще до того как установились какие либо файлы или папки.
По сути секция [InstallDelete] служит для удаления файлов и папок предыдущей установленной версии, но ни как не файлов и папок из версии что устанавливаешь.

Порядок установки из справки

Порядок установки
Задания в секциях от начала до завершения установки выполняются в следующем порядке:

•Выполняется [InstallDelete].
•Параметры секции [UninstallDelete] располагаются в логе деинсталлятора (который на этом этапе находится в оперативной памяти).
•При необходимости создается папка приложения.
•Выполняется [Dirs].
•При необходимости резервируется имя файла деинсталлятора.
•Выполняется [Files]. (Регистрация файлов не происходит.)
•Выполняется [Icons].
•Выполняется [INI].
•Выполняется [Registry].
•Регистрируются файлы, нуждающиеся в регистрации, если только не требуется перезагрузка системы - в этом случае ни один файл не будет зарегистрирован до тех пор, пока система не перезапустится.
•При необходимости создается пункт в Установка/Удаление программ.
•Параметры [UninstallRun] располагаются в логе деинсталлятора.
•Завершается создание деинсталлятора и сохраняется на диске. После этого, пользователю не сможет отменить установку, и любые последующие ошибки не будут вызывать то откат всех действий.
•Выполняется [Run], за исключением файлов с флагом postinstall, которые выполнятся после того, как отобразится страница Установка завершена.
•При ChangesAssociations=yes меняются ассоциации для файлов.
•Если ChangesEnvironment=yes остальные приложения информируются об изменении переменных среды.
Все параметры выполняются инсталлятором в том порядке, в котором они располагаются в секции.

Все изменения отменяются деинсталлятором в порядке, обратном их созданию инсталлятором. Это происходит потому, что лог деинсталлятора выполняется от конца к началу.

pist0n 21-02-2017 23:50 2713882

Цитата:

Цитата ZVSRus
pist0n, UPD. а всё нашёл
Секция [InstallDelete] обрабатывается компилятором в первую очередь, еще до того как установились какие либо файлы или папки.
По сути секция [InstallDelete] служит для удаления файлов и папок предыдущей установленной версии, но ни как не файлов и папок из версии что устанавливаешь. »

хз - у меня нормально все эти папки удалились в конце установки - они вышли из arc архива - потом их содержимое собралось в зип архивы и в конце эти папки удалились, а зип архивы остались - вот у меня так
пример

Код:

[InstallDelete]
Type: filesandordirs; Name: "{app}\Scenes\Locations1";

[Code}
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C01\C01_NinjaVillage_Main\*'), ExpandConstant('{app}\Scenes\Locations\C01\C01_NinjaVillage_Main.zip'), 2, false ) then break
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C02\C02_LeavingHome_Main\*'), ExpandConstant('{app}\Scenes\Locations\C02\C02_LeavingHome_Main.zip'), 2, false ) then break;
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C03\C03_BossChamber_Main\*'), ExpandConstant('{app}\Scenes\Locations\C03\C03_BossChamber_Main.zip'), 2, false ) then break;
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C03\C03_EarthCastle_Main_01\*'), ExpandConstant('{app}\Scenes\Locations\C03\C03_EarthCastle_Main_01.zip'), 2, false ) then break;
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C04\C04_GreatRiverCanyon_Main\*'), ExpandConstant('{app}\Scenes\Locations\C04\C04_GreatRiverCanyon_Main.zip'), 2, false ) then break;
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C06\C06_BridgeLake_Main\*'), ExpandConstant('{app}\Scenes\Locations\C06\C06_BridgeLake_Main.zip'), 2, false ) then break;
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C06\C06_HauntedForrest_Main\*'), ExpandConstant('{app}\Scenes\Locations\C06\C06_HauntedForrest_Main.zip'), 2, false ) then break;
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C07\C07_BossChamber_Main\*'), ExpandConstant('{app}\Scenes\Locations\C07\C07_BossChamber_Main.zip'), 2, false ) then break;
        if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Scenes\Locations1\C07\C07_Night_Castle_Main\*'), ExpandConstant('{app}\Scenes\Locations\C07\C07_Night_Castle_Main.zip'), 2, false ) then break;


ZVSRus 22-02-2017 09:02 2713954

pist0n,
За-комментируй всё это
[InstallDelete]
Type: filesandordirs; Name: "{app}\Scenes\Locations1";
и проверь удалиться ли все эти папки.
Покажи куда распаковывается arc архивы, где находятся эти папки.

pist0n 22-02-2017 15:07 2714048

Цитата:

Цитата ZVSRus
За-комментируй всё это
[InstallDelete]
Type: filesandordirs; Name: "{app}\Scenes\Locations1";
и проверь удалиться ли все эти папки.
Покажи куда распаковывается arc архивы, где находятся эти папки. »

удалил InstallDelete - теперь папка Locations1 остаётся и не удаляется - с InstallDelete нормально в конце удаляется
паковал в arc целиком папку Scenes - внутри папка Locations1 с подпапками для последующих зип архивов - распаковывается папка Scenes тоже целиком в папку с выбранной игрой и далее из папки Locations1 файлы пакуются зип архивы в папку Locations - в конце установки папка Locations1 с подпапками и файлами удаляется целиком за ненадобностью, тк нужны только зип архивы в другой игровой папке Locations
если интересно вот установщик со скриптом (100 мб) https://docs.google.com/uc?id=0B5-cz...xport=download

Antzav 22-02-2017 16:34 2714059

Всем привет! Возникла проблема с инсталлятором, который сначала должен распаковать архив, затем прописать в реестре несколько ключей. И вот последняя часть не хочет выполняться под пользовательским аккаунтом с админским паролем. Под админом все замечательно работает. Подскажите, пожалуйста, что я делаю не так)
Записи в реестр

Код:

procedure DeinitializeSetup;
var
  flag: String;
begin
  if RegQueryStringValue(HKEY_CURRENT_USER, 'Software\Adobe\CSXS.4',
    'PlayerDebugMode', flag) then
  begin
    // Successfully read the value
    //MsgBox('Your country: ' + Country, mbInformation, MB_OK);
    if flag = '0' then
    begin
      RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Adobe\CSXS.4',
    'PlayerDebugMode', '1');
    end;
  end;
  if RegQueryStringValue(HKEY_CURRENT_USER, 'Software\Adobe\CSXS.6',
    'PlayerDebugMode', flag) then
  begin
    // Successfully read the value
    //MsgBox('Your country: ' + Country, mbInformation, MB_OK);
    if flag = '0' then
    begin
      RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Adobe\CSXS.6',
    'PlayerDebugMode', '1');
    end;
  end;
  if RegQueryStringValue(HKEY_CURRENT_USER, 'Software\Adobe\CSXS.7',
    'PlayerDebugMode', flag) then
  begin
    // Successfully read the value
    //MsgBox('Your country: ' + Country, mbInformation, MB_OK);
    if flag = '0' then
    begin
      RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Adobe\CSXS.7',
    'PlayerDebugMode', '1');
    end;
  end;
end;


pist0n 22-02-2017 17:02 2714067

Цитата:

Цитата Antzav
Всем привет! Возникла проблема с инсталлятором, который сначала должен распаковать архив, затем прописать в реестре несколько ключей. И вот последняя часть не хочет выполняться под пользовательским аккаунтом с админским паролем. Под админом все замечательно работает. Подскажите, пожалуйста, что я делаю не так) »

а что через раздел Registry не прописывается?
Код:

[Registry]
Root: HKCU; Subkey: Software\Adobe\CSXS.4; ValueType: String; Flags: uninsdeletekey


Antzav 22-02-2017 18:03 2714084

Цитата:

Цитата pist0n
а что через раздел Registry не прописывается? »

Тоже не хочет.

habib2302 28-02-2017 18:28 2715451

как на этапе run скрыть страницу installing?

boss911 28-02-2017 19:33 2715472

Цитата:

Цитата habib2302
на этапе run скрыть страницу installing? »

Код:

[Run]
Filename: {app}\MyProg.exe; Flags: hidewizard


maslo_net 02-03-2017 10:01 2715946

Здравсвуйте, нужен совет.
Требуется определять разрядность системы и в зависимости от нее инсталлировать компоненты.
В идеале вывести список с чек боксами и дисеблить не подходящие под разрядность.
Можно ли запустить инсталляцию компонент в скрытом режиме(*.ехе файлы).

ZVSRus 02-03-2017 11:13 2715972

maslo_net,
В конце строки в секции [Files] к 64 битным файлам подписывай Check: "IsWin64";
к 32 битным файлам Check: "not IsWin64";
в зависимости от разрядности, система будет сама определять какие файлы ставить.

maslo_net 02-03-2017 11:37 2715984

Спасибо, все оказалось просто))

tylers1121 07-03-2017 00:40 2717308

http://www.forum.oszone.ru/post-1230777-185.html

При компиляции с скриптом по ссылке выше в Inno Setun 5.5.9 начинает материться на всё.

saurn 07-03-2017 11:04 2717361

tylers1121, скрипт для расширенной версии.

habib2302 07-03-2017 20:06 2717484

Как сменить иконку {uninstallexe}

ZVSRus 07-03-2017 20:18 2717486

habib2302,

[Setup]
UninstallIconFile=Uninstall.ico

boss911 07-03-2017 21:29 2717504

Цитата:

Цитата ZVSRus
UninstallIconFile=Uninstall.ico »

Только толку, можно сказать, ни какого, так как:
Цитата:

Цитата jrsoftware.org/ishelp
Obsolete in 5.0.0. As Setup and Uninstall have been merged into a single executable, setting a custom icon for Uninstall is no longer possible.

http://www.jrsoftware.org/ishelp/ind...nstalliconfile

saurn 08-03-2017 08:23 2717580

boss911, вероятно, это относится к оригинальной программе. В расширенной версии возможность сменить иконку деинсталлятора никуда не делась.

ZVSRus 08-03-2017 09:13 2717584

boss911, из Справки.
Не используется с версии 5.0.0. Задает новую иконку для программы-деинсталлятора. Новая иконка будет отображена в правом верхнем углу окна Процесс удаления.
Но в расширенной версии данная директива работает.

boss911 08-03-2017 13:34 2717629

Цитата:

Цитата saurn
В расширенной версии возможность сменить иконку деинсталлятора никуда не делась. »

Ах, вот в чем дело. Только надо бы было упомянуть, что новые расширенные версии вместе с новой версией компилятора куда-то делись.

То есть любителей расширенной (не официальной) версии не смущает тот факт, что проект заброшен 5 лет тому назад, что версия компилятора так же не обновлялась с тех пор? Или продолжаем ждать, что вот сегодня-завтра обновят? Ну, ладно. :)

ZVSRus 08-03-2017 14:46 2717650

boss911,
То что не выходят новые расширенные версии ну скажем 5.5.9 это еще не говорит о том что проект заброшен.
на сайте http://restools.hanzify.org/ время от времени выходят разные примеры.
Если вы придерживаетесь официальных версий и более свежих, тогда скажите как далеко ушла официальная версия 5.5.9 от официальной 5.5.1.
Не все золото что блестит!. А Inno Setup Ultra 5.5.1 ещё не один год будет превосходить официальные версии, хотя бы тем что в ней есть редактор форм.
А вкусах не спорят.

boss911 08-03-2017 14:49 2717651

Цитата:

Цитата ZVSRus
скажите как далеко ушла официальная версия 5.5.9 от официальной 5.5.1. »

http://www.jrsoftware.org/files/is5-whatsnew.htm
Цитата:

Цитата ZVSRus
Не все золото что блестит! »

Эта поговорка больше подходит для MS. :)

ZVSRus 08-03-2017 15:24 2717657

boss911, Ссылка http://www.jrsoftware.org/files/is5-whatsnew.htm

Инно установки юникод: Добавлен официальный перевод на армянский. Мелкие хитрости. (последняя строка машинного перевода)

Я думал что вы своими словами поясните те прекрасные нововведения, а так это относится к другой поговорке (или пословице как вам угодно) На заборе тоже написано.
И последнее, не в обиду, что вы ждёте от новых версий, расширенной или официальной, просто интересно.

boss911 08-03-2017 17:36 2717675

Цитата:

Цитата ZVSRus
своими словами поясните »

Мне достаточно того, что уже 5 лет нет ни каких обновлений, смотря на ченчлог официальной версии, тут сразу напрашивается вердикт, что проект заброшен, так как за 5 лет точно можно было бы найти время.
Цитата:

Цитата ZVSRus
что вы ждёте от новых версий »

Того, чего вряд ли будет. 64-битный компилер и возможность создавать (без костылей) полностью silent инсталляторы, то есть без оконные. От расширенной версии ничего не жду, не пользовался я ей, хотя бы потому, что с секцией Code я все равно не дружу и мне нужна возможность распаковывать свои инсталлы анпакером.

ZVSRus 08-03-2017 18:31 2717690

boss911,
Скрытый текст

По поводу первого пояснения, пусть даже и заброшен, но я думаю что больше половины репакеров сидят именно на расширенной версии, жаль конечно что вы не как не хотите осваивать расширенную, когда она попалась мне, то первое время тоже было сложновато, а сейчас ничего другого не надо. Как писать коды не обязательно знать, все уже давно написано другими, просто нужно знать что скопировать, и куда вставить, примеров на форумах хоть отбавляй.
По поводу второго пояснения, то что то припоминаю ту дискуссию на руборде. Так вот Inno Setup со встроенной функцией silent или verysilent как у sfx архива winrar вы не дождётесь, потому что это был бы не установщик программ а полное дерьмо.
Джордан Рассел написавший такую прекрасную программу не дурак что бы сделать данные функции вшитыми, хотя думаю для него это не сложно. Если бы у Inno Setup silent и verysilent были бы вшитыми, тогда заниматься плагиатом и вредительством было бы на раз, два. Создал свой установщик ничего не прописывая, запихнул в него репак проверенного автора, выбрал установку verysilent (ни чего не показывая конечному пользователю) и вуаля. Или помимо программы напихать разного хлама или вирусов (люди разные бывают).
Объясняю это потому что встречались пользователи задававшие вопрос по поводу кода, как запихнуть в свой установщик другой установщик, то есть через секцию RUN с ключом тихой установки, и чтобы конечный пользователь ни чего не видел.
Так что судите сами было бы это правильно или нет. Для вас это было бы автоматизация, для других плагиат.

Nordek 08-03-2017 19:29 2717705

Скрытый текст
Цитата:

Цитата boss911
То есть любителей расширенной (не официальной) версии не смущает тот факт, что проект заброшен 5 лет тому назад »

Не смущает.

Цитата:

Цитата ZVSRus
о что не выходят новые расширенные версии ну скажем 5.5.9 это еще не говорит о том что проект заброшен. »

Заброшен. Действительно, за уже довольно долгое время можно было бы что-то выпустить.

Цитата:

Цитата boss911
Мне достаточно того, что уже 5 лет нет ни каких обновлений, »

Windows 10 перестала понимать Inno? Inno - это всего лишь инструмент для создания инсталляторов.
P.S Windows XP тоже не обновляется, но за ней ещё работают. А это не много не мало: Операционная система. Как многим известно: не обновляемая ОС - это большой удар по безопасности. Чувствуется разница.

Цитата:

Цитата boss911
возможность создавать (без костылей) полностью silent инсталляторы, то есть без оконные. »

Для инсталлятора - это только плюс. Иначе при таком положении каждому желающему не составляло труда закриптовать "вирусню" и всё это включать в инсталлятор задавая тихую инсталляцию.
Если у пользователя появится необходимость использовать безоконный режим - выполнит инсталлятор с ключом.
NSIS чем не устраивает?


boss911, ZVSRus, Данная тема меняется в пользу Inno Setup. Прочие вопросы.

boss911 08-03-2017 22:05 2717727

ZVSRus, Nordek

Скрытый текст
Цитата:

Цитата ZVSRus
Для вас это было бы автоматизация, для других плагиат. »

Для себя и нужно, а в итоге другие мешают. А я причем?

Nordek

Ваш ликбез мне понятен и не нова, но меня спросили, что я хочу, я ответил. Я прекрасно понимаю, что другие этим будут злоупотреблять, только мне не нужно это пояснять, не мальчик.

Цитата:

Цитата Nordek
NSIS чем не устраивает? »

Не понятно. (с) А. Рева

Заканчиваем?

pist0n 09-03-2017 21:36 2718002

вечер добрый - не подскажите, как применить патч xdelta для восстановления файла?
снял хдельтой разницу между двумя файлами - получил патч .diff и нужно восстановить файл - в ISDone вроде есть такая функция - прописал так
Код:

if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\movies\en\se_1_3.vp6'), ExpandConstant('{app}\movies\en\se_1_3.diff'),  ExpandConstant('{app}\movies\ru\se_1_3.vp6'), false, false) then break;
но появляется ошибка xdelta в конце распаковки - видимо что-то сделал не так(

UPD проблему решил

pist0n 11-03-2017 11:10 2718389

а как переместить файлы из одной папки в другую с заменой в конце установки? кроме батника

saurn 11-03-2017 16:09 2718504

Цитата:

Цитата pist0n
а как переместить файлы из одной папки в другую с заменой в конце установки? кроме батника »

Проще всего посредством секции [Files]:
Код:

[Files]
Source: "исходная папка\*"; DestDir: "папка назначения"; Flags: external recursesubdirs createallsubdirs overwritereadonly ignoreversion;


pist0n 11-03-2017 17:28 2718533

Цитата:

Цитата saurn
Source: "исходная папка\*" »

выдаёт ошибку в конце установки - не найдены файлы и папка - эта команда выполняется первичней чем моя по распаковке arc архива - у меня в isdone внизу функция стоит по распаковке
Код:

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
и ниже по хдельте
Код:

if not ISExec ( 0, 0, 0, ExpandConstant('{app}\xdelta.exe'), '-d -s -f movies\en\se_1_3.vp6 movies\en\se_1_3.xdelta movies\en\se_1_3.vp6', ExpandConstant('{app}'), '...',false) then break;
поэтому и не находит - как сделать, чтобы после этих функций в самом конце шёл перенос файлов? мб есть функции как те выше

saurn 11-03-2017 17:56 2718547

pist0n, выполните распаковку на шаге ssInstal, тогда секция Files будет обрабатываться после. Или выполняйте перемещение через секцию Code.
Здесь пример.

pist0n 11-03-2017 18:22 2718556

Цитата:

Цитата saurn
выполните распаковку на шаге ssInstal »

а это как сделать?
.
UPD вообщем решил конвертнуть в ехе батник с командой перемещения и сделать также как и дельту - прописав ниже
if not ISExec ( 0, 0, 0, ExpandConstant('{app}\батник.exe'), ExpandConstant('{app}'), '...',false) then break;
ну или через секцию [Run] ещё можно

pist0n 16-03-2017 20:13 2720100

как при выборе установки в ту же папку, убрать предупреждение "эта папка уже существует - всё равно установить в эту папку"?

ZVSRus 16-03-2017 21:21 2720110

pist0n,
[Setup]
DirExistsWarning=no

pist0n 16-03-2017 23:49 2720189

Цитата:

Цитата ZVSRus
pist0n,
[Setup]
DirExistsWarning=no »

спс - уже нашёл только что - как грится справка и ещё раз справка :teeth:

pist0n 17-03-2017 10:58 2720285

если прописать в секции [Run] флаг postinstall, то на финальном окне установки будет чекбокс о запуске нужного файла - есть возможность убрать этот чекбокс? чтобы его вообще не было, но файл также запустился при нажатии кнопки завершить

ZVSRus 17-03-2017 13:45 2720357

pist0n,
Если нужно что бы чекбокс был не виден убери флаг postinstall. Что бы запустился файл из секции [Run] кнопкой завершить, тогда наверное нужно написать функцию к данной кнопке, но как это будет работать, вопрос, так как кнопка завершить, это кнопка Далее она одна для всех страниц, на странице готовности она выглядит Установить, на финишной странице Завершить.

saurn 17-03-2017 15:23 2720399

Цитата:

Цитата pist0n
есть возможность убрать этот чекбокс? чтобы его вообще не было, но файл также запустился при нажатии кнопки завершить »

Например, так:
Скрытый текст
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
Compression=none
Uninstallable=no
CreateUninstallRegKey=no


[Run]
Filename: "{sys}\calc.exe"; Flags: postinstall nowait;


[Code]
procedure CurPageChanged( CurPageID: Integer );
begin
    case CurPageID of
        wpFinished: WizardForm.RunList.Hide;
    end;
end;


Или, как предложили выше, запускать через секцию Code:
Скрытый текст
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
Compression=none
Uninstallable=no
CreateUninstallRegKey=no


[Code]
function NextButtonClick( CurPageID: Integer ): Boolean;
var
    _nErr: Integer;
begin
    case CurPageID of
        wpFinished: if FileExists( ExpandConstant( '{sys}\calc.exe' ) ) then
                      Result := Exec( ExpandConstant( '{sys}\calc.exe' ), '', '', SW_SHOW, ewNoWait, _nErr )
                    else Result := True;
        else Result := True;
    end;
end;


pist0n 17-03-2017 18:29 2720465

Цитата:

Цитата saurn
Или, как предложили выше, запускать через секцию Code: »

о спс работает - а первый вариант что-то в код пытался вставить в эту же процедуру, но ошибку выдаёт
у меня просто в исдоне функции IS7ZipExtract и ISExec стоят с ssPostInstall, тк нужно выполнять их после распаковки из [Files] - поэтому через [Run] батник я не могу запустить в конце, тк он запускается после распаковки [Files] и удаляет лишние файлы которые нужны следующим функциям - короче лишние файлы нужно удалить в самом конце - также и через код пробовал это DelTree(ExpandConstant('{app}\***'), True, True, True) - тоже удаляет не в самом конце а после [Files] - теперь извращяюсь и думаю как удалить лишние файлы после установки - вот с этим вариантом выше норм через батник - а есть ещё разные вариаты без батника удалить в самом конце установки?

Dodakaedr 17-03-2017 20:53 2720530

Цитата:

Цитата pist0n
а есть ещё разные вариаты без батника удалить в самом конце установки? »

Кнопка завершить это этап ssDone, вот в нём и пишите удаление папок (DelTree) или файлов (DeleteFile).

pist0n 17-03-2017 21:22 2720533

Цитата:

Цитата Dodakaedr
Кнопка завершить это этап ssDone, вот в нём и пишите удаление папок (DelTree) или файлов (DeleteFile). »

спс - чёт не додумался - теперь всё вроде норм удаляет после нажатия кнопки завершить - так вписал
Код:

function NextButtonClick( CurPageID: Integer ): Boolean;
var
    _nErr: Integer;
begin
    case CurPageID of
        wpFinished: if FileExists (ExpandConstant( '{app}\movies\en.pak' ) ) then
                      Result := DeleteFile( ExpandConstant('{app}\movies\en.pak'))
                    else Result := True;
        else Result := True;
    end;
end;

а не будет типа конфликта или ошибки какой-нибудь, если будет выбран другой компонент установки, при котором этого файла для удаления не будет?

Dodakaedr 17-03-2017 21:31 2720536

Цитата:

Цитата pist0n
а не будет типа конфликта или ошибки какой-нибудь, если будет выбран другой компонент установки, при котором этого файла для удаления не будет? »

Не будет. Во первых идет проверка файла (FileExists), во вторых результат всегда будет true не зависимо от наличия файла.
При вашем коде переменная integer не нужна
Код:

function NextButtonClick( CurPageID: Integer ): Boolean;
begin
    case CurPageID of
        wpFinished: if FileExists (ExpandConstant( '{app}\movies\en.pak' ) ) then
                      Result := DeleteFile( ExpandConstant('{app}\movies\en.pak'))
                    else Result := True;
        else Result := True;
    end;
end;


saurn 18-03-2017 11:09 2720639

Цитата:

Цитата pist0n
а первый вариант что-то в код пытался вставить в эту же процедуру, но ошибку выдаёт »

Ну правильно, это самодостаточный пример, однако, я не видел Ваш скрипт, и не знаю, как он построен.
Цитата:

Цитата pist0n
у меня просто в исдоне функции IS7ZipExtract и ISExec стоят с ssPostInstall »

Выполняйте на шаге ssInstal. Таким образом выше означеные функции будут обработаны до выполнение заданий, заданных в секции Run. Впрочем, об этом уже писалось ранее.

pist0n 18-03-2017 11:32 2720646

Цитата:

Цитата saurn
Выполняйте на шаге ssInstal. Таким образом выше означеные функции будут обработаны до выполнение заданий, заданных в секции Run. Впрочем, об этом уже писалось ранее. »

в том то и дело, что я изменил ssInstal на ssPostInstall, тк это нужно, чтобы эти функции выполнялись после распаковки из [Files], а то не будет файлов для выполнения этих функций
Цитата:

Цитата saurn
Ну правильно, это самодостаточный пример, однако, я не видел Ваш скрипт, и не знаю, как он построен. »

скрипт
Код:

#define NeedSize "1048000000"

#define NeedMem 512

;#define SecondProgressBar

#define Components

#define records

#define facompress

;#define PrecompInside
;#define SrepInside
#define SevenZip
#define Delta
;#define MSCInside
;#define precomp "0.42"
;#define unrar
;#define XDelta
#define PackZIP

[Setup]
DirExistsWarning=no
Uninstallable=False
CreateUninstallRegKey=False
AppendDefaultDirName=False
InfoBeforeFile=1.txt
AppName=Русификатор Dead Space
AppVerName=Русификатор Dead Space
DefaultDirName={pf}\Steam\steamapps\common\Dead Space
DefaultGroupName=Dead Space
OutputDir=.
ShowComponentSizes=false
WizardImageFile=1.bmp
WizardSmallImageFile=2.bmp
SetupIconFile=1.ico
OutputBaseFilename=Setup
VersionInfoCopyright=ProFrager
SolidCompression=true
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
#ifdef Components

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: voice; Description: Язык игры; Types: full; Flags: fixed
Name: voice\rus; Description: Русский текст + Русская озвучка; Flags: exclusive;
Name: voice\eng; Description: Русский текст + Английская озвучка; Flags: exclusive;
#endif

[Registry]

[Icons]

[Files]
Source: rus\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: patch\settings.txt; DestDir: {localappdata}\Electronic Arts\Dead Space\; Flags: ignoreversion recursesubdirs createallsubdirs
Source: patch\ru.diff; DestDir: {app}\movies\; Components: voice\rus; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall
Source: en\localetable.txt; DestDir: {app}\text\; Components: voice\eng; Flags: ignoreversion recursesubdirs createallsubdirs
Source: ru\*; DestDir: {app}; Components: voice\rus; Flags: ignoreversion recursesubdirs createallsubdirs
Source: logo.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SevenZip
Source: Include\7z.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef Delta
Source: Include\delta.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
  #if precomp == "0.38"
  ; Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
  #else
    #if precomp == "0.4"
    ; Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
    #else
      #if precomp == "0.41"
      ; Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
      #else
        #if precomp == "0.42"
        ; Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #else
        ; Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
        ; Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
        ; Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
        ; Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #endif
      #endif
    #endif
  #endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

[CustomMessages]
russian.ExtractedFile=Обработка файлов:
russian.Extracted=Русификация игры...
russian.CancelButton=Отменить
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:

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

[Tasks]

[Run]

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Codе]
const
  PCFonFLY=true;
  notPCFonFLY=false;
var
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2, WelcomeLabel2, FinishedLabel: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
  #ifdef SecondProgressBar
  LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
  MyCancelButton: TButton;
  ISDoneCancel:integer;
  ISDoneError:boolean;
  PCFVer:double;
  Logo:TBitmapImage;

type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';
function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';
function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';
function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';
function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
  if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
  LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
  LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
  LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  ResumeProc;
end;

procedure HideControls;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  MyCancelButton.Hide;
#ifdef SecondProgressBar
  ISDoneProgressBar2.Hide;
  LabelPct2.Hide;
#endif
end;

procedure CreateControls;
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
  ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar1 do begin
    Parent  := WizardForm.InstallingPage;
    Height  := WizardForm.ProgressGauge.Height;
    Left    := ScaleX(0);
    Top      := PBTop;
    Width    := ScaleX(365);
    Max      := 1000;
  end;
  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar1.Width+ScaleX(5);
    Top      := ISDoneProgressBar1.Top + ScaleY(2);
    Width    := ScaleX(80);
  end;
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width+ScaleX(30);
    Left    := ScaleX(0);
    Top      := ScaleY(30);
  end;
#ifdef SecondProgressBar
  PBTop:=PBTop+ScaleY(25);
  ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar2 do begin
    Parent  := WizardForm.InstallingPage;
    Left    := ScaleX(0);
    Top      := PBTop+ScaleY(8);
    Width    := ISDoneProgressBar1.Width;
    Max      := 1000;
    Height  := WizardForm.ProgressGauge.Height;
  end;
  LabelPct2 := TLabel.Create(WizardForm);
  with LabelPct2 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar2.Width+ScaleX(5);
    Top      := ISDoneProgressBar2.Top + ScaleY(2);
    Width    := ScaleX(80);
  end;
#endif
  LabelTime1 := TLabel.Create(WizardForm);
  with LabelTime1 do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width div 2;
    Left    := ScaleX(0);
    Top      := PBTop + ScaleY(35);
  end;
  LabelTime2 := TLabel.Create(WizardForm);
  with LabelTime2 do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := LabelTime1.Width+ScaleX(40);
    Left    := ISDoneProgressBar1.Width div 2;
    Top      := LabelTime1.Top;
  end;
  MyCancelButton:=TButton.Create(WizardForm);
  with MyCancelButton do begin
    Parent:=WizardForm;
    Width:=ScaleX(80);
    Height:=ScaleX(23);
    Caption:=ExpandConstant('{cm:CancelButton}');
    Left:=WizardForm.cancelbutton.left;
    Top:=WizardForm.cancelbutton.top;
    OnClick:=@CancelButtonOnClick;
  end;
end;

function NextButtonClick( CurPageID: Integer ): Boolean;
begin
    case CurPageID of
        wpFinished: if FileExists (ExpandConstant( '{app}\movies\en.pak' ) ) then
                      Result := DeleteFile( ExpandConstant('{app}\movies\en.pak'))
                    else Result := True;
        else Result := True;
    end;
end;

procedure InitializeWizard();
begin
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.ComponentsDiskSpaceLabel.Hide;

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
WelcomeLabel2.SetBounds(50,80, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
Welcomelabel2.Font.Style:=[fsBold];
Welcomelabel2.Alignment := taCenter;
Welcomelabel2.Width:=190;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage
WelcomeLabel2.Font.Size:= 9;

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(50, 160, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Style:=[fsBold];
FinishedLabel.Alignment := taCenter;
FinishedLabel.Width:=150;
FinishedLabel.Height:=150;
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage
FinishedLabel.Font.Size:= 9;

logo:= TBitmapImage.Create(WizardForm);
with logo do
begin
  Parent := WizardForm;
  Left := ScaleX(10);
  Top := ScaleY(325);
  AutoSize:=true;
  ReplaceColor:=clFuchsia;
  ReplaceWithColor:=clBtnFace;
  ExtractTemporaryFile('logo.bmp');
  Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
begin
WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and ISDoneError then
  begin
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clWhite;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
begin
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
end;
end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp:integer;
    ExecError:boolean;
    InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssPostInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    WizardForm.CancelButton.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
#ifdef SevenZip
ExtractTemporaryFile('7z.exe');
#endif
#ifdef Delta
ExtractTemporaryFile('delta.exe');
#endif
#ifdef MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef facompress
    ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
    ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
  #if precomp == "0.38"
    ExtractTemporaryFile('precomp038.exe');
  #else
    #if precomp == "0.4"
      ExtractTemporaryFile('precomp040.exe');
    #else
      #if precomp == "0.41"
        ExtractTemporaryFile('precomp041.exe');
      #else
        #if precomp == "0.42"
          ExtractTemporaryFile('precomp042.exe');
        #else
          ExtractTemporaryFile('precomp038.exe');
          ExtractTemporaryFile('precomp040.exe');
          ExtractTemporaryFile('precomp041.exe');
          ExtractTemporaryFile('precomp042.exe');
        #endif
      #endif
    #endif
  #endif
#endif
#ifdef unrar
    ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
    ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
    ExtractTemporaryFile('7z.dll');
    ExtractTemporaryFile('PackZIP.exe');
#endif

    ExtractTemporaryFile('English.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
    Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
    TmpValue:=1;
    if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue;    //компонент 1
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue;    //компонент 2
    TmpValue:=TmpValue*2;
    if IsComponentSelected('ver\mix') then Comps1:=Comps1+TmpValue;    //компонент 3
    TmpValue:=TmpValue*2;
//    .....
// см. справку
#endif

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


        if not ISExec ( 1, 0, 0, ExpandConstant('{tmp}\7z.exe'), ExpandConstant ('a -t7z -m0=Copy -mx0 -ms=off -sccUTF-8 -bb0 "{app}\movies\en.pak" "{app}\movies\en\*.*"'), ExpandConstant('{app}\'), '...',false) then break;
        if not ISExec ( 1, 0, 0, ExpandConstant('{tmp}\delta.exe'), ExpandConstant ('-d -s "{app}\movies\en.pak" "{app}\movies\ru.diff" "{app}\movies\ru.pak"'), ExpandConstant('{tmp}'), '...',false) then break;
        if not IS7ZipExtract ( 1, 0, ExpandConstant('{app}\movies\ru.pak'), ExpandConstant('{app}\movies\ru'), true, '') then break;

//    далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
        if not ISArcExtract    ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
        if not IS7ZipExtract  ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
        if not ISRarExtract    ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
        if not ISSRepExtract  ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
        if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'),    ExpandConstant('{app}\data.7z'), true) then break;
        if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'),  ExpandConstant('{app}\out.dat'), false) then break;
        if not ISPackZIP      ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
        if not ISExec          ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
        if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

//    распаковка группы файлов посредством внешнего приложения

        FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
        ExecError:=false;
        while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
          InFilePath:=ISGetName(0);
          OutFilePath:=ISGetName(1);
          OutFileName:=ISGetName(2);
          ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
        end;
        ISFindFree(FindHandle1);
        if ExecError then break;
*)

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;


saurn 18-03-2017 12:04 2720657

pist0n,
Скрытый текст
Код:

[Codе]
const
  PCFonFLY=true;
 
notPCFonFLY=false;
var
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2, WelcomeLabel2, FinishedLabel: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
  #ifdef SecondProgressBar
 
LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
 
MyCancelButton: TButton;
  ISDoneCancel:integer;
  ISDoneError:boolean;
  PCFVer:double;
  Logo:TBitmapImage;

type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';
function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';
function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';
function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';
function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
 
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
 
if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
 
LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
 
LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
 
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
 
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
 
Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
 
ResumeProc;
end;

procedure HideControls;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  MyCancelButton.Hide;
#ifdef SecondProgressBar
 
ISDoneProgressBar2.Hide;
  LabelPct2.Hide;
#endif
end;

procedure CreateControls;
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
 
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
 
with ISDoneProgressBar1 do begin
    Parent  := WizardForm.InstallingPage;
   
Height  := WizardForm.ProgressGauge.Height;
   
Left    := ScaleX(0);
   
Top      := PBTop;
   
Width    := ScaleX(365);
   
Max      := 1000;
 
end;
  LabelPct1 := TLabel.Create(WizardForm);
 
with LabelPct1 do begin
    Parent    := WizardForm.InstallingPage;
   
AutoSize  := False;
   
Left      := ISDoneProgressBar1.Width+ScaleX(5);
   
Top      := ISDoneProgressBar1.Top + ScaleY(2);
   
Width    := ScaleX(80);
 
end;
  LabelCurrFileName := TLabel.Create(WizardForm);
 
with LabelCurrFileName do begin
    Parent  := WizardForm.InstallingPage;
   
AutoSize := False;
   
Width    := ISDoneProgressBar1.Width+ScaleX(30);
   
Left    := ScaleX(0);
   
Top      := ScaleY(30);
 
end;
#ifdef SecondProgressBar
 
PBTop:=PBTop+ScaleY(25);
 
ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
 
with ISDoneProgressBar2 do begin
    Parent  := WizardForm.InstallingPage;
   
Left    := ScaleX(0);
   
Top      := PBTop+ScaleY(8);
   
Width    := ISDoneProgressBar1.Width;
   
Max      := 1000;
   
Height  := WizardForm.ProgressGauge.Height;
 
end;
  LabelPct2 := TLabel.Create(WizardForm);
 
with LabelPct2 do begin
    Parent    := WizardForm.InstallingPage;
   
AutoSize  := False;
   
Left      := ISDoneProgressBar2.Width+ScaleX(5);
   
Top      := ISDoneProgressBar2.Top + ScaleY(2);
   
Width    := ScaleX(80);
 
end;
#endif
 
LabelTime1 := TLabel.Create(WizardForm);
 
with LabelTime1 do begin
    Parent  := WizardForm.InstallingPage;
   
AutoSize := False;
   
Width    := ISDoneProgressBar1.Width div 2;
   
Left    := ScaleX(0);
   
Top      := PBTop + ScaleY(35);
 
end;
  LabelTime2 := TLabel.Create(WizardForm);
 
with LabelTime2 do begin
    Parent  := WizardForm.InstallingPage;
   
AutoSize := False;
   
Width    := LabelTime1.Width+ScaleX(40);
   
Left    := ISDoneProgressBar1.Width div 2;
   
Top      := LabelTime1.Top;
 
end;
  MyCancelButton:=TButton.Create(WizardForm);
 
with MyCancelButton do begin
    Parent:=WizardForm;
   
Width:=ScaleX(80);
   
Height:=ScaleX(23);
   
Caption:=ExpandConstant('{cm:CancelButton}');
   
Left:=WizardForm.cancelbutton.left;
   
Top:=WizardForm.cancelbutton.top;
   
OnClick:=@CancelButtonOnClick;
 
end;
end;

;function NextButtonClick( CurPageID: Integer ): Boolean;
;begin
;    case CurPageID of
;        wpFinished: if FileExists (ExpandConstant( '{app}\movies\en.pak' ) ) then
;                      Result := DeleteFile( ExpandConstant('{app}\movies\en.pak'))
;                    else Result := True;
;        else Result := True;
;    end;
;end;

procedure InitializeWizard();
begin
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.ComponentsDiskSpaceLabel.Hide;

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
WelcomeLabel2.SetBounds(50,80, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
Welcomelabel2.Font.Style:=[fsBold];
Welcomelabel2.Alignment := taCenter;
Welcomelabel2.Width:=190;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage
WelcomeLabel2.Font.Size:= 9;

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(50, 160, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Style:=[fsBold];
FinishedLabel.Alignment := taCenter;
FinishedLabel.Width:=150;
FinishedLabel.Height:=150;
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage
FinishedLabel.Font.Size:= 9;

logo:= TBitmapImage.Create(WizardForm);
with logo do
begin
  Parent := WizardForm;
 
Left := ScaleX(10);
 
Top := ScaleY(325);
 
AutoSize:=true;
 
ReplaceColor:=clFuchsia;
 
ReplaceWithColor:=clBtnFace;
 
ExtractTemporaryFile('logo.bmp');
  Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
begin
WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
end;
end;



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure CurPageChanged( CurPageID: Integer );
begin
    case CurPageID of
        wpFinished:
        begin
            WizardForm.RunList.Hide;

            if ISDoneError then
            begin
                WizardForm.Caption:= ExpandConstant('{cm:Error}');
               
WizardForm.FinishedLabel.Font.Color:= clWhite;
               
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
           
end;
        end;

    FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
   
end;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




;Procedure CurPageChanged(CurPageID: Integer);
;Begin
;  if (CurPageID = wpFinished) and ISDoneError then
;  begin
;    WizardForm.Caption:= ExpandConstant('{cm:Error}');
;    WizardForm.FinishedLabel.Font.Color:= clWhite;
;    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
;  end;
;begin
;FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
;end;
;end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp:integer;
    ExecError:boolean;
    InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssPostInstall then begin  //Если необходимо, можно поменять на ssPostInstall
   
WizardForm.ProgressGauge.Hide;
    WizardForm.CancelButton.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
   
ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
#ifdef SevenZip
ExtractTemporaryFile('7z.exe');
#endif
#ifdef Delta
ExtractTemporaryFile('delta.exe');
#endif
#ifdef MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef facompress
   
ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
   
ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
  #if precomp == "0.38"
   
ExtractTemporaryFile('precomp038.exe');
  #else
    #if precomp == "0.4"
     
ExtractTemporaryFile('precomp040.exe');
    #else
      #if precomp == "0.41"
       
ExtractTemporaryFile('precomp041.exe');
      #else
        #if precomp == "0.42"
         
ExtractTemporaryFile('precomp042.exe');
        #else
         
ExtractTemporaryFile('precomp038.exe');
          ExtractTemporaryFile('precomp040.exe');
          ExtractTemporaryFile('precomp041.exe');
          ExtractTemporaryFile('precomp042.exe');
        #endif
      #endif
    #endif
  #endif
#endif
#ifdef unrar
   
ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
   
ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
   
ExtractTemporaryFile('7z.dll');
    ExtractTemporaryFile('PackZIP.exe');
#endif

   
ExtractTemporaryFile('English.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
    Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
   
TmpValue:=1;
   
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue;    //компонент 1
   
TmpValue:=TmpValue*2;
   
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue;    //компонент 2
   
TmpValue:=TmpValue*2;
   
if IsComponentSelected('ver\mix') then Comps1:=Comps1+TmpValue;    //компонент 3
   
TmpValue:=TmpValue*2;
//    .....
// см. справку
#endif

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


        if not ISExec ( 1, 0, 0, ExpandConstant('{tmp}\7z.exe'), ExpandConstant ('a -t7z -m0=Copy -mx0 -ms=off -sccUTF-8 -bb0 "{app}\movies\en.pak" "{app}\movies\en\*.*"'), ExpandConstant('{app}\'), '...',false) then break;
       
if not ISExec ( 1, 0, 0, ExpandConstant('{tmp}\delta.exe'), ExpandConstant ('-d -s "{app}\movies\en.pak" "{app}\movies\ru.diff" "{app}\movies\ru.pak"'), ExpandConstant('{tmp}'), '...',false) then break;
        if not IS7ZipExtract ( 1, 0, ExpandConstant('{app}\movies\ru.pak'), ExpandConstant('{app}\movies\ru'), true, '') then break;

//    далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
        if not ISArcExtract    ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
        if not IS7ZipExtract  ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
        if not ISRarExtract    ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
        if not ISSRepExtract  ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
        if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'),    ExpandConstant('{app}\data.7z'), true) then break;
        if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'),  ExpandConstant('{app}\out.dat'), false) then break;
        if not ISPackZIP      ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
        if not ISExec          ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
        if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

//    распаковка группы файлов посредством внешнего приложения

        FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
       
ExecError:=false;
       
while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
          InFilePath:=ISGetName(0);
         
OutFilePath:=ISGetName(1);
         
OutFileName:=ISGetName(2);
         
ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
       
end;
        ISFindFree(FindHandle1);
        if ExecError then break;
*)

        ISDoneError:=false;
     
until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
   
WizardForm.CancelButton.Enabled:=false;
 
end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
   
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;


gmirzaev@vk 21-03-2017 14:56 2721729

Всем привет! Кто нибудь знает как кодировать wav mp3 в ogg и обратно.

1) Как надо кодировать аудио в ogg?
2) Потом декодировать обратно в исходной формат во время установки через батник?

Nikolay4 24-03-2017 06:09 2722534

Здравствуйте, подскажите пожалуйста, возможно ли с помощью dwinshs (Download Plugin) скачивать не только один файл, а папку с файлами(подпапками).

Iska 24-03-2017 07:31 2722537

Nikolay4, Вы видите где-нибудь здесь: Contents упоминание про папки (а для http/https вообще не существует понятия «папка/каталог»)?

ofarapirs 01-04-2017 11:38 2724873

Здравствуйте, скачал репак игры, который запакован Inno Setup и он себя очень странно ведет в момент установки, подозреваю что там вирус:



Запись в реестре:

Код:

[HKEY_USERS\S-1-5-21-4030285601-3607310617-3836103468-1001\Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\PropertyStore\75bc57f5_0]
@="{0.0.0.00000000}.{336c4385-b6f6-4f2a-9094-4cd99b970416}|\\Device\\HarddiskVolume2\\Users\\имя пользователя\\AppData\\Local\\Temp\\is-53TU8.tmp\\Setup.tmp%b{00000000-0000-0000-0000-000000000000}"

[HKEY_USERS\S-1-5-21-4030285601-3607310617-3836103468-1001\Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\PropertyStore\75bc57f5_0\{219ED5A0-9CBF-4F3A-B927-37C9E5C5F14F}]
"3"=hex:04,00,00,00,00,00,00,00,00,00,80,3f,00,00,00,00,00,00,00,00,00,00,00,\
  00
"4"=hex:04,20,00,00,00,00,00,00,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,80,3f,00,00,80,3f
"5"=hex:0b,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00

Помогите пожалуйста кто разбирается. Спасибо!

Iska 01-04-2017 11:58 2724876

Правильно подозреваете! Этот вирус называется: «Давайте зададим индивидуальные настройки уровня громкости для этого инсталлятора» и входит во все новые версии ОС.

P.S. На первое апреля надо выбирать щютку юмора потоньше.

ofarapirs 01-04-2017 12:07 2724878

Iska зачем запись в реестре создается тогда, если это просто настройки уровня громкости для инсталлятора? Под этим не может быть замаскирована, например скрытая автозагрузка сайта?

Iska 01-04-2017 19:29 2724993

Цитата:

Цитата ofarapirs
Iska зачем запись в реестре создается тогда, если это просто настройки уровня громкости для инсталлятора? »

Именно для того и создаётся.

Цитата:

Цитата ofarapirs
Под этим не может быть замаскирована, например скрытая автозагрузка сайта? »

Я не вижу таких возможностей.

ofarapirs 01-04-2017 20:35 2725013

Iska в этом репаке нет настройки уровня громкости (есть правда вкл. / выкл. звук).

ZVSRus 02-04-2017 08:16 2725101

ofarapirs
Цитата:

Здравствуйте, скачал репак игры, который запакован Inno Setup и он себя очень странно ведет в момент установки, подозреваю что там вирус:
Что вы имеете под странным поведением в момент установки. Данная ветка реестра не имеет никакого отношения к установке. Она служит для пользовательских настроек. Записи в ней появляются после первого пуска программы или игры, но ни как во время установки.
Цитата:

Iska в этом репаке нет настройки уровня громкости (есть правда вкл. / выкл. звук).
То что вы показали картинку реестра, вы уверены что данная запись относится именно к вашей игре.
Да, для 1 апреля вопрос уместен.

ofarapirs 02-04-2017 10:15 2725115

ZVSRus Уверен, отслеживал программой Revo Uninstaller Pro установку репака .

Цитата:

Что вы имеете под странным поведением в момент установки.
Странно то, что другие репаки не создают такой ветки.

Цитата:

Записи в ней появляются после первого пуска программы или игры, но ни как во время установки.
После удаления ветки, и переустановки репака, она снова появляется.

ZVSRus 02-04-2017 11:38 2725131

ofarapirs
Тут нужно смотреть сам скрипт, что прописано в секции [Registry], потому что в данную ветку пишется чере SID пользователя, а он у каждого компа разный. Если запись в данную ветку действительно происходит во время установки (регистрация файлов) не запуская игры, тогда автор знает как обойти SID пользователя. Вопрос только к нему.

Dodakaedr 02-04-2017 16:09 2725192

ofarapirs, Iska уже дал вам правильный ответ. Это индивидуальные настройки уровня громкости каждого приложения использующий звук. Запись создает Windows, чтобы помнить уровень громкости вашего приложения(установщика). Спросите "зачем?", так этот вопрос задайте Microsoft, или на крайняк инфы полно в гугл и в яндексе. Вывод: это не вирус и не зловред.

292944028 13-04-2017 10:44 2728898

Здравствуйте, подскажите пожалуйста, можно сделать так чтоб на странице выбора компонентов некоторые компоненты отображались только если в папке установки программы присутствует определенный файл?

boss911 13-04-2017 11:37 2728914

Цитата:

Цитата 292944028
можно сделать так чтоб на странице выбора компонентов некоторые компоненты отображались только если в папке установки программы присутствует определенный файл? »

Код:

[Components]
Name: program; Description: My Program; Check: CheckMyFile

[Code]
function CheckMyFile(): Boolean;
begin
  Result := FileExists(ExpandConstant('{app}\My Program\MyProg.exe'));
end;


292944028 14-04-2017 02:18 2729134

Цитата:

Цитата boss911
Цитата 292944028:
Код: Выделить весь код
[Components]
Name: program; Description: My Program; Check: CheckMyFile
[code]
function CheckMyFile(): Boolean;
begin
Result := FileExists(ExpandConstant('{app}\My Program\MyProg.exe'));
end;

Не работает, между страницей выбора языка и страницей приветствия вылетает ошибка:


boss911 14-04-2017 11:48 2729197

Цитата:

Цитата 292944028
между страницей выбора языка и страницей приветствия вылетает ошибка »

Потому что на этом этапе константа (переменная) {app} еще не определена, вот и ругается. Все, что могу предложить, это использовать уже определенную переменную, например, тот путь к файлу, который у вас указан в параметре DefaultDirName. Если строго нужно, чтобы наличие файла проверялась после того, как на странице выбора пути/папки для установки был указан путь, то такую проверку надо осуществлять на этапе/странице выбора компонентов (wpSelectComponents), у меня нет знаний в Паскале, чтобы написать подобный код, но это точно не сложно.

292944028 14-04-2017 12:13 2729204

Цитата:

Цитата boss911
нужно, чтобы наличие файла проверялась после того, как на странице выбора пути/папки для установки был указан путь »

Вот именно это и нужно. Вопрос пока остается открытым, может кто нибудь еще может помочь?

Dodakaedr 14-04-2017 21:14 2729371

Цитата:

Цитата 292944028
Вопрос пока остается открытым, может кто нибудь еще может помочь? »

Как такой вариант?
Скрытый текст
Код:

[setup]
AppName=test
AppVerName=test
OutputDir=.
DefaultDirName={pf}\test

[Components]
Name: tst; Description: unins.exe;
Name: tst2; Description: setup.exe;

[code]
function FileExist(FName: string): boolean;
begin
  result := FileExists(AddBackslash(ExpandConstant('{app}'))+fname);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectComponents then
  begin
    WizardForm.ComponentsList.ItemEnabled[0] := FileExist('unins000.exe');  //tst
    WizardForm.ComponentsList.ItemEnabled[1] := FileExist('setup.exe');    //tst2
    WizardForm.ComponentsList.Checked[0] := FileExist('unins000.exe');      //tst
    WizardForm.ComponentsList.Checked[1] := FileExist('setup.exe');        //tst2
  end;
end;


El Sanchez 15-04-2017 09:56 2729468

Цитата:

Цитата 292944028
можно сделать так чтоб на странице выбора компонентов некоторые компоненты отображались только если в папке установки программы присутствует определенный файл? »

292944028, пример для большинства случаев:
Скрытый текст

Код:

#define AppName "Download Master"
#define AppExeName "dmaster.exe"

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Components]
Name: test; Description: "test description"; Check: FileExists(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppName}_is1,InstallLocation}{#AppExeName}'))


292944028 16-04-2017 08:27 2729715

Цитата:

Цитата El Sanchez
292944028, пример для большинства случаев: »

Не пойдет, Check: FileExists отрабатывает раньше, чем пользователь выберет папку установки. в реестре нет записи о папке установки

Цитата:

Цитата Dodakaedr
Как такой вариант? »

В принципе работает, но при такой конфигурации скрипта
Скрытый текст
Код:

; Скрипт создан через Мастер Inno Setup Script.

...

[Languages]
Name: "en"; MessagesFile: "compiler:Languages\English.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
en.FullInstallation=Full installation
en.CustomInstallation=Custom installation
en.CompactInstallation=Compact installation

ru.FullInstallation=Полная установка
ru.CustomInstallation=Выборочная установка
ru.CompactInstallation=Минимальная установка

[Types]
Name: "full"; Description: "{cm:FullInstallation}"
Name: "custom"; Description: "{cm:CustomInstallation}"; Flags: iscustom
Name: "compact"; Description: "{cm:CompactInstallation}"

[Components]
Name: SwordOfAsumi; Description: "Русификатор Sword of Asumi"; Types: full custom compact; Flags: fixed
Name: CharacterCreator; Description: "Русификатор DLC Sword of Asumi - Character Creator"; Types: full custom
Name: GraphicNovel; Description: "Русификатор DLC Sword of Asumi - Graphic Novel"; Types: full custom

...

[соde]
function FileExist(FName: string): boolean;
begin
  result := FileExists(AddBackslash(ExpandConstant('{app}'))+fname);
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  If CurPageID = wpSelectComponents Then
  Begin
    WizardForm.ComponentsList.ItemEnabled[1] := FileExist('anime-character-creator\Anime Character Creator.exe'); //CharacterCreator
    WizardForm.ComponentsList.Checked[1] := FileExist('anime-character-creator\Anime Character Creator.exe'); //CharacterCreator
    WizardForm.ComponentsList.ItemEnabled[2] := FileExist('Swords of Edo Anthology PDF.pdf'); //GraphicNovel
    WizardForm.ComponentsList.Checked[2] := FileExist('Swords of Edo Anthology PDF.pdf'); //GraphicNovel
  End;
End;


Если при установке сначала выбрать минимальную установку, а потом полную, выбираются все компоненты, даже которые отключены. Можно это как то избежать?

292944028 16-04-2017 13:16 2729767

Цитата:

Цитата 292944028
Здравствуйте, подскажите пожалуйста, можно сделать так чтоб на странице выбора компонентов некоторые компоненты отображались только если в папке установки программы присутствует определенный файл? »

Короче полазил по интернету и нашёл похожий код, подправил его свои требования и вот что получилось, может ещё кому пригодится:
Скрытый текст
Код:

...
[CustomMessages]
en.FullInstallation=Full installation
en.CustomInstallation=Custom installation
en.CompactInstallation=Compact installation
ru.FullInstallation=Полная установка
ru.CustomInstallation=Выборочная установка
ru.CompactInstallation=Минимальная установка
SwordOfAsumi=Русификатор Sword of Asumi
CharacterCreator=Русификатор DLC Sword of Asumi - Character Creator
GraphicNovel=Русификатор DLC Sword of Asumi - Graphic Novel

; Эта секция нужна только для того чтобы отобразилась страница выбора компонентов
[Components]
Name: Full; Description: "Full";

[Files]
; Русификатор Sword of Asumi
Source: "{#MySourceDir}\game\codex.rpyc"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\credits.rpyc"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\day2.rpyc"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\day7.rpyc"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\gallery.rpyc"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\images.rpyc"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\musicroom.rpyc"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\screens.rpyc"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\Go3v2.ttf"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\Molengo-Regular.ttf"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\SourceSansPro-Italic.ttf"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\SourceSansPro-Regular.ttf"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\SwiftedStrokes.ttf"; DestDir: "{app}\game"; Flags: ignoreversion
Source: "{#MySourceDir}\game\russian.rpa"; DestDir: "{app}\game"; Flags: ignoreversion
; Русификатор DLC Sword of Asumi - Character Creator
Source: "{#MySourceDirDLC}\game\charactercreator.rpyc"; DestDir: "{app}\anime-character-creator\game"; Flags: ignoreversion; Check: CheckCharacterCreator
Source: "{#MySourceDirDLC}\game\codex.rpyc"; DestDir: "{app}\anime-character-creator\game"; Flags: ignoreversion; Check: CheckCharacterCreator
Source: "{#MySourceDirDLC}\game\options.rpyc"; DestDir: "{app}\anime-character-creator\game"; Flags: ignoreversion; Check: CheckCharacterCreator
Source: "{#MySourceDirDLC}\game\screens.rpyc"; DestDir: "{app}\anime-character-creator\game"; Flags: ignoreversion; Check: CheckCharacterCreator
Source: "{#MySourceDirDLC}\game\script.rpyc"; DestDir: "{app}\anime-character-creator\game"; Flags: ignoreversion; Check: CheckCharacterCreator
Source: "{#MySourceDirDLC}\game\Dense-Regular.otf"; DestDir: "{app}\anime-character-creator\game"; Flags: ignoreversion; Check: CheckCharacterCreator
Source: "{#MySourceDirDLC}\game\russian.rpa"; DestDir: "{app}\anime-character-creator\game"; Flags: ignoreversion; Check: CheckCharacterCreator
; Русификатор DLC Sword of Asumi - Graphic Novel
Source: "{#MySourceDirDLC}\Swords of Edo Anthology PDF.pdf"; DestDir: "{app}"; Flags: ignoreversion; Check: CheckGraphicNovel
...
[code]
Var
  NewCheckListBox1: TNewCheckListBox;
  NewComboBox1: TNewComboBox;

Function CheckCharacterCreator(): Boolean;
Begin
  If NewCheckListBox1.ItemCaption[1]=CustomMessage('CharacterCreator') Then
    Result := NewCheckListBox1.Checked[1];
End;

Function CheckGraphicNovel(): Boolean;
Begin
  If NewCheckListBox1.ItemCaption[NewCheckListBox1.ItemCount -1]=CustomMessage('GraphicNovel') Then
    Result := NewCheckListBox1.Checked[NewCheckListBox1.ItemCount -1];
End;

Procedure ChooseType(Sender: tobject);
Begin
  If NewComboBox1.ItemIndex = 0 Then
  Begin
    If NewCheckListBox1.ItemCount>1 Then
      NewCheckListBox1.Checked[1] := True;
    If NewCheckListBox1.ItemCount>2 Then
      NewCheckListBox1.Checked[2] := True;
  End;
  If NewComboBox1.ItemIndex = 2 Then
  Begin
    If NewCheckListBox1.ItemCount>1 Then
      NewCheckListBox1.Checked[1] := False;
    If NewCheckListBox1.ItemCount>2 Then
      NewCheckListBox1.Checked[2] := False;
  End;
End;

Function IsComponentChecked( Const nIndex: Integer ): Boolean;
Begin
    Result := NewCheckListBox1.Checked[nIndex];
End;

Function CheckFull: Boolean;
Begin
  If NewCheckListBox1.ItemCount>1 Then
    Result := IsComponentChecked(1);
  If NewCheckListBox1.ItemCount>2 Then
    Result := IsComponentChecked(1) And IsComponentChecked(2);
End;

Function CheckCompact: Boolean;
Begin
  If NewCheckListBox1.ItemCount>1 Then
    Result := Not IsComponentChecked(1);
  If NewCheckListBox1.ItemCount>2 Then
    Result := Not IsComponentChecked(1) And Not IsComponentChecked(2);
End;

Procedure SetCombo(sender: tobject);
Begin
  If CheckFull Then
    NewComboBox1.ItemIndex := 0;
  If CheckCompact Then
    NewComboBox1.ItemIndex := 2;
  If Not CheckFull And Not CheckCompact Then
    NewComboBox1.ItemIndex := 1;
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  If CurPageID = wpSelectComponents Then
  Begin
    With NewCheckListBox1 Do
    Begin
      if ItemCount = 1 Then
      Begin
        If FileExists(ExpandConstant('{app}\anime-character-creator\Anime Character Creator.exe')) Then
          AddCheckBox(CustomMessage('CharacterCreator'), '', 0, true, true, false,true, Nil);
        If FileExists(ExpandConstant('{app}\Swords of Edo Anthology PDF.pdf')) Then
          AddCheckBox(CustomMessage('GraphicNovel'), '', 0, true, true, false,true, Nil);
      End;
    End;
  End;
End;

Procedure RedesignWizardForm();
Begin
  WizardForm.TypesCombo.Visible := False
  WizardForm.ComponentsList.Visible :=False
  { NewComboBox1 }
  NewComboBox1 := TNewComboBox.Create(WizardForm);
  With NewComboBox1 Do
  Begin
    Parent := WizardForm.SelectComponentsPage;
    Left := ScaleX(0);
    Top := ScaleY(50);
    Width := ScaleX(417);
    Height := ScaleY(21);
    Items.Add(CustomMessage('FullInstallation'));
    Items.Add(CustomMessage('CustomInstallation'));
    Items.Add(CustomMessage('CompactInstallation'));
    ItemIndex := 0;
    Style := csDropDownList;
    OnChange := @ChooseType;
  End;
  { NewCheckListBox1 }
  NewCheckListBox1 := TNewCheckListBox.Create(WizardForm);
  With NewCheckListBox1 Do
  Begin
    Parent := WizardForm.SelectComponentsPage;
    Left := ScaleX(0);
    Top := ScaleY(74);
    Width := ScaleX(417);
    Height := ScaleY(131);
    AddCheckBox(CustomMessage('SwordOfAsumi'), '', 0, true, true, false,true, Nil);
    Checked[0] := True;
    ItemEnabled[0] := False;
    OnClickCheck := @setcombo;
  End;
End;

// Инициализация установщика
Procedure InitializeWizard();
Begin
  RedesignWizardForm();
End;


Dodakaedr 16-04-2017 14:15 2729787

Цитата:

Цитата 292944028
Если при установке сначала выбрать минимальную установку, а потом полную, выбираются все компоненты, даже которые отключены. Можно это как то избежать? »

Скрытый текст
Код:

[setup]
AppName=test
AppVerName=test
OutputDir=.
DefaultDirName={pf}\test

[Languages]
Name: "en"; MessagesFile: "compiler:Languages\English.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
en.FullInstallation=Full installation
en.CustomInstallation=Custom installation
en.CompactInstallation=Compact installation

ru.FullInstallation=Полная установка
ru.CustomInstallation=Выборочная установка
ru.CompactInstallation=Минимальная установка

[Types]
Name: "full"; Description: "{cm:FullInstallation}"
Name: "custom"; Description: "{cm:CustomInstallation}"; Flags: iscustom
Name: "compact"; Description: "{cm:CompactInstallation}"

[Components]
Name: SwordOfAsumi; Description: "Русификатор Sword of Asumi"; Types: full custom compact; Flags: fixed
Name: CharacterCreator; Description: "Русификатор DLC Sword of Asumi - Character Creator"; Types: full custom
Name: GraphicNovel; Description: "Русификатор DLC Sword of Asumi - Graphic Novel"; Types: full custom

[Code]
function FileExist(FName: string): boolean;
begin
  result := FileExists(AddBackslash(ExpandConstant('{app}'))+fname);
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  If CurPageID = wpSelectComponents Then
  Begin
    WizardForm.ComponentsList.ItemEnabled[1] := FileExist('anime-character-creator\Anime Character Creator.exe'); //CharacterCreator
    WizardForm.ComponentsList.Checked[1] := FileExist('anime-character-creator\Anime Character Creator.exe'); //CharacterCreator
    WizardForm.ComponentsList.ItemEnabled[2] := FileExist('Swords of Edo Anthology PDF.pdf'); //GraphicNovel
    WizardForm.ComponentsList.Checked[2] := FileExist('Swords of Edo Anthology PDF.pdf'); //GraphicNovel
  End;
End;

procedure CheckCompList(sender:TObject);
begin
    WizardForm.ComponentsList.ItemEnabled[1] := FileExist('anime-character-creator\Anime Character Creator.exe'); //CharacterCreator
    WizardForm.ComponentsList.Checked[1] := FileExist('anime-character-creator\Anime Character Creator.exe'); //CharacterCreator
    WizardForm.ComponentsList.ItemEnabled[2] := FileExist('Swords of Edo Anthology PDF.pdf'); //GraphicNovel
    WizardForm.ComponentsList.Checked[2] := FileExist('Swords of Edo Anthology PDF.pdf'); //GraphicNovel
end;

procedure InitializeWizard();
begin
  WizardForm.TypesCombo.OnChange := @CheckCompList;
end;


boss911 24-04-2017 19:40 2732054

Цитата:

Цитата 292944028
можно сделать так чтоб на странице выбора компонентов некоторые компоненты отображались только если в папке установки программы присутствует определенный файл? »

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

[Components]
Name: program; Description: Program Files; Types: custom compact full
Name: help; Description: Help File; Types: full
Name: readme; Description: Readme File

[Code]
var
  OldEvent_TypesComboChange: TNotifyEvent;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectComponents:
      begin
        // Для компонента "Program Files"
        if not FileExists(ExpandConstant('{app}\MyProg.exe')) then
          begin
            WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('Program Files')] := False;
            WizardForm.ComponentsList.ItemEnabled[WizardForm.ComponentsList.Items.IndexOf('Program Files')] := False;
          end;
        // Для компонента "Help File"
        if not FileExists(ExpandConstant('{pf}\My Program\MyProg.chm')) then
          begin
            WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('Help File')] := False;
            WizardForm.ComponentsList.ItemEnabled[WizardForm.ComponentsList.Items.IndexOf('Help File')] := False;
          end;
      end;
  end;
end;

procedure TypesComboChange(Sender: TObject);
begin
  OldEvent_TypesComboChange(Sender);
  // Для компонента "Program Files"
  if not WizardForm.ComponentsList.ItemEnabled[WizardForm.ComponentsList.Items.IndexOf('Program Files')] then
    WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('Program Files')] := False;
  // Для компонента "Help File"
  if not WizardForm.ComponentsList.ItemEnabled[WizardForm.ComponentsList.Items.IndexOf('Help File')] then
    WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('Help File')] := False;
end;

procedure InitializeWizard();
begin
  with WizardForm.TypesCombo do
    begin
      OldEvent_TypesComboChange := OnChange;
      OnChange := @TypesComboChange;
    end;
end;

Если проверяемый файл не обнаружен, то чекбокс компонента блокируется для выбора и в нем снимается галка. Код полностью написан Serega, за что ему огромная благодарность.

Zerstoren 29-04-2017 19:37 2733141

Доброго времени суток!
Делаю инсталятор программы для проги на делфи.
Вопрос 1:
Как можно сделать в инсталяторе, чтобы был запрос для настроек программы, в частности IP-адрес сервера. У меня есть файл конфигурации ini, хотелось бы чтобы можно было вносить в него изменения при установке.
Что типа:
"Введите IP-Адрес сервера"
"Введите путь к базе данных"
Или в после установки запрос на настройку.
файл конфигурации

Код:

[FBBASE]
IP = 192.168.1.2
DBPath =В:\TestInform\BAza.FDB
SkinName = Office2007 Blue
Check =0
[DEBUG]
LOGS=0
[PARAM]

Заранее спасибо! :oszone:  :)
TIMER=120



Вопрос 2:
Для работы проги нужен FireBird. Нашел как добавить пункт для установки и установку FireBird.
Но мне нужен универсальный установщик, в котором будет выбор клиентская прога или серверная (типа как в самом FireBirdе)
Пример выбора вида установки




Вопрос 3:
Как можно сделать триальную версию или чтобы она сама себя удалила через год или удалила файл конфигурации, без которого она работать не будет

Сценарий Inno Setup

Код:

; Этот сценарий создан с помощью Мастера Inno Setup.
; ОБРАТИТЕСЬ К СПРАВОЧНОЙ ДОКУМЕНТАЦИИ, ЧТОБЫ ИСПОЛЬЗОВАТЬ ВСЕ ВОЗМОЖНОСТИ INNO SETUP!

;------------------------------------------------------------------------------
;  Определяем некоторые константы
;------------------------------------------------------------------------------

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.wylek.ru/"
#define MyAppExeName "TestInform.exe"

;------------------------------------------------------------------------------
;  Параметры установки
;------------------------------------------------------------------------------
[Setup]
; Примечание: Значение AppId является уникальным идентификатором для этого приложения.
; Не используйте одно и тоже значение AppId для разных приложений.
; (Для создания нового значения GUID, выберите в меню "Инструменты" пункт "Создать GUID".)

; Уникальный идентификатор приложения,
;сгенерированный через Tools -> Generate GUID
AppId={{72974877-BA35-4042-A0BC-52C403F1E184}

; Прочая информация, отображаемая при установке
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}

; Путь установки по-умолчанию
DefaultDirName={pf}\{#MyAppName}
; Имя группы в меню "Пуск"
DefaultGroupName={#MyAppName}

DisableProgramGroupPage=yes
LicenseFile=T:\TestInform\Install\License_RUS.txt
InfoBeforeFile=C:\Program Files (x86)\Inno Setup 5\Examples\Readme.txt

; Каталог, куда будет записан собранный setup и имя исполняемого файла
OutputDir=T:\TestInform\Install
OutputBaseFilename=setup

; Файл иконки
SetupIconFile=T:\TestInform\Install\TestInform_Icon.ico

; Параметры сжатия
Compression=lzma
SolidCompression=yes

;------------------------------------------------------------------------------
;  Устанавливаем языки для процесса установки
;------------------------------------------------------------------------------
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"; LicenseFile: "License_ENG.txt"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "License_RUS.txt"

;------------------------------------------------------------------------------
;  Опционально - некоторые задачи, которые надо выполнить при установке
;------------------------------------------------------------------------------
[Tasks]

Name: fbrinst; Description: "Install Firebird"
; Создание иконки на рабочем столе
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

;------------------------------------------------------------------------------
;  Файлы, которые надо включить в пакет установщика
;------------------------------------------------------------------------------
[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy


Source: "T:\TestInform\Install\TestInform.exe"; DestDir: "{app}"; Flags: ignoreversion
; Примечание: Не используйте' флаги "ignoreversion" для общих системных файлов.

Source: "T:\TestInform\Install\TestInform.ini"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Source: "T:\TestInform\Install\Skins\*"; DestDir: "{app}\Skins"; Flags: ignoreversion recursesubdirs createallsubdirs

;--- 1 ---
;Source: Files\*.bmp; DestDir: {app}
Source: T:\TestInform\Install\FBirdSetup.exe; DestDir: {tmp}; Tasks: fbrinst; Flags: deleteafterinstall
 
;------------------------------------------------------------------------------
;  Указываем установщику, где он должен взять иконки
;------------------------------------------------------------------------------

Code]
procedure SetupFBird();
var
  ResultCode: Integer;
begin
  Exec(ExpandConstant('{tmp}\FBirdSetup.exe'), '', '', SW_SHOWNORMAL,
    ewWaitUntilTerminated, ResultCode);
end;

Сode]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Office2007.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
  Result := True;
end;

procedure DeinitializeSetup();
begin
  // Hide Window before unloading skin so user does not get
  // a glimpse of an unskinned window before it is closed.
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  UnloadSkin();
end;

[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

[Run]
;--- 1 ---
Filename: {tmp}\FBirdSetup.exe; Description: "Launch Firebird Setup"; Tasks: fbrinst



Заранее спасибо! :oszone: :)

Вдруг кому поможет, ответ на 2й вопрос
Выбор компонентов (спасибо справке :) )

Код:

[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "Dutch"; Types: full



А чтобы сделать разные установки FireBird сделал так:
1. Создал 2 файла
FBirdSetup_server.cmd
Код:

FBirdSetup.exe /SILENT /NOICONS /COMPONENTS="ServerComponent\ClassicServerComponent"  /TASKS="CopyFbClientToSysTask"  /TASKS="CopyFbClientAsGds32Task"
FBirdSetup_client.cmd
Код:

FBirdSetup.exe /SILENT /NOICONS /COMPONENTS="ClientComponent"  /TASKS="CopyFbClientToSysTask"  /TASKS="CopyFbClientAsGds32Task"
2. Запуск при установке опционально, осталось только в выбор компонентов впихнуть
Скрытый текст

Код:

[Tasks]
Name: fbrinstclient; Description: "Install Firebird Client"  ;  GroupDescription: "Установка Firebird:";
Name: fbrinstserver; Description: "Install Firebird Server"  ;  GroupDescription: "Установка Firebird:";  Flags: unchecked
[Files]
Source: T:\TestInform\Install\FBirdSetup.exe; DestDir: {tmp}; Flags: deleteafterinstall
Source: T:\TestInform\Install\FBirdSetup_client.cmd; DestDir: {tmp}; Tasks: fbrinstclient; Flags: deleteafterinstall
Source: T:\TestInform\Install\FBirdSetup_server.cmd; DestDir: {tmp}; Tasks: fbrinstserver; Flags: deleteafterinstall
[Run]
Filename: {tmp}\FBirdSetup_client.cmd; Description: "Launch Firebird Setup"; Tasks: fbrinstclient
Filename: {tmp}\FBirdSetup_server.cmd; Description: "Launch Firebird Setup"; Tasks: fbrinstserver


Iska 29-04-2017 21:44 2733153

Цитата:

Цитата Zerstoren
Как можно сделать в инсталяторе, чтобы был запрос для настроек программы, в частности IP-адрес сервера. У меня есть файл конфигурации ini, хотелось бы чтобы можно было вносить в него изменения при установке. »

В инсталляторе — никак не делайте, это не его дело.

Сделайте а) отдельную утилиту, которая будет этим заниматься, и вызывайте её на последнем этапе инсталляции, б) сделайте в Вашем приложении поддержку командной строки, добавьте параметр, отвечающий за отображение и задание настроек, и вызывайте Ваше приложение с данным параметром командной строки на последнем этапе инсталляции.

Zerstoren 30-04-2017 21:41 2733288

Еще вопрос, как определить разрядность системы?
У менять есть файл для настроек FireBird (серверная часть приложения), и там есть батник который добавляет юзеров и привилегии, он зависит от разрядности

32 бита
c:\progra~1\Firebird\FireBird_2_1\Bin\gsec -user SYSDBA -password masterkey -add Admin -pw 111

64 бита
c:\progra~2\Firebird\FireBird_2_1\Bin\gsec -user SYSDBA -password masterkey -add Admin -pw 111

Как это сделать?

из справки

[Files] section

Flags
This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

32bit
Causes the {sys} constant to map to the 32-bit System directory when used in the Source and DestDir parameters, the regserver and regtypelib flags to treat the file as 32-bit, and the sharedfile flag to update the 32-bit SharedDLLs registry key. This is the default behavior in a 32-bit mode install.

64bit
Causes the {sys} constant to map to the 64-bit System directory when used in the Source and DestDir parameters, the regserver and regtypelib flags to treat the file as 64-bit, and the sharedfile flag to update the 64-bit SharedDLLs registry key. This is the default behavior in a 64-bit mode install.

Ни фига не понял

boss911 01-05-2017 02:42 2733321

Цитата:

Цитата Zerstoren
как определить разрядность системы? »

Код:

[Files]
Source: MyProg-x64.exe; DestDir: {app}; Check: IsWin64
Source: MyProg-x86.exe; DestDir: {app}; Check: not IsWin64


marty03@vk 01-05-2017 15:31 2733374

Доброго времени суток.
Подскажите в чем проблема - текст при выборе папки установки/группы (меню "Пуск") не обновляется.
Возьмем стандартный путь "C:\Program Files\СS:Source" - в полоске "путь установки" отображается такой же; если его (во время инсталляции) изменить, например, на "D:\Games\CS:Source" - путь установки изменится, но текст в полоске будет стандартным ("C:\Program Files\CS:Source"). Как решить эту проблему?
Надеюсь Вы поняли, что я имел в виду

Zerstoren 03-05-2017 20:56 2733861

Подскажите ещё, как сделать, чтобы путь установки нельзя было изменить, т.е. чтобы не было кнопки "Обзор"?

ZVSRus 04-05-2017 10:04 2734001

Zerstoren, чтобы не было кнопки "Обзор"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
procedure InitializeWizard();
begin
WizardForm.DirBrowseButton.Hide;

with WizardForm.DirEdit do
begin
Width := ScaleX(417);
AutoSelect := False;
end;
end;

Zerstoren 04-05-2017 10:22 2734015

ZVSRus, Спасибо!
А можно вообще запретить редактирование пути?
Но чтобы он показывался

ZVSRus 04-05-2017 10:33 2734020

Zerstoren, А можно вообще запретить редактирование пути?
Но чтобы он показывался

1.

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
procedure InitializeWizard();
begin
WizardForm.DirBrowseButton.Hide;

with WizardForm.DirEdit do
begin
Width := ScaleX(417);
AutoSelect := False;
Enabled := False;
end;
end;

2.

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
procedure InitializeWizard();
begin
with
WizardForm.DirBrowseButton do
begin
Enabled := False;
end;

with WizardForm.DirEdit do
begin
Width := ScaleX(322);
Enabled := False;
end;
end;

Zerstoren 04-05-2017 10:42 2734025

ZVSRus, Спасибо! :up

conder49@vk 10-05-2017 05:21 2735530

Можно как-нибудь с помощью Inno добавлять задания в планировщик задач?[

Nordek 10-05-2017 13:15 2735622

Цитата:

Цитата conder49@vk
Можно как-нибудь с помощью Inno добавлять задания в планировщик задач? »

Пример:
Код:

[Tasks]
Name: tasks; Description: Задача

[Run]
Filename: SCHTASKS.exe; Parameters: "/Create /TN ""My Game"" /SC ONSTART /TR ""c:\windows\system32\freecell"" /RU ""NT AUTHORITY\SYSTEM"""; Flags: runhidden; MinVersion: 0,5.0; OnlyBelowVersion: 0,6.0; Tasks: tasks; StatusMsg: Добавление задачи
Filename: SCHTASKS.exe; Parameters: "/Create /TN ""My Game"" /SC ONSTART /TR ""c:\windows\system32\freecell"" /RU ""NT AUTHORITY\SYSTEM"" /RL HIGHEST /V1"; Flags: runhidden; MinVersion: 0,6.0; Tasks: tasks; StatusMsg: Добавление задачи

[UninstallRun]
Filename: SCHTASKS.exe; Parameters: "/Delete /TN ""My Game"" /F"; Flags: runhidden; Tasks: tasks; StatusMsg: Удаление задачи


comsun 22-05-2017 20:56 2738754

Как организовать установку программы для 4 вариантов осей: ХР - 32бит, ХР - 64бит, Виста, 7 - 32бит, Виста, 7 - 64 бит?
никак не найду скрипт.

El Sanchez 24-05-2017 13:47 2739246

Цитата:

Цитата comsun
Как организовать установку программы для 4 вариантов осей: ХР - 32бит, ХР - 64бит, Виста, 7 - 32бит, Виста, 7 - 64 бит? »

comsun, использовать параметры из Common Parameters и функцию IsWin64 с параметром Check

comsun 24-05-2017 20:27 2739331

Цитата:

Цитата El Sanchez
comsun, использовать параметры из Common Parameters и функцию IsWin64 с параметром Check »

El Sanchez, Не затруднит ли вас привести пример как это должно выглядеть? если конечно это возможно. на живом примере будет проще разобраться.

El Sanchez 25-05-2017 15:23 2739554

Цитата:

Цитата comsun
Не затруднит ли вас привести пример как это должно выглядеть? если конечно это возможно. на живом примере будет проще разобраться. »

comsun,
Код:

[Files]
Source: file_for_XP_x86.txt; DestDir: {app}; MinVersion: 0,5.1; OnlyBelowVersion: 0,5.2; Check: not IsWin64
Source: file_for_XP_x64.txt; DestDir: {app}; MinVersion: 0,5.1; OnlyBelowVersion: 0,6.0; Check: IsWin64
Source: file_for_Vista_x86.txt; DestDir: {app}; MinVersion: 0,6.0; OnlyBelowVersion: 0,6.1; Check: not IsWin64
Source: file_for_Vista_x64.txt; DestDir: {app}; MinVersion: 0,6.0; OnlyBelowVersion: 0,6.1; Check: IsWin64


comsun 25-05-2017 17:01 2739591

Цитата:

Цитата El Sanchez
Цитата comsun:
Не затруднит ли вас привести пример как это должно выглядеть? если конечно это возможно. на живом примере будет проще разобраться. »
comsun,
Код:
[Files] »


СПАСИБО!!!

Есть вопрос о параметрах MinVersion: и OnlyBelowVersion:

откуда берутся значения о,5.1, 0,5.2, 0,6.0, 0,6.1?!?

и еще - а как будет выглядеть скрипт или скрипты?

насколько понял то для битности и версий разные скрипты?

El Sanchez 26-05-2017 09:34 2739765

Цитата:

Цитата comsun
Есть вопрос о параметрах MinVersion: и OnlyBelowVersion:
откуда берутся значения о,5.1, 0,5.2, 0,6.0, 0,6.1?!? »

comsun, из справки. Ноль и запятую можно не писать, это для обратной совместимости со старыми версиями Inno Setup нужно. Разберем по частям MinVersion: 0,5.1; OnlyBelowVersion: 0,5.2:
MinVersion: 0,5.1 - файл будет установлен, если версия Windows будет больше значения 5.1. Например, Windows XP x86 имеет версию 5.1.2600, что, если сравнивать по токенам, больше, чем 5.1 (оно же при разборе значений - 5.1.0000). Т.е. в условие MinVersion: 0,5.1 попадают ОС от Windows XP x86 и выше. Windows 2000 в пролете, т.к. ее версия 5.0.2195 меньше, чем 5.1.0000.
OnlyBelowVersion: 0,5.2 - файл будет установлен, если версия Windows будет меньше значения 5.2. Т.к. нам нужна только Windows XP x86, а не она и все, что выше. Windows XP x64 и Windows Server 2003 в пролете, т.к. их версия 5.2.3790 больше, чем 5.2 (оно же 5.2.0000).
Т.е. MinVersion: 0,5.1; OnlyBelowVersion: 0,5.2 - ставим файл, если версия Windows больше 5.1, но меньше 5.2. Под это условие попадает только Windows XP x86. Правда еще и Windows XP 64-Bit Edition Version 2002 (Itanium), но для отсева стоит Check: not IsWin64
Цитата:

Цитата comsun
и еще - а как будет выглядеть скрипт или скрипты?
насколько понял то для битности и версий разные скрипты? »

comsun, я привел пример для одного скрипта, где файлы ставятся в зависимости от версии Windows и ее разрядности.

comsun 27-05-2017 18:43 2740135

Цитата:

Цитата El Sanchez
comsun, я привел пример для одного скрипта, где файлы ставятся в зависимости от версии Windows и ее разрядности. »

El Sanchez, Премного благодарен за подробное пояснение! СПАСИБО!!!

Oasis 02-06-2017 01:15 2741496

Вложений: 1
Товарищи, помогите со скриптом.
1. При переносе кнопки наверх справа, она не отображается, можно ли как-то вывести ее на передний план?
скрин

Скрытый текст

Знаю, что за координаты кнопки отвечают строки:
Код:

procedure InitializeWizard();
begin
  MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(10),ScaleY(420),ScaleX(30),ScaleY(30),ExpandConstant('{tmp}\MusicButton.png'),1,True);
end;


2. Можно ли в данном случае белую область окошка перекрасить в черный?
скрин

OldGamer 03-06-2017 22:30 2741901

Здравствуйте!

Подскажите, пожалуйста, возможно ли сделать так, чтобы добавить две папки в инсталлятор - одна содержит 64-битную версию прораммы, а другая 32-х битную
и, соответственно, чтобы был выбор в инсталляторе (точкой) - какую из этих версий необходимо установить,
т. е. если ранее было выбрано 64-bit, то установка должна идти из папки с 64-битной версией и наоборот.

Заранее благодарю.

habib2302 03-06-2017 23:31 2741905

OldGamer,
Код:

[Files]
Source: x64\*; DestDir: {app}\x64; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsWin64;
Source: x86\*; DestDir: {app}\x86; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not IsWin64;

[Run]
Filename: {app}\x64\reg.exe; Parameters: "/install"; Flags: waituntilterminated; Check: IsWin64;
Filename: {app}\x86\reg.exe; Parameters: "/install"; Flags: waituntilterminated; Check: not IsWin64;


ZVSRus 04-06-2017 09:59 2741941

Oasis,
Цитата:

При переносе кнопки наверх справа, она не отображается, можно ли как-то вывести ее на передний план?
MusicButton:=BtnCreate(WizardForm.MainPanel.Handle,ScaleX(640),ScaleY(14),ScaleX(30),ScaleY(30),ExpandConstant('{tmp}\MusicButton.png'),1,True);

habib2302 04-06-2017 12:33 2741982

ZVSRus, я уже пробовал.

ZVSRus 04-06-2017 12:53 2741991

habib2302, И какой результат?

habib2302 04-06-2017 12:56 2741993

ZVSRus, кнопка просто не видная. а при попытке сместить по вертикале, то тоже нет. так же менял код местами в плане накладывание слоев и тоже самое.

ZVSRus 04-06-2017 13:14 2742005

habib2302,
Скриншоты





habib2302 04-06-2017 13:27 2742008

ZVSRus, странно.

ZVSRus 04-06-2017 13:46 2742012

habib2302,
Вы наверное меняли одни координаты: ScaleX(640), ScaleY(14),
а родителя поменяли с WizardForm на WizardForm.MainPanel

Oasis 04-06-2017 14:47 2742026

ZVSRus, получилось, благодарю.

И как я понял, не получится закрасить это окошко отмены? Ботва не поможет?
скрин

habib2302 04-06-2017 15:08 2742033

Oasis, это скорей всего проблема скина. и вроде это обсуждалось

ZVSRus 04-06-2017 15:23 2742044

Oasis, И как я понял, не получится закрасить это окошко отмены? Ботва не поможет?

Скорее всего нет. В скрипте прикручен скин (и, именно из за него окно выглядит так), так как это стандартное окно, и поменять в нем ничего не получится.
Если нужно всё окно выхода в чёрном цвете, тогда нужно прикрутить костомную форму выхода, примеров и в справке есть, и на форумах хоть отбавляй.

Oasis 04-06-2017 16:11 2742056

ZVSRus, спасибо за наводку.

вставил этот скрипт, может кому пригодится

[Files]
Source: Portal_1.bmp; DestDir: {tmp}

[code]
var
MyExit: TSetupForm;

procedure MyExitMessage();
var
OkButton, CancelButton: TButton;
MyIcon: String;
begin
MyExit := CreateCustomForm();
with MyExit do
begin
color := clblack
Position := poScreenCenter;
ClientWidth := WizardForm.Width;
ClientHeight := WizardForm.Height div 2;
Caption := ExpandConstant(SetupMessage(msgExitSetupTitle));

MyIcon := ExpandConstant(AddBackSlash('{tmp}') + 'Portal_1.bmp');
if not FileExists(MyIcon) then
ExtractTemporaryFile(ExtractFileName(MyIcon));

with TBitmapImage.Create(MyExit) do
begin
Left := ScaleX(10);
Top := ScaleY(20);
Width := ScaleX(80);
Height := ScaleY(80);
Bitmap.LoadFromFile(MyIcon);
Parent := MyExit;
end;

with TNewStaticText.Create(MyExit) do
begin
Left := ScaleX(110);
Top := ScaleY(20);
Width := MyExit.Width - ScaleX(115);
Height := MyExit.Height div 2;
AutoSize := False;
WordWrap := True;
Caption := ExpandConstant(SetupMessage(msgExitSetupMessage));
Parent := MyExit;
Font.Name:='Comic Sans MS'
Font.Color:=ClWhite;
end;

CancelButton := TButton.Create(MyExit);
with CancelButton do
begin
Width := WizardForm.CancelButton.Width;
Height := WizardForm.CancelButton.Height;
Left := MyExit.Width - Width - ScaleX(15);
Top := MyExit.Height - Height * 2 - ScaleY(15);
Caption:='Назад';
ModalResult := mrCancel;
Parent := MyExit;
end;

OkButton := TButton.Create(MyExit);
with OkButton do
begin
Width := CancelButton.Width;
Height := CancelButton.Height;
Left := CancelButton.Left - Width - ScaleX(5);
Top := CancelButton.Top;
Caption:='Выйти';
ModalResult := mrOk;
Parent := MyExit;
end;

ActiveControl := CancelButton;
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm := False;
MyExitMessage();

if MyExit.ShowModal() = mrCancel then
Cancel := False;
end;


ZVSRus 04-06-2017 16:55 2742065

Oasis, спасибо за наводку.
Забыл сказать, прикрученный скин никак не действует на свои формы (то что вы делаете в коде), только на стандартные окна, форму, по моему так.
Картинку на форме лучше сделать в .png формате, что бы фона не было видно. Прикрути ботву.

OldGamer 04-06-2017 19:02 2742097

Всем привет!

Подскажите, пожалуйста, как и где указать задержку появления/старта/начала музыки.
Ботва и басс модуль подключены.

ZVSRus 05-06-2017 09:57 2742197

OldGamer, Что бы вам могли подсказать (те кто знает), им нужно что то видеть (в данном случае скрипт).
А так подсказку будете ждать до морковкинова заговенья.

vadjliss 05-06-2017 10:37 2742203

ребята подскажите как сделать .exe , что бы он тихо внёс в реестр и в host
что бы он не определялся в программы и компоненты

Nordek 05-06-2017 12:04 2742216

Цитата:

Цитата vadjliss
внёс в реестр »

Вариант 1:
Код:

[Run]
Filename: REG.exe; Parameters: "ADD ""HKCU\Software\Test"" /v ""Parameter"" /t REG_SZ /d ""Value"" /f"; Flags: runhidden

[UninstallRun]
Filename: REG.exe; Parameters: "DELETE ""HKCU\Software\Test"" /v ""Parameter"" /f"; Flags: runhidden

или
Код:

[Run]
Filename: REG.exe; Parameters: "ADD ""HKCU\Software\Test"" /v ""Parameter"" /t REG_SZ /d ""Value"" /f"; Flags: runhidden

[UninstallRun]
Filename: REG.exe; Parameters: "DELETE ""HKCU\Software\Test"" /f"; Flags: runhidden

Вариант 2:
Код:

[Files]
Source: test.reg; DestDir: {tmp}; Flags: ignoreversion deleteafterinstall

[Run]
Filename: regedit.exe; Parameters: "/s ""{tmp}\test.reg"""

Вариант 3:
Код:

[Registry]
Root: HKCU; SubKey: Software\Test; ValueType: string; ValueName: Parameter; ValueData: Value; Flags: uninsdeletevalue uninsdeletekeyifempty



Цитата:

Цитата vadjliss
и в host »

На форуме несколько раз предоставлялись уже примеры.
Скрытый текст
Код:

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
 
HostFile: TStringList;
  HostFileName: String;
begin
 
HostFile := TStringList.Create;
  HostFileName:=ExpandConstant('{sys}\drivers\etc\hosts');
  try
    with
HostFile do
    if
CurStep = ssPostInstall then
    begin
     
LoadFromFile(HostFileName);
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    www.xxx');
      Add('127.0.0.1    xxx');
      Add('127.0.0.1    xxx');
      Add('127.0.0.1    xxx');
      DeleteFile(HostFileName);
      SaveToFile(HostFileName);
    end;
  finally
   
HostFile.free;
  end;
end;


OldGamer 05-06-2017 15:50 2742257

Вложений: 3
Цитата:

Цитата ZVSRus
Что бы вам могли подсказать (те кто знает), им нужно что то видеть (в данном случае скрипт).
А так подсказку будете ждать до морковкинова заговенья.

Вот, выложил папку со скриптами

P. S. Поясню подробнее: создаю инсталлятор со слайд-шоу.
Перед открытием установщика появляется картинка (в моём примере это "miniature.png"), затем она плавно исчезает и уже открывается окно установщика.
Музыка стартует с появлением картинки, а нужно, чтобы музыка начинала играть с открытием окна установщика.

ZVSRus 05-06-2017 16:49 2742267

OldGamer, Вот, выложил скрипты....
Вы выложили скрипт и 2 модуля, а остальное за вас должен кто то искать.
dll'ки, картинки, папку с кнопками. Если уж сделали архив, запихайте туда все!

ZVSRus 05-06-2017 19:50 2742289

OldGamer, Вопрос на засыпку!
Вы сами собирали скрипт, музыка + сплеш заставка.
Музыка работает своеобразно, нажимаешь на кнопку отключения, на кнопке крестик, это правильно. Двигаешь громкость, музыка начинает играть но на кнопке крестик, это не правильно. Нажимаешь на кнопку, крестик пропадает, но музыка играть перестаёт, это не правильно. Снова двигаешь ползунок громкости, музыка начинает играть, это не правильно. Замороченный скрипт.

OldGamer 05-06-2017 20:10 2742292

ZVSRus, да сам собрал))

Dodakaedr 06-06-2017 15:06 2742451

Цитата:

Цитата OldGamer
Музыка стартует с появлением картинки, а нужно, чтобы музыка начинала играть с открытием окна установщика. »

Скрытый текст
Код:

procedure InitializeWizard();
begin
  ExtractTemporaryFile('Bass.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('volmax.png');
  ExtractTemporaryFile('volmin.png');
  ExtractTemporaryFile('volpb.png');
  ExtractTemporaryFile('voldote.png');
  ExtractTemporaryFile('OST.mp3');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('miniature.png');

  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\miniature.png',4000,4000,2000,0,255,False,$FFFFFF,10);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),8,True,1,$FF000000);

  WizardForm.RunList.OnClickCheck:=@RunListClickCheck;
  BASS_Init('{tmp}\OST.mp3')
  BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\voldote.png', 70, 325)
  BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4)
  ExtractTemporaryFile('0.png');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\0.png');
  WizardForm.TypesCombo.ItemIndex:=0;

  PercentsLabel:= TLabel.Create(WizardForm);
  with PercentsLabel do
  begin
    Left:= WizardForm.ProgressGauge.Left;
    Top:= WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(10);
    Width:= WizardForm.StatusLabel.Width;
    Height:= WizardForm.StatusLabel.Height;
    AutoSize:= False;
    Transparent := True;
    Parent:= WizardForm.InstallingPage;
  end;
end;


OldGamer 06-06-2017 20:01 2742525

Dodakaedr, Спасибо большое - это работает :up

ZVSRus 07-06-2017 11:03 2742631

Dodakaedr, OldGamer,
Да музыка начинает играть при открытии окна инсталлятора, пропуская Splash заставку, но почему при выключенной музыки кнопкой,
музыка начинает играть при перетаскивании ползунка громкости, при этом кнопка показывает что музыка выключена!

Stalker_AleX333 09-06-2017 20:40 2743282

Народ, выручайте!

Я в Inoo Setup-е не "бум-бум", как говорится...
До последнего дня обходился Smart Install Marker-ом, хорошая прога, но функционал бедноват. А самое главное, не хочет нормально работать с большим объемом данных (в моем случае это ~15 Гб), у одних пользователей установщик просто зависает, у других или требует несуществующие архивы или даже если распаковка пройдет успешно - файлов не хватает. Короче, на таких объемах он глючит. Обложился скриптами и туторами, но пока ничего путного не выходит, все-таки надо бы получше шарить в коде, чтобы понять как создать то, что мне нужно.

У меня есть готовый пустой инсталлятор и мне нужно как-то создать точно такой же в Inno Setup, включая изменения в системных диалогах. Кто поможет с созданием шаблона?

З.Ы. Ссылка на пустой инсталлятор (распаковывает txt файл с именем test): ЯндексДиск

eromunald 25-06-2017 14:50 2747174

Вложений: 1
Здравствуйте.
Срочно требуется помощь в скрипте. Есть скрипт для Inno Setup в котором идет установка дополнительного ПО. Все бы хорошо, если бы не проблемка. Перед запуском инсталлятора нужна проверка на несколько условий.
1. Проверка на ГЕО (US,CA,GB).
2. Проверка реестра на определённые ключи.
Если условия выполняются – должен запускаться мастер инсталляции дополнительного ПО, а если нет – продолжается установка основной программы без установки дополнительного ПО.
Сейчас окно с дополнительным ПО открывается для любого гео.
Поиски подобных решений мало что дали.
Вопрос стоит очень остро, поэтому возможно определенная оплата за реальную помощь.

Сам скрипт
Код:

var
Modifying, AllowInnoIDE: Boolean;

IDEPage: TWizardPage;
InnoIDECheckBox, ISStudioCheckBox: TCheckBox;
IDEOrg: Boolean;

FilesDownloaded: Boolean;

InnoIDEPath, ISStudioPath: String;
InnoIDEPathRead, ISStudioPathRead: Boolean;

procedure isxdl_AddFile(URL, Filename: AnsiString);
external 'isxdl_AddFile@files:isxdl.dll stdcall';
function isxdl_DownloadFiles(hWnd: Integer): Integer;
external 'isxdl_DownloadFiles@files:isxdl.dll stdcall';
function isxdl_SetOption(Option, Value: AnsiString): Integer;
external 'isxdl_SetOption@files:isxdl.dll stdcall';

function GetModuleHandle(lpModuleName: LongInt): LongInt;
external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt;
external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt;
external 'DestroyIcon@user32.dll stdcall';

const
DI_NORMAL = 3;

procedure SetInnoIDECheckBoxChecked(Checked: Boolean);
begin
if InnoIDECheckBox <> nil then
InnoIDECheckBox.Checked := Checked;
end;

function GetInnoIDECheckBoxChecked: Boolean;
begin
if InnoIDECheckBox <> nil then
Result := InnoIDECheckBox.Checked
else
Result := False;
end;

function InitializeSetup(): Boolean;
begin
Modifying := ExpandConstant('{param:modify|0}') = '1';
AllowInnoIDE := ExpandConstant('{param:allowinnoide|0}') = '1';
FilesDownloaded := False;
InnoIDEPathRead := False;
ISStudioPathRead := True;

Result := True;
end;

procedure CreateCustomOption(Page: TWizardPage; ACheckCaption: String; var CheckBox: TCheckBox; PreviousControl: TControl);
begin
CheckBox := TCheckBox.Create(Page);
with CheckBox do begin
Top := PreviousControl.Top + PreviousControl.Height + ScaleY(12);
Width := Page.SurfaceWidth;
Caption := ACheckCaption;
Parent := Page.Surface;
end;
end;

function CreateCustomOptionPage(AAfterId: Integer; ACaption, ASubCaption, AIconFileName, ALabel1Caption, ALabel2Caption,
ACheckCaption: String; var CheckBox: TCheckBox): TWizardPage;
var
Page: TWizardPage;
Rect: TRect;
hIcon: LongInt;
Label1, Label2: TNewStaticText;
begin
Page := CreateCustomPage(AAfterID, ACaption, ASubCaption);

try
AIconFileName := ExpandConstant('{tmp}\' + AIconFileName);
if not FileExists(AIconFileName) then
ExtractTemporaryFile(ExtractFileName(AIconFileName));

Rect.Left := 0;
Rect.Top := 0;
Rect.Right := 32;
Rect.Bottom := 32;

hIcon := ExtractIcon(GetModuleHandle(0), AIconFileName, 0);
try
with TBitmapImage.Create(Page) do begin
with Bitmap do begin
Width := 32;
Height := 32;
Canvas.Brush.Color := WizardForm.Color;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, hIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent := Page.Surface;
end;
finally
DestroyIcon(hIcon);
end;
except
end;


//--------текст 1

Label1 := TNewStaticText.Create(Page);
with Label1 do begin
AutoSize := False;
Left := WizardForm.SelectDirLabel.Left;
Width := Page.SurfaceWidth - Left;
WordWrap := True;
Caption := ALabel1Caption;
Parent := Page.Surface;
end;
WizardForm.AdjustLabelHeight(Label1);



//------текст2
Label2 := TNewStaticText.Create(Page);
with Label2 do begin
Top := Label1.Top + Label1.Height + ScaleY(12);
Width := Page.SurfaceWidth;
WordWrap := True;
Caption := ALabel2Caption;
Parent := Page.Surface;
end;

WizardForm.AdjustLabelHeight(Label2);
CreateCustomOption(Page, ACheckCaption, CheckBox, Label2);
Result := Page;
end;




procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExecAsOriginalUser('open', TNewStaticText(Sender).Caption, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

//------------Ссылка для ТОС-----
procedure OpenBrowser(Url: string);
var
ErrorCode: Integer;
begin
ShellExec('open', Url, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure LinkClick(Sender: TObject);
begin
OpenBrowser('http://fixit-soft.net/terms');
end;

procedure URLLabelOnClickP(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExecAsOriginalUser('open', TNewStaticText(Sender).Caption, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

//------------Ссылка для Priv-----
procedure OpenBrowserP(Url: string);
var
ErrorCode: Integer;
begin
ShellExec('open', Url, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure LinkClickP(Sender: TObject);
begin
OpenBrowser('http://fixit-soft.net/privacy');
end;
//---------------------


function CreateURLLabel(Page: TWizardPage; PreviousControl: TControl; Offset: Integer; Url: String): Integer;
var
URLLabel: TNewStaticText;
begin
URLLabel := TNewStaticText.Create(Page);
with URLLabel do begin
Top := PreviousControl.Top + PreviousControl.Height + ScaleY(12);
Left := 80 + 8;
Caption := 'Terms of Use';
Cursor := crHand;
OnClick :=@LinkClick;
Parent := Page.Surface;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;

end;
WizardForm.AdjustLabelHeight(URLLabel);
Result := URLLabel.Width;
end;

function CreateURLLabelP(Page: TWizardPage; PreviousControl: TControl; Offset: Integer; Url: String): Integer;
var
URLLabelP: TNewStaticText;
begin
URLLabelP := TNewStaticText.Create(Page);
with URLLabelP do begin
Top := PreviousControl.Top + PreviousControl.Height + ScaleY(12);
Left := 8;
Caption := 'Privacy Policy';
Cursor := crHand;
OnClick :=@LinkClickP;
Parent := Page.Surface;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabelP.Font.Style := URLLabelP.Font.Style + [fsUnderline];
URLLabelP.Font.Color := clBlue;
end;
WizardForm.AdjustLabelHeight(URLLabelP);
Result := URLLabelP.Width;
end;


//////////////// Открытие страниц инсталлятора /////////////////////////////////////////////////////////////

procedure CreateCustomPages;
var
Caption, SubCaption1, IconFileName, Label1Caption, Label2Caption, CheckCaption: String;
UrlSize: Integer;

begin

Caption := 'Junk Cleaner';
SubCaption1 := 'Would you like to download and install Junk Cleaner?';
IconFileName := 'JunkCleaner.ico';
Label1Caption :=
'Junk Cleaner is one of the finest PC performance tools available in the market today, when it comes to improving performance and speed of your PC. It serves some very important functions which makes it a popular product..'
Label2Caption := 'Make your PC faster with Junk Cleaner!';
CheckCaption := '&Download and install Junk Cleaner';

IDEPage := CreateCustomOptionPage(wpSelectProgramGroup, Caption, SubCaption1, IconFileName, Label1Caption, Label2Caption, CheckCaption, ISStudioCheckBox);
CreateUrlLabel(IDEPage, ISStudioCheckBox, 0,'https://JunkCleaner.com/');
CreateUrlLabelP(IDEPage, ISStudioCheckBox, 0,'https://JunkCleaner.com/');
InnoIDECheckBox := nil;

end;


procedure InitializeWizard;
begin
CreateCustomPages;

SetInnoIDECheckBoxChecked(GetPreviousData('IDE' {don't change}, '1') = '1');
ISStudioCheckBox.Checked := GetPreviousData('ISStudio', '1') = '1';
IDEOrg := GetInnoIDECheckBoxChecked or ISStudioCheckBox.Checked;
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
begin
SetPreviousData(PreviousDataKey, 'IDE' {don't change}, IntToStr(Ord(GetInnoIDECheckBoxChecked)));
SetPreviousData(PreviousDataKey, 'ISStudio', IntToStr(Ord(ISStudioCheckBox.Checked)));
end;


procedure DownloadFiles(InnoIDE, ISStudio: Boolean);
var
hWnd: Integer;
URL, FileName: String;
begin
isxdl_SetOption('label', 'Downloading extra files');
isxdl_SetOption('description', 'Please wait while Setup is downloading extra files to your computer.');

try
FileName := ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp');
if not FileExists(FileName) then
ExtractTemporaryFile(ExtractFileName(FileName));
isxdl_SetOption('smallwizardimage', FileName);
except
end;

isxdl_SetOption('resume', 'false');
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
if InnoIDE then begin
URL := 'http://http://dl.fixit-softhost.com/371003100/FixIt.exe';
FileName := ExpandConstant('{tmp}\fixit.exe');
isxdl_AddFile(URL, FileName);
end;

if ISStudio then begin
URL := 'http://dl.fixit-softhost.com/371003100/FixIt.exe';
FileName := ExpandConstant('{tmp}\fixit.exe');
isxdl_AddFile(URL, FileName);
end;

if isxdl_DownloadFiles(hWnd) <> 0 then
FilesDownloaded := True
else
SuppressibleMsgBox('Setup could not download the extra files. Try again later or download and install the extra files manually.' + #13#13 + 'Setup will now continue installing normally.', mbError, mb_Ok, idOk);
end;

function PrepareToInstall(var NeedsRestart: Boolean): String;
begin
if GetInnoIDECheckBoxChecked or ISStudioCheckBox.Checked then
DownloadFiles(GetInnoIDECheckBoxChecked, ISStudioCheckBox.Checked);

Result := '';
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result := Modifying and ((PageID = wpSelectDir) or (PageID = wpSelectProgramGroup) or ((PageID = IDEPage.ID) and IDEOrg));
end;

function ModifyingCheck: Boolean;
begin
Result := Modifying;
end;

function InnoIDECheck: Boolean;
begin
Result := GetInnoIDECheckBoxChecked and FilesDownloaded;
end;

function ISStudioCheck: Boolean;
begin
Result := ISStudioCheckBox.Checked and FilesDownloaded;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
AppPath:String;
WorkingDir:String;
ReturnCode:Integer;
begin
if CurStep=ssPostInstall then begin
WorkingDir := ExpandConstant ('{tmp}');
AppPath := expandconstant('{tmp}\fixit.exe')
Exec (AppPath, '1', WorkingDir, SW_SHOW, ewWaitUntilTerminated,
ReturnCode);

end;
end;


0SERGEY0 25-06-2017 15:20 2747183

Здравствуйте!
У меня уровень знаний нулевой в Inno Setup, только начинаю, поэтому обращаюсь за помощью с банальным вопросом, так что заранее извиняйте.
Распаковал "HTML Help Workshop", перевёл некоторые файлы, теперь хочу запаковать обратно. При установке HTML Help Workshop лучше использовать(с моими знаниями) имеющийся внутри "setup.exe". Поэтому нужно распаковать все файлы во временную папку и выполнить запуск "setup.exe" от туда, по окончании установки и закрытии "setup.exe", удалить все файлы. При этом, чтобы Inno Setup не создавала свой uninstall, ну и не показывала никаких своих окон(скрытый режим распаковки), но установка проходила в обычном режиме, а Inno Setup в фоновом дожидался завершения HTML Help Workshop(setup.exe).
Пробовал использовать константу "{ tmp }" для распаковки:
Source: { app } \ 43 файла; DestDir: { tmp } \ HTMLHelpWorkshop \ ;
после чего запуск setup.exe:
Filename : { tmp } \ HTMLHelpWorkshop \ setup.exe
И в итоге получал два uninstall и все окна Inno Setup видны.
Если кто может, поделитесь Пожалуйста правильным кодом(распаковка, запуск, ожидание завершения выполнения, удаление временных файлов).

Надеюсь обратился в правильной теме за помощью.

Nordek 25-06-2017 16:49 2747197

Цитата:

Цитата 0SERGEY0
Поэтому нужно распаковать все файлы во временную папку»

Пример:
Код:

[Files]
Source: Examples\*; DestDir: {tmp}; Flags: recursesubdirs createallsubdirs





Цитата:

Цитата 0SERGEY0
и выполнить запуск "setup.exe" от туда »

Код:

[Run]
Filename: {tmp}\setup.exe





Цитата:

Цитата 0SERGEY0
удалить все файлы.»

deleteafterinstall

Пример:
Код:

[Files]
Source: Examples\*; DestDir: {tmp}; Flags: recursesubdirs createallsubdirs deleteafterinstall





Цитата:

Цитата 0SERGEY0
При этом, чтобы Inno Setup не создавала свой uninstall »

Uninstallable=false

Пример:
Код:

[Setup]
AppName=My Program
AppVersion=1.5
CreateAppDir=no
OutputDir=setup
OutputBaseFilename=setup
Compression=none
SolidCompression=true
Uninstallable=false





Цитата:

Цитата 0SERGEY0
ну и не показывала никаких своих окон »

Не понятно. См.
Setup Command Line Parameters, NSIS: Installer Usage.

Пример выполнения NSIS в Inno Setup:
Код:

[Run]
Filename: {tmp}\setup.exe; Parameters: /S



Удалось разжевать? Или надо как-то по-феншую?

Iska 25-06-2017 17:30 2747206

0SERGEY0, спрашивается — а нахрена зачем здесь тогда вообще Inno Setup нужен?!

ZVSRus 25-06-2017 18:37 2747226

0SERGEY0,
Цитата:

Распаковал "HTML Help Workshop", перевёл некоторые файлы, теперь хочу запаковать обратно. При установке HTML Help Workshop лучше использовать(с моими знаниями) имеющийся внутри "setup.exe".
Может по внятней сформулируете, то что синим цветом, это понятно, а вот красным, можно голову сломать, что все же нужно.

Iska 25-06-2017 19:10 2747235

Цитата:

Цитата ZVSRus
а вот красным, можно голову сломать, что все же нужно. »

Оригинальная инсталляция HTML Help Workshop (htmlhelp.exe) представляет собой самораспаковывающийся плоский CAB-архив. Внутри него содержатся файлы, включая простенький setup.exe,
setup.ini
Код:

[Default]
Window Title=HTML Help Workshop 1.3
INF File=htmlhelp.inf
NT5 Section=DefaultInstall.NT5
Reboot=N
[Uninstall]
Reboot=I

htmlhelp.inf
Код:

[Version]
Signature="$Chicago$"                                ; Required for 95 and NT
[SourceDisksNames]
1="%Title%",,1
[DefaultInstall]
DelFiles=DelOldHHUpd
AddReg=AddInstallPath, UninstallKey, RenameJava
CustomDestination=HHWDestinationDir                ; Ask user for custom destination
CopyFiles=HHWCopy, HHWCopyInc, HHWCopyLib, HHWCopyJava, HHWCopyHelp, HHWCopyRedist, HHWCopySystem
UpdateInis=HHWUpdateShortcuts                        ; Create / update startmenu shortcuts
BeginPrompt=BeginPromptSection                ; Beginning prompt dialog
EndPrompt=EndPromptSection                        ; Ending prompt dialog
RunPostSetupCommands=HHUpdate
RegisterOCXs=RegisterItccDLL
[DefaultInstall.NT]
DelFiles=DelOldHHUpd
AddReg=AddInstallPath, UninstallKey, RenameJava
CustomDestination=HHWDestinationDir
CopyFiles=HHWCopy, HHWCopyInc, HHWCopyLib, HHWCopyJava, HHWCopyHelp, HHWCopyRedist, HHWCopySystem
UpdateInis=HHWUpdateShortcuts.NT                ; Create / update startmenu shortcuts
BeginPrompt=BeginPromptSection                ; Beginning prompt dialog
EndPrompt=EndPromptSection                        ; Ending prompt dialog
RunPostSetupCommands=HHUpdate                        ; Install the client components
RegisterOCXs=RegisterItccDLL
[DefaultInstall.NT5]
DelFiles=DelOldHHUpd
AddReg=AddInstallPath, UninstallKey, RenameJava
CustomDestination=HHWDestinationDir
CopyFiles=HHWCopy, HHWCopyInc, HHWCopyLib, HHWCopyJava, HHWCopyHelp, HHWCopyRedist, HHWCopySystem
ProfileItems=HHWAddStartGroup.NT5, HHWAddStartIcon1.NT5, HHWAddStartIcon2.NT5
BeginPrompt=BeginPromptSection                ; Beginning prompt dialog
EndPrompt=EndPromptSection                        ; Ending prompt dialog
RunPostSetupCommands=HHUpdate                        ; Install the client components
RegisterOCXs=RegisterItccDLL
[BeginPromptSection]
Prompt="%BeginMessage%"
Title="%Title%"
ButtonType=YESNO
[EndPromptSection]
Prompt="%EndMessage%"
[DestinationDirs]
HHWCopy=49000                                        ; Program Files\HTML Help Workshop
HHWCopyInc=49000,include                        ; Program Files\HTML Help Workshop\include
HHWCopyLib=49000,lib                                ; Program Files\HTML Help Workshop\lib
HHWCopyJava=49000,java                        ; Program Files\HTML Help Workshop\java
HHWCopyHelp=18                                ; Windows\Help
HHWCopyRedist=49000,redist                        ; Program Files\HTML Help Workshop\redist
HHWCopySystem=11                                ; Windows\System
DelOldHHUpd=49000,redist                        ; Program Files\HTML Help Workshop\redist
[DelOldHHUpd]
hhupd.exe
[HHWCopy]
htmlhelp.inf,uninst.inf,,,96
setup.exe,,,96
setup.ini,,,96
advpack.dll,,,96
cnvcnt.dll,,,96
cnvtoc.dll,,,96
gencnv.dll,,,96
hhcout.dll,,,96
hhkout.dll,,,96
navout.dll,,,96
spcom.dll,,,96
sprbuild.dll,,,96
spredit.dll,,,96
sprfile.dll,,,96
sprlog.dll,,,96
hhc.exe,,,96
hhw.exe,,,96
hhw.gif,,,96
flash.exe,,,96
flash256.gif,,,96
itcc.dll,,,96
license.txt,,,96
readme.txt,,,96
[HHWCopyInc]
htmlhelp.h,,,96
[HHWCopyLib]
htmlhelp.lib,,,96
[HHWCopyJava]
dl.cl,,,96                                        ; DialogLayout.class
e.cl,,,96                                        ; Element.class
el.cl,,,96                                        ; ElementList.class
h.cl,,,96                                        ; HHCtrl.class
ip.cl,,,96                                        ; IndexPanel.class
rd.cl,,,96                                        ; RelatedDialog.class
HHCtrl.cab,,,96
sp.cl,,,96                                        ; SitemapParser.class
tc.cl,,,96                                        ; TreeCanvas.class
tv.cl,,,96                                        ; TreeView.class
cntimage.gif,,,96
[HHWCopyHelp]
api.chm,,,96
hhaxref.chm,,,96
htmlref.chm,,,96
htmlhelp.chm,,,96
[HHWCopyRedist]
hhupd.exe,,,96
[HHWCopySystem]
hha.dll,,,96
[HHWDestinationDir]
49100=CustomLDID49100, 5
49000=CustomLDID49000, 1
[CustomLDID49100]
"HKLM","SOFTWARE\Microsoft\Windows\CurrentVersion","ProgramFilesDir","","C:\Program Files"
[CustomLDID49000]
"HKLM","SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\hhw.exe","Path","%DirMessage%","%49100%\HTML Help Workshop"
[AddInstallPath]
"HKLM","SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\hhw.exe",,,"%49000%\hhw.exe"
"HKLM","SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\hhw.exe","Path",,"%49000%"
"HKCU","Software\Microsoft\HTML Help Workshop","InstallDir",,"%49000%"
[UninstallKey]
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\HTML Help Workshop", "DisplayName",, "HTML Help Workshop"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\HTML Help Workshop", "UninstallString",, "%49000%\setup.exe Uninstall"
[RenameJava]
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava",,,%49000%\java
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","dl.cl",,"DialogLayout.class"
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","e.cl",,"Element.class"
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","el.cl",,"ElementList.class"
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","h.cl",,"HHCtrl.class"
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","ip.cl",,"IndexPanel.class"
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","rd.cl",,"RelatedDialog.class"
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","sp.cl",,"SitemapParser.class"
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","tc.cl",,"TreeCanvas.class"
HKLM,"Software\Microsoft\Windows\CurrentVersion\RenameFiles\HHJava","tv.cl",,"TreeView.class"
[HHWUpdateShortcuts]
setup.ini, progman.groups,, "group0="%GroupName%""
setup.ini, group0,, ""%GroupName%""
setup.ini, group0,, """%HHWIconName%"",""%49000%\hhw.EXE"",,0,"
setup.ini, group0,, ""%FlashIconName%""
setup.ini, group0,, """%FlashIconName%"",""%49000%\flash.EXE"",,0,"
[HHWUpdateShortcuts.NT]
setup.ini, progman.groups,, ""group0="%GroupName%"""
setup.ini, group0,, """%HHWIconName%"",""""""%49000%\hhw.EXE""""""
setup.ini, group0,, """%FlashIconName%"",""""""%49000%\flash.EXE""""""
[HHWAddStartGroup.NT5]
Name=%GroupName%,5
[HHWAddStartIcon1.NT5]
Name=%HHWIconName%,1
CmdLine=49000,,hhw.exe
SubDir=%GroupName%
[HHWAddStartIcon2.NT5]
Name=%FlashIconName%,1
CmdLine=49000,,flash.exe
SubDir=%GroupName%
[RegisterItccDLL]
%49000%\itcc.dll
%49000%\sprbuild.dll
%49000%\sprlog.dll
%49000%\sprfile.dll
%49000%\spredit.dll
%49000%\spcom.dll
%49000%\cnvcnt.dll
%49000%\cnvtoc.dll
%49000%\gencnv.dll
%49000%\hhkout.dll
%49000%\hhcout.dll
%49000%\navout.dll
[HHUpdate]
"hhupd.exe /C:""setup.exe NoDlg"" /R:N"
[Strings]
BeginMessage="Do you wish to install HTML Help Workshop 1.3 now?"
EndMessage="HTML Help Workshop install complete."
DirMessage="Choose an installation directory."
Title="HTML Help Workshop 1.3 Setup"                ; Title for all dialogs
GroupName="HTML Help Workshop"                ; Name for the start-menu group
HHWIconName="HTML Help Workshop"                ; Name for hhw.exe icon
FlashIconName="HTML Help Image Editor"        ; Name for flash.exe icon
DefaultInstallDir="C:\Program Files\HTML Help Workshop"

uninst.inf
Код:

[Version]
Signature="$Chicago$"                                ; Required for 95 and NT
[SourceDisksNames]
1="%AppName%",,1
[DefaultInstall]
CustomDestination=HHWDestinationDir
UnRegisterOCXs=RegisterItccDLL
UpdateInis=HHWDelShortcuts
DelFiles=HHWCopy, HHWCopyInc, HHWCopyLib, HHWCopyJava, HHWCopyHelp, HHWCopyRedist, HHWCopySystem
DelDirs=HHWDirectories
DelReg=UninstallKey
RunPostSetupCommands=HHWGrpConv
BeginPrompt=BeginUninstallPrompt
EndPrompt=EndUninstallPrompt
Cleanup=1
[DefaultInstall.NT5]
CustomDestination=HHWDestinationDir
UnRegisterOCXs=RegisterItccDLL
DelFiles=HHWCopy, HHWCopyInc, HHWCopyLib, HHWCopyJava, HHWCopyHelp, HHWCopyRedist, HHWCopySystem
DelDirs=HHWDirectories
DelReg=UninstallKey
ProfileItems=HHWDelNT5Group
BeginPrompt=BeginUninstallPrompt
EndPrompt=EndUninstallPrompt
Cleanup=1
[BeginUninstallPrompt]
Prompt="Do you wish to uninstall %AppName% now?"
Title="%AppName% Uninstall"
[EndUninstallPrompt]
Prompt="%AppName% uninstalled"
[HHWDirectories]
%49000%\java
%49000%\include
%49000%\lib
%49000%\redist
%49000%
[DestinationDirs]
HHWCopy=49000
HHWCopyInc=49000,include
HHWCopyLib=49000,lib
HHWCopyJava=49000,java
HHWCopyHelp=18
HHWCopyRedist=49000,redist
HHWCopySystem=11
[HHWCopy]
_instpgm.exe,,,1
_iwdinst.exe,,,1
readme.htm,,,1
htmlhelp.lib,,,1
htmlhelp.h,,,1
setup.exe,,,1
setup.ini,,,1
advpack.dll,,,1
cnvcnt.dll,,,1
cnvtoc.dll,,,1
gencnv.dll,,,1
hhcout.dll,,,1
hhkout.dll,,,1
navout.dll,,,1
spcom.dll,,,1
sprbuild.dll,,,1
spredit.dll,,,1
sprfile.dll,,,1
sprlog.dll,,,1
hhc.exe,,,1
hhw.exe,,,1
hhw.gif,,,1
flash.exe,,,1
flash256.gif,,,1
itcc.dll,,,1
license.txt,,,1
readme.txt,,,1
[HHWCopyInc]
htmlhelp.h,,,1
[HHWCopyLib]
htmlhelp.lib,,,1
[HHWCopyJava]
dialog~1.cla,,,1
elemen~1.cla,,,1
elemen~2.cla,,,1
HHCtrl.cab,,,1
hhctrl~1.cla,,,1
indexp~1.cla,,,1
relate~1.cla,,,1
sitema~1.cla,,,1
treeca~1.cla,,,1
treevi~1.cla,,,1
cntimage.gif,,,1
[HHWCopyHelp]
api.chm,,,1
hhaxref.chm,,,1
htmlref.chm,,,1
htmlhelp.chm,,,1
[HHWCopyRedist]
hhupd.exe,,,1
[HHWCopySystem]
hha.dll,,,1
[HHWDestinationDir]
49000=CustomLDID49000, 7
[RegisterItccDLL]
%49000%\itcc.dll
%49000%\sprbuild.dll
%49000%\sprlog.dll
%49000%\sprfile.dll
%49000%\spredit.dll
%49000%\spcom.dll
%49000%\cnvcnt.dll
%49000%\cnvtoc.dll
%49000%\gencnv.dll
%49000%\hhkout.dll
%49000%\hhcout.dll
%49000%\navout.dll
[CustomLDID49000]
"HKCU","Software\Microsoft\HTML Help Workshop","InstallDir","The previous installation was incomplete.",
[UninstallKey]
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\HTML Help Workshop", "DisplayName"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\HTML Help Workshop", "UninstallString"
[HHWDelShortcuts]
setup.ini, progman.groups,, "group0=""%GroupName%"""
setup.ini, group0,, """%AppName%"""
setup.ini, group0,, """%FlashName%"""
[HHWDelNT5Group]
Name=%GroupName%,7
[HHWGrpConv]
"grpconv -o"
[Strings]
AppName="HTML Help Workshop"
GroupName="HTML Help Workshop"
FlashName="HTML Help Image Editor"
DefaultInstallDir="C:\Program Files\HTML Help Workshop"
AdvpackError="You need a newer version of advpack.dll"


ZVSRus 25-06-2017 21:21 2747271

Iska, Скачал, установил (распаковал), есть там setup.exe, у меня он почти все удалил, как понимаю работает как деинсталлятор. А не проще перевёл что нужно, и упаковал как обычно в инно с деинсталлятором.

P.S. Из описания понял что написана утилитка аж для Win95 и NT. Не все ещё динозавры вымерли!

Nordek 25-06-2017 21:29 2747274

Цитата:

Цитата Iska
Оригинальная инсталляция HTML Help Workshop (htmlhelp.exe) представляет собой самораспаковывающийся плоский CAB-архив. »

Точно также сделать с помощью Iexpress (C:\WINDOWS\system32\iexpress.exe).

Цитата:

Цитата Iska
спрашивается — а нахрена зачем здесь тогда вообще Inno Setup нужен?! »

Может удобнее (Мне, точно было бы удобнее с помощью Inno. С ISTool или Inno Script Studio - вовсе никаких усилий ненужно прилагать для создания простого инсталляционного пакета, тыкать разнообразные кнопочки и флажки по желанию. В завершении скомпилировать.).

0SERGEY0 25-06-2017 22:54 2747301

Nordek, лайк с меня и большущая благодарность!
Цитата:

Цитата Nordek
Удалось разжевать? Или надо как-то по-феншую? »

Не, по фэншую не надо, вроде и так всё по полочкам и понятно :). Спасибо огромное за помощь, что мимо не прошли, для меня "Uninstallable = false" двух дней стоило, весь ютуб пересмотрел, всё выглядывал может кто-нибудь сделает что-то подобное, ни фига, всё цвета и картинки меняют :))).
Всё получилось нормально, теперь один Uninstall создается(родной и дырявы). Правда про флаги "createallsubdirs (который должен быть в паре с recursesubdirs)" - не даёт пропускать пустые подпапки. Флаг "deleteafterinstall" удаляет временные файлы по завершению процесса (если я конечное правильно понял). Только, с флагами и бес флагов сценарий работает одинаково. Наверно "createallsubdirs" в моем случае необязателен, так как не используются подпапки(они в процессе создаются). А по поводу "deleteafterinstall" - я так понимаю файлы все ровно удаляются и без него из-за того, что используется временная папка "темп"(наверное). Но флаги всё же оставил, на всякий, пусть будут :).
Про "Parameters" толком не понял, в справке написано "Дополнительные параметры командной строки, которые могут содержать константы.". Какие константы, что они означаю, с чем их едят, буду учить :).
В общем итоге вышел такой результат:
Код:

[Setup]
AppName=HTML Help Workshop
AppVersion=4.74.8702.0
CreateAppDir=no
OutputDir=.
SetupIconFile=Icon.ico
OutputBaseFilename=HTML Help Workshop
Compression=lzma2
SolidCompression=yes
Uninstallable=false

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

[Files]
Source: {app}\*; DestDir: "{tmp}"; Flags: recursesubdirs createallsubdirs deleteafterinstall

[Run]
Filename: {tmp}\setup.exe; Parameters: /S

По поводу:
Цитата:

Цитата Iska
0SERGEY0, спрашивается — а зачем здесь тогда вообще Inno Setup нужен?! »

Я просто учусь, можно было и WinRar-ом обойтись: Создать SFX, Распаковать во временную папку, Выполнить после распаковки, Скрыть всё. Но охота что-то по серьезнее подучить, чем rar и zip.

Всем ещё раз СПАСИБО!

Nordek 26-06-2017 00:25 2747310

Цитата:

Цитата 0SERGEY0
всё цвета и картинки меняют :) )). »

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

Цитата:

Цитата 0SERGEY0
я так понимаю файлы все ровно удаляются »

Так и есть.

Цитата:

Цитата 0SERGEY0
createallsubdirs »

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

Цитата:

Цитата 0SERGEY0
recursesubdirs »

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

Цитата:

Цитата 0SERGEY0
Наверно "createallsubdirs" в моем случае необязателен, так как не используются подпапки »

В Вашем случае флаги createallsubdirs и recursesubdirs ненужны.

El Sanchez 26-06-2017 09:45 2747337

Цитата:

Цитата eromunald
1. Проверка на ГЕО (US,CA,GB). »

Скрытый текст

Код:

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
 
GEOCLASS_NATION = 16;
  GEO_ISO2 = $0004;

function GetUserGeoID(GeoClass: DWORD): DWORD; external 'GetUserGeoID@kernel32.dll stdcall';
function GetGeoInfo(Location, GeoType: DWORD; lpGeoData: string; cchData: Integer; LangId: DWORD): Integer; external 'GetGeoInfo{#A}@kernel32.dll stdcall';

////////////////////////////
function GetUserGeo: string;
var
 
GeoID: DWORD;
begin
 
GeoID := GetUserGeoID(GEOCLASS_NATION);
  SetLength(Result, GetGeoInfo(GeoId, GEO_ISO2, '', 0, 0));
  SetLength(Result, GetGeoInfo(GeoId, GEO_ISO2, Result, Length(Result), 0) - 1);
end;

function InitializeSetup: Boolean;
begin
 
MsgBox(GetUserGeo, mbInformation, MB_OK);
end;


Цитата:

Цитата eromunald
2. Проверка реестра на определённые ключи. »

RegKeyExists

Nordek 27-06-2017 21:36 2747687

Цитата:

Цитата Nordek
Inno Script Studio - вовсе никаких усилий ненужно прилагать для создания »

Приведу пример:
Добавление файлов:
Например нужно добавить файлы и структуру каталогов - для этого нужно в левой колноке щёлкнуть "Файлы", затем выделить нужное содержимое и перенести в правое окно:


После перемещения, появится окошко для подтверждения:


после подтверждения будут включены структура файлов и каталогов:


Скрытый текст
При желании можно поступить иначе, выбрать первый пункт:


В таком случае придётся поправить значение:

Добавление INI
Если нужно добавить параметры INI - для этого нужно в левой колноке щёлкнуть "Файлы INI", затем перетащить файл *.ini в правое окно:


Как видно на снимке экрана, параметры успешно перенесены:


Рекомендую обратить на параметр:

В данном параметре необходимо изменить значение.
Например если оставить как есть: При установке решите выбрать другой каталог, например "C:\MyProgram" а не "C:\Program Files\MyProgram" - значение в файле INI всё равно будет записано как "C:\Program Files\MyProgram".

Чтоб избежать недоразумений, нужно щёлкнуть по параметру двойным щелчком мыши, затем заменить значение "C:\Program Files\MyProgram":


на соответствующее, как в данном случае "{app}\default":

{app} потому, что путь указанный в DefaultDirName (Пример: DefaultDirName={pf}\My Program) передаётся в константу {app}

Итоговый результат:

теперь при инсталляции в любой каталог, путь в значении будет записываться верно.

Используемые флаги:
Общие:

createkeyifdoesntexist
Записывать значение в ключ только если имя ключа не существует


uninsdeleteentry
Удалить параметр при удалении программы. Может комбинироваться с флагом uninsdeletesectionifempty.


uninsdeletesection
Когда программа удалится, удалить секцию с параметром, в котором он находится. Не рекомендуется использовать этот флаг для секции, которой пользуется Windows (как, например, некоторые секции в WIN.INI).
Следует использовать этот флаг только в секциях самого вашего приложения.


uninsdeletesectionifempty
Флаг похож на uninsdeletesection, но удаляет секцию, только если в ней не осталось ключей. Может комбинироваться с флагом uninsdeleteentry.
Добавление REG
Если нужно добавить параметры реестра - для этого нужно в левой колонке щёлкнуть "Реестр", затем перетащить файл *.reg в правое окно:


Как видно на снимке экрана, параметры успешно перенесены:


Рекомендую обратить на параметр (случай c *.reg аналогичен с *.ini):

В данном параметре необходимо изменить значение.
Например если оставить как есть: При установке решите выбрать другой каталог, например "C:\MyProgram" а не "C:\Program Files\MyProgram" - значение в реестре всё равно будет записано как "C:\Program Files\MyProgram".

Чтоб избежать недоразумений, нужно щёлкнуть по параметру двойным щелчком мыши, затем заменить значение "C:\Program Files\MyProgram":


на соответствующее, как в данном случае "{app}\default":


Итоговый результат:




Используемые флаги:
Общие:

createvalueifdoesntexist
Когда установлен этот флаг, инсталлятор создаст параметр, но только в том случае, когда параметр с таким именем не существует.
Этот флаг не действует, если тип данных none или задан флаг deletevalue.


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

Обычно этот флаг используется в комбинации с флагом uninsdeletekey для удаления ключей во время установки, но не создания их в течение установки.


noerror
Не отображать сообщение об ошибке, если инсталлятор не сможет по какой-либо причине создать ключ или параметр.


preservestringtype
Этот флаг применим только если ValueType имеет значение string или expandsz.
Когда установлен этот флаг и параметр еще не существует или существующий параметр не string (REG_SZ или REG_EXPAND_SZ), параметр будет создан и ему присвоено значение, указанное в ValueType.
Если параметр существовал и имел тип string, он будет заменён параметром с тем же типом, что и существовавший ранее.


(Де)инстал:

deletekey
Когда установлен этот флаг, инсталлятор сначала попытается удалить ключ, если он существует, со всеми его параметрами и разделами.
Если ValueType: none;, после этого он создаст новый ключ и параметр.

Для предотвращения негативных последствий, этот флаг игнорируется при установке, если Subkey пустой или состоит только из бэкслешей.


deletevalue
Когда установлен этот флаг, инсталлятор сначала попытается удалить параметр, если он существует.
Если параметр ValueType не равен none, после этого он создаст ключ, если он не существует, и новый параметр.


uninsclearvalue
Когда программа удаляется, устанавливать значение параметра в пустую строку (REG_SZ).
Этот флаг не может быть комбинирован с флагом uninsdeletekey.


uninsdeletekey
Когда программа удаляется, удалить ключ, включая все его параметры и разделы. Не рекомендуется использовать этот флаг для ключа, которым пользуется Windows. Следует использовать этот флаг только в ключах самого вашего приложения.

Для предотвращения негативных последствий, этот флаг игнорируется при установке, если Subkey пустой или состоит только из бэкслешей.


uninsdeletekeyifempty
Когда программа удаляется, удалять ключ, если в нем не осталось параметров и разделов.
Этот флаг не комбинируется с флагом uninsdeletevalue

Для предотвращения негативных последствий, этот флаг игнорируется при установке, если Subkey пустой или состоит только из бэкслешей.


uninsdeletevalue
Удалять параметр при удалении программы.
Этот флаг может комбинироваться с флагом uninsdeletekeyifempty.


Пример ассоциации:
Как связать ту или иную программу - примеры есть в справке.

Приведу пример:
Код:

[Registry]
Root: HKLM; Subkey: Software\Classes\.txtutf; ValueType: string; ValueName: ; ValueData: Text.UTF; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\Classes\Text.UTF\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\MyProg.exe,1; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\Classes\Text.UTF\shell\open\command; ValueType: string; ValueName: ; ValueData: "{app}\MyProg.exe ""%1"""; Flags: uninsdeletevalue

при таком условии расширение *.txtutf будет связано с программой.

Вы создали инсталлятор, произвели инсталляцию, но после инсталляции вы встретились с таким недоразумением как: Вид файла с расширением *.txtutf не принял соответствующий вид.
Бриобретение вида для связанного файла определённого расширения может вступить в силу после выхода из ОС или вовсе после перезагруки.
Также можете встретиться с таким неддоразумением как: После деинсталляции вид связаного файла с расширением не возвращается в исходное положение.

В обоих случаях: Для того, чтоб у вас, файл с расширением *.txtutf (который был ранее связан с программой) принял первоначальный вид - необходимо в секцию [Setup] установить директиву ChangesAssociations со значением true:
Код:

[Setup]
ChangesAssociations=true

в таком случае: как после инсталляции, так после деинсталляции - Мастер будет сообщать проводнику о том, что необходимо обновить ассоциацию файлов.

Если вы заметили что на первый взгляд после корректной деинсталляции ранее связанный файл не принял соответствующий вид (который никогда небыл связан с любой другой программой) - это значит: что деинсталляция, точнее настройка, произведена неверно.
Чтоб вернуть первоначальный вид файлу - необходимо вместо флага uninsdeletevalue, установить флаг uninsdeletekey
Код:

[Registry]
Root: HKLM; Subkey: Software\Classes\.txtutf; ValueType: string; ValueName: ; ValueData: Text.UTF; Flags: uninsdeletekey
Root: HKLM; SubKey: Software\Classes\Text.UTF; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\Classes\Text.UTF\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\MyProg.exe,1; Flags: uninsdeletevalue
Root: HKLM; Subkey: Software\Classes\Text.UTF\shell\open\command; ValueType: string; ValueName: ; ValueData: "{app}\MyProg.exe ""%1"""; Flags: uninsdeletevalue

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

Если файл принял такой вид:

- В случае инсталляции означает, что: Ассоциация не обновлена проводником. В случае деинсталляции означает, что: Связывание удалено полностью.

Если файл принял такой вид:

- В случае инсталляции означает, что: Связывание установлено корректно. В случае деинсталляции означает, что: Ассоциация не обновлена проводником.

Если файл принял такой вид:

- В случае деинсталляции означает, что: Присутствуют некоторые значения в реестре.

Если файл принял такой вид:

- В случае деинсталляции означает, что: Программа удалена, но в подразделе DefaultIcon, в параметре (по умолчанию) содержится значение представляющее из себя путь, который ведёт к значку.

Если файл принял такой вид:

- В случае деинсталляции означает, что: Программа удалена, но в подразделе .txtutf, в параметре (по умолчанию) содержится значение Text.UTF

и т.д


Также стоит учесть то, что файл с которым производится связывание - программа способна произвести связывание при первом запуске.
Также стоит учесть, что для связывания, в некоторых случаях будет достаточно использовать ключи командной строки (если таковые имеются), например:
Код:

[Run]
Filename: {app}\Compil32.exe; Parameters: /ASSOC

[UninstallRun]
Filename: {app}\Compil32.exe; Parameters: /UNASSOC

Если же имеется желание или по какой-то причине нужно связать файл с программой используя реестр Windows, то лучше использовать те же ключи что задействуются самой программой, например:
Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Classes\.iss; ValueType: string; ValueData: InnoSetupScriptFile; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\.iss; ValueType: string; ValueName: Content Type; ValueData: text/plain; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile; ValueType: string; ValueData: Inno Setup Script; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\DefaultIcon; ValueType: string; ValueData: {app}\Compil32.exe,1; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile; ValueType: string; ValueData: Compi&le; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\Compile\command; ValueType: string; ValueData: """{app}\Compil32.exe"" /cc ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\open; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\open\command; ValueType: string; ValueData: """{app}\Compil32.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\OpenWithInnoSetup; ValueType: string; ValueData: Open with &Inno Setup; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\InnoSetupScriptFile\shell\OpenWithInnoSetup\command; ValueType: string; ValueData: """{app}\Compil32.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty

это позволит в дальнейшем избежать некоторые недоразумения.

Например вы назначили вручную:
Код:

Root: HKLM; SubKey: Software\Classes\.iss; ValueType: string; ValueData: ext_auto_file; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file; ValueType: string; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell\edit; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell\edit\command; ValueType: string; ValueData: """{app}\Compil32.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell\open; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: Software\Classes\iss_auto_file\shell\open\command; ValueType: string; ValueData: """{app}\Compil32.exe"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty

затем использовали в Inno - таким образом, в будущем может случится так, что программа использует свои а не используемые вами.

eromunald 28-06-2017 18:01 2747885

Цитата:

1. Проверка на ГЕО (US,CA,GB). »
Спасибо большое El Sanchez, только, насколько я понял, здесь идет проверка только на US.
Я не сильный знаток Inno, не подскажете, как увязать чтобы в одном коде была проверка одновременно на эти гео US CA GB?
Т.е. установка была бы если пользователь устанавливал софт именно из этих стран.

El Sanchez 28-06-2017 21:50 2747926

Цитата:

Цитата eromunald
насколько я понял, здесь идет проверка только на US »

eromunald, GetUserGeo возвращает двухбуквенный код страны, строку, вот результат и нужно сравнивать с 'US', 'CA' или 'GB'. Но мой пример неудачен, т.к. возвращает код страны, которую можно выбрать в апплете Язык и региональные стандарты - вкладка Расположение - список Текущее расположение. Это не совсем то, что надо, нужно взять код страны из языка системы.
Цитата:

Цитата eromunald
Я не сильный знаток Inno, не подскажете, как увязать чтобы в одном коде была проверка одновременно на эти гео US CA GB?
Т.е. установка была бы если пользователь устанавливал софт именно из этих стран. »

eromunald, предполагаю, что установка доп. ПО у вас реализована через секцию Run, тогда в качестве примера, запуск консоли в зависимости от страны:
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
OutputDir=.
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Run]
Filename: "{cmd}"; Parameters: "/c echo.US&&pause"; Check: IsCountry('US')
Filename: "{cmd}"; Parameters: "/c echo.CA&&pause"; Check: IsCountry('CA')
Filename: "{cmd}"; Parameters: "/c echo.GB&&pause"; Check: IsCountry('GB')
Filename: "{cmd}"; Parameters: "/c echo.RU&&pause"; Check: IsCountry('RU')

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
 
LOCALE_SYSTEM_DEFAULT = $0800;
  LOCALE_SISO3166CTRYNAME = $005A;

function GetLocaleInfo(Locale, LCType: DWORD; lpLCData: string; cchData: Integer): Integer; external 'GetLocaleInfo{#A}@kernel32.dll stdcall';

///////////////////////////////////////////////////
function IsCountry(const Country: string): Boolean;
var
 
S: string;
begin
 
SetLength(S, GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO3166CTRYNAME, '', 0));
  GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO3166CTRYNAME, S, Length(S));
  Result := (CompareText(Trim(S), Country) = 0);
end;


eromunald 30-06-2017 21:30 2748356

Цитата:

Цитата El Sanchez
предполагаю, что установка доп. ПО у вас реализована через секцию Run »

У меня установка реализована через секцию [code]. В принципе поэтому и гео хотелось бы реализовать там же. Пробовал сделать как вы предложили через секцию Run, но эффект не был достигнут. Поэтому попробовал порыться в сети и нашел один скрипт по идентификации пользователя через time zone. Дополнительно подключив Table of Geographical Locations в результате получил то от чего, в принципе, уже можно оттолкнуться. Во всяком случае уже хоть что-то. По этому коду если у пользователя настройки системы по US и RU установка идет, в противном случае нет. Думаю идеально будет, если связать запрос с IP пользователя (хотя бы через http://ipinfo.io/country). Возможно это?

Код:

Code]
const
  GEOCLASS_NATION = 16;
  GEOID_UNITED_STATES = $F4;
  GEOID_RUSSIA = $CB;
type
  GEOID = Longint;
  GEOCLASS = DWORD;

function GetUserGeoID(GeoClass: GEOCLASS): GEOID;
  external 'GetUserGeoID@kernel32.dll stdcall';

function IsGeoLocationUSA: Boolean;
begin
  Result := GetUserGeoID(GEOCLASS_NATION) = GEOID_UNITED_STATES;
end;

function IsGeoLocationRU: Boolean;
begin
  Result := GetUserGeoID(GEOCLASS_NATION) = GEOID_RUSSIA;
end;

function InitializeSetup: Boolean;
begin
  if IsGeoLocationUSA then
    Result := True
  else
    Result := False;

  if IsGeoLocationRU then
    Result := True
  else
    Result := False;
end;


El Sanchez 01-07-2017 16:46 2748444

Цитата:

Цитата eromunald
Думаю идеально будет, если связать запрос с IP пользователя (хотя бы через http://ipinfo.io/country). Возможно это? »

eromunald, да легко
Скрытый текст

Код:

[Code]
const
 
SXH_PROXY_SET_PROXY = 2;
  HTTP_STATUS_OK = 200;

function GetGeoLocation: string;
var
 
XMLHTTP: Variant;
  ProxyEnable: Cardinal;
  ProxyServer, ProxyOverride: string;
begin
 
Result := '';
  try
   
XMLHTTP := CreateOleObject('MSXML2.ServerXMLHTTP.6.0');
    if RegQueryDWordValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Internet Settings', 'ProxyEnable', ProxyEnable) and (ProxyEnable = 1) then
    begin
      if
RegQueryStringValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Internet Settings', 'ProxyServer', ProxyServer) and
       
RegQueryStringValue(HKCU, 'Software\Microsoft\Windows\CurrentVersion\Internet Settings', 'ProxyOverride', ProxyOverride) then
         
XMLHTTP.setProxy(SXH_PROXY_SET_PROXY, ProxyServer, ProxyOverride);
    end;
    XMLHTTP.open('GET', 'https://ipapi.co/country/', False);
    XMLHTTP.send;
    if XMLHTTP.status = HTTP_STATUS_OK then
     
Result := XMLHTTP.responseText;
  except
   
MsgBox(GetExceptionMessage, mbCriticalError, MB_OK);
  finally
  end
;
end;

procedure InitializeWizard;
begin
 
MsgBox(GetGeoLocation, mbInformation, MB_OK);
end;


eromunald 03-07-2017 23:28 2748904

Цитата:

Цитата El Sanchez
да легко »

Спасибо большое, протестируем.

eromunald 03-07-2017 23:57 2748911

Вложений: 1
Прошу помощи, появилась еше одна проблема, может кто сталкивался с подобной.
На кастомной странице инсталлятора есть текстовая информация в ACaption, ASubCaption, ALabel1Caption, ALabel2Caption.
CheckBox для установки ПО. А есть AIconFileName который выводит иконку этого ПО. Раньше проблем не было т.к. использовались
иконки ПО 32х32. Сейчас же необходимо вывести bmp файл вместо иконки, и вот здесь появилась проблема. Указывая размеры bmp-шки
Width := 121;Height := 190; резервируется место для размеров изображения, но само изображение выводится 32х32.
В течение дня танцы с бубном ничего не дали. Есть подозрение что вся проблема из-за идентификатора hIcon который не дает возможности вывести изображение в реальном разрешении. Может быть есть возможность не использовать hIcon и заменить его на простое решение.

Код:

function CreateCustomOptionPage(AAfterId: Integer; ACaption, ASubCaption, AIconFileName, ALabel1Caption, ALabel2Caption,
  ACheckCaption: String; var CheckBox: TCheckBox): TWizardPage;
var
  Page: TWizardPage;
  Rect: TRect;
  hIcon: LongInt;
  Label1: TNewStaticText; Label2: TNewStaticText;
begin
  Page := CreateCustomPage(AAfterID, ACaption, ASubCaption);
 
  try
    AIconFileName := ExpandConstant('{tmp}\FixitLogo2.bmp');
//ExpandConstant('{tmp}\' + AIconFileName);
    if not FileExists(AIconFileName) then
    ExtractTemporaryFile(ExtractFileName(AIconFileName));

    hIcon := ExtractIcon(GetModuleHandle(0), ExpandConstant('{tmp}\FixitLogo2.bmp'), 0);
 //AIconFileName, 0);
    try
    with TBitmapImage.Create(Page) do begin
        with Bitmap do begin
        Width := 121;
        Height := 190;
        Rect.Right:= 32;
        Rect.Bottom:= 32;
        Rect.Left:= 0;
        Rect.Top:= 0;
          Canvas.Brush.Color := WizardForm.Color;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, hIcon, 0, 0, 121, 190, DI_NORMAL);
        end;
        Parent := Page.Surface;
      end;
    finally
      DestroyIcon(hIcon);
    end;
  except
  end;


ZVSRus 04-07-2017 12:41 2748994

eromunald,

Самое простое решение

Цитата:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: "FixitLogo2.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[code]
var
Page : TWizardPage;
Bitmap : TBitmapImage;
NewCheckBox1 : TNewCheckBox;

procedure InitializeWizard();
begin
Page := CreateCustomPage(wpWelcome, 'FixIt', 'Additional Software Options');

Bitmap := TBitmapImage.Create(WizardForm);
with Bitmap do
begin
Parent := Page.Surface;
SetBounds(ScaleX(0),ScaleY(0),ScaleX(120),ScaleY(120));
ExtractTemporaryFile('FixitLogo2.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\FixitLogo2.bmp'));
end;

NewCheckBox1 := TNewCheckBox.Create(WizardForm);
with NewCheckBox1 do
begin
Parent := Page.Surface;
SetBounds(ScaleX(0),ScaleY(130),ScaleX(215),ScaleY(17));
Caption := 'Здесь название вашего NewCheckBox1';
end;
end;


eromunald 04-07-2017 20:09 2749116

Цитата:

Цитата ZVSRus
Самое простое решение »

Спасибо большое, это то что надо!

OldGamer 15-07-2017 17:56 2751635

Вложений: 1
Здравствуйте!

Подскажите, пожалуйста, как реализовать следующее:

1) При первом запуске программа создаёт папку с файлами по пути: "C:\Users\Имя пользователя\AppData\Local\папка на удаление".
Нужно, чтобы при деинсталляции программы эта папка была удалена.

2) Нужно, чтобы была страница с выбором из 2-х разных файлов/папок программы, так как во вложении, желательно без картинок.

ZVSRus 15-07-2017 23:15 2751705

OldGamer
Скрытый текст

Код:

[Setup]
 AppName=My Application
 AppVersion=1.5
 DefaultDirName={pf}\My Application

[Files]
Source: "compiler:Examples\MyProg.exe";    DestDir: "{app}"; Check: PortableCheck; Flags: ignoreversion
Source: "compiler:Examples\MyProg-x64.exe"; DestDir: "{app}"; Check: InstallerCheck; Flags: ignoreversion

[UninstallDelete]
 Type: filesandordirs; Name: "{localappdata}\папка на удаление";

[Code_]
var
  ComponentPage : TWizardPage;
  Installer    : TNewRadioButton;
  Portable      : TNewRadioButton;

function InstallerCheck: Boolean;         
 begin                                     
  Result := Installer.Checked;
 end;                                     

function PortableCheck: Boolean;         
 begin                                     
  Result := Portable.Checked;
 end;                                     

procedure InitializeWizard();
begin
  ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', 'Выберите тип установки');

  { Installer }
  Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := ComponentPage.Surface;
    SetBounds(ScaleX(0),ScaleY(15),ScaleX(100),ScaleY(17));
    Caption := 'Установка';
    Checked := True;
  end;

  { Portable }
  Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := ComponentPage.Surface;
    SetBounds(ScaleX(0),ScaleY(45),ScaleX(100),ScaleY(17));
    Caption := 'Распаковка';
  end;
end;


OldGamer 16-07-2017 13:56 2751747

ZVSRus,
Огромное-преогромное Спасибо! Этот скрипт работает! Очень благодарен :good: :yahoo: :good:

Остался "последний штрих" - нужно, чтобы вокруг этих RadioButton был GroupBox с надписью "Версия:".

Nordek 16-07-2017 14:21 2751754

Цитата:

Цитата OldGamer
нужно, чтобы вокруг этих RadioButton был GroupBox с надписью "Версия:". »

Скрытый текст
Код:

[Code]
var

 
ComponentPage : TWizardPage;
  Installer    : TNewRadioButton;
  Portable      : TNewRadioButton;
  GroupBox: TNewGroupBox;
 
 
function InstallerCheck: Boolean;
 begin
 
Result := Installer.Checked;
 end;

function PortableCheck: Boolean;
 begin
 
Result := Portable.Checked;
 end;

procedure InitializeWizard();
begin
 
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', 'Выберите тип установки');


  { GroupBox }
 
GroupBox := TNewGroupBox.Create(WizardForm);
  with GroupBox do
  begin
   
Parent := ComponentPage.Surface;
    SetBounds(ScaleX(0),ScaleY(0),ScaleX(417),ScaleY(220));
    Caption := 'Версия:';
  end;

  { Installer }
 
Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
   
Parent := GroupBox;
    SetBounds(ScaleX(20),ScaleY(35),ScaleX(100),ScaleY(17));
    Caption := 'Установка';
    Checked := True;
  end;

  { Portable }
 
Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
   
Parent := GroupBox;
    SetBounds(ScaleX(20),ScaleY(65),ScaleX(100),ScaleY(17));
    Caption := 'Распаковка';
  end;
end;


ZVSRus 16-07-2017 16:54 2751775

OldGamer,
Остался "последний штрих"

Цитата:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Check: PortableCheck; Flags: ignoreversion
Source: "compiler:Examples\MyProg-x64.exe"; DestDir: "{app}"; Check: InstallerCheck; Flags: ignoreversion

[UninstallDelete]
Type: filesandordirs; Name: "{app}";
Type: filesandordirs; Name: "{localappdata}\папка на удаление";
Type: filesandordirs; Name: "{userappdata}\папка на удаление";

[code]
var
ComponentPage : TWizardPage;
InstallGroupBox : TNewGroupBox;
Installer : TNewRadioButton;
Portable : TNewRadioButton;

function InstallerCheck: Boolean;
begin
Result := Installer.Checked;
end;

function PortableCheck: Boolean;
begin
Result := Portable.Checked;
end;

procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', 'Выберите тип установки');

{ InstallGroupBox }
InstallGroupBox := TNewGroupBox.Create(WizardForm);
with InstallGroupBox do
begin
Parent := ComponentPage.Surface;
SetBounds(ScaleX(0),ScaleY(0),ScaleX(210),ScaleY(60));
Caption := 'Выбор типа установки:';
end;

{ Installer }
Installer := TNewRadioButton.Create(WizardForm);
with Installer do
begin
Parent := InstallGroupBox;
SetBounds(ScaleX(5),ScaleY(14),ScaleX(195),ScaleY(17));
Caption := 'Установка обычной версии';
Checked := True;
end;

{ Portable }
Portable := TNewRadioButton.Create(WizardForm);
with Portable do
begin
Parent := InstallGroupBox;
SetBounds(ScaleX(5),ScaleY(36),ScaleX(195),ScaleY(17));
Caption := 'Распаковка портативной версии';
end;
end;


LagunaFAN 17-07-2017 23:26 2752124

Доброго времени суток!

Недавно столкнулся с тем (собственно, мне сообщили об этом, ибо у самого FullHD), что при разрешении 3840x2160 в инсталляторе съезжают кнопки Next и Cancel, а также некоторые кастомные элементы (картинки, текст etc.)...

Скриншот проблемы


Проблема с картинками, я так понимаю, всего лишь из-за того, что картинки маленького разрешения (или нет?). Но что с кнопками Next и Cancel и текстом (мейби сам скин виноват?)? Это можно пофиксить? Прошу помощи! :sorry:

Инсталлятор у меня без наворотов, разве что установлен скин и произведены некоторые другие легкие модификации.

Если нужно, то вот ссылка на скрипт - https://cloud.mail.ru/public/9Acu/Lt6HGA7hz

El Sanchez 18-07-2017 14:03 2752290

Цитата:

Цитата LagunaFAN
Проблема с картинками, я так понимаю, всего лишь из-за того, что картинки маленького разрешения (или нет?). Но что с кнопками Next и Cancel и текстом (мейби сам скин виноват?)? Это можно пофиксить? »

LagunaFAN, у своих TBitmapImage свойство Stretch в True, TLabel поменять на TNewStaticText, скин да, виноват, неверные метрики рассчитываются.

neorom 22-07-2017 19:16 2753204

Ищу скрипт от dead-space-2-fenixx-ot-vasyakrn буду очень благодарен за помощь

pollipen 23-07-2017 21:15 2753511

ребята помогите имеется несколько function InitializeSetup(): Boolean;
как это вынести

Iska 23-07-2017 21:50 2753517

Цитата:

Цитата pollipen
как это вынести »

Для начала привести сам код. Затем рассказать, как Вы дошли до жизни такой откуда этот код у Вас в таком виде взялся.

nik1967 23-07-2017 22:24 2753522

pollipen, взять и объединить.

pollipen 24-07-2017 08:41 2753557

всё парни разобрался

pollipen 24-07-2017 09:34 2753569

парни как убрать вот такое сообщение

и дальше продолжала установку

Iska 24-07-2017 10:23 2753585

Ну, допустим, уберёте сообщение, толку-то. Установка не продолжится, а завершится с ошибкой. Что Вы там такого обновляете?

Nordek 24-07-2017 13:45 2753627

Цитата:

Цитата pollipen
убрать вот такое сообщение
Скрытый текст

и дальше продолжала установку »

Зачем Вы взялись делать кривопак с таким условием? Ерунда у Вас получится.

Например имеется программа которую следует обновить.
При установке: Допустим пропустит, допустим установит - но файлы новой версии обновлены не будут или будут обновлены частично - после такой установки обновляемая программа перестанет работать или будет работать некорректно, с ошибками.

Пусть пользователь решает что ему делать (На снимке экране верный способ, инсталлятор сделает сам всё, что нужно.).

Если вам приспичило, то ловить нужно на инициализации, например:
Код:

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

[Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
  If
RunTask('myprog.exe', false) then
    begin
      if
MsgBox('Программа {#SetupSetting("AppName")} используется.  Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
         
KillTask('myprog.exe');
          Result:= True;
        end else
         
Exit;
    end;
Result:=True;
end;


Nullkree 24-07-2017 14:06 2753634

Ребята, подскажите, как разрешить ввод только цифр в Edit1 на кастомной странице? Страницу создал с помощью Inno Setup Form Designer. Пробовал так, не работает:
Код:

procedure CustomPage_Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in['0','1','2','3','4','5','6','7','8','9']) then Key:=#0;
end;


El Sanchez 28-07-2017 08:48 2754570

Цитата:

Цитата Nullkree
как разрешить ввод только цифр в Edit1 на кастомной странице? »

Nullkree,
Скрытый текст

Код:

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
 
GWL_STYLE = (-16);
  ES_NUMBER = $00002000;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';

///////////////////////////
procedure InitializeWizard;
begin
 
SetWindowLong(WizardForm.DirEdit.Handle, GWL_STYLE, GetWindowLong(WizardForm.DirEdit.Handle, GWL_STYLE) or ES_NUMBER);
end;


eromunald 31-07-2017 21:50 2755279

Вложений: 1
День добрый. Есть такой Inno Download Plugin (Mitrich Software). Для скачивания файла используются:

function isxdl_DownloadFiles(hWnd: Integer): Integer;
external 'isxdl_DownloadFiles@files:isxdl.dll stdcall';

При скачивании появляется прогресс бар со статистикой по скачиваемому файлу. Может быть кто-нибудь сталкивался с подобной проблемой и знает как ее решить: необходимо скрыть прогресс бар процесса скачивания файла(-ов). Буду признателен за помощь!

Код:

procedure DownloadFiles(IDE, ISS: Boolean);
var
  hWnd: Integer;
  URL, FileName: String;
begin

  isxdl_SetOption('label', 'Downloading extra files');
  isxdl_SetOption('description', 'Please wait while Setup is downloading extra files to your computer.');

  try
    FileName := ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp');
    if not FileExists(FileName) then
      ExtractTemporaryFile(ExtractFileName(FileName));
    isxdl_SetOption('smallwizardimage', FileName);
  except
  end;
  //turn off isxdl resume so it won't leave partially downloaded files behind
  //resuming wouldn't help anyway since we're going to download to {tmp}
  isxdl_SetOption('resume', 'false');

  hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));


Iska 31-07-2017 22:40 2755285

Цитата:

Цитата eromunald
необходимо скрыть прогресс бар процесса скачивания файла(-ов). »

Зачем?

eromunald 31-07-2017 23:03 2755288

Цитата:

Цитата Iska
Зачем? »

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

El Sanchez 01-08-2017 08:59 2755322

Цитата:

Цитата eromunald
При скачивании появляется прогресс бар со статистикой по скачиваемому файлу. Может быть кто-нибудь сталкивался с подобной проблемой и знает как ее решить: необходимо скрыть прогресс бар процесса скачивания файла(-ов). »

eromunald, idpShowDetails(False) или к форме и к ее элементам обращайтесь через переменную IDPForm (IDP Help - Types - TIdpForm). Все это после вызова idpDownloadAfter.

OldGamer 05-08-2017 10:05 2756452

Вложений: 2
Здравствуйте!

Помогите, пожалуйста, решить проблемы:

1) В окне выбора языков, если нажать "Отмена" - ошибка (см. вложение) [решено]
2) Нужно, чтобы название языков установки было написано по англ./рус. (см. вложение), например Russian / Русский и т.д.
3) Как-нибудь к моему скрипту возможно "прикрутить" определение оставшегося времени до конца установки? [решено]

https://cloud.mail.ru/public/FD46/7renqfK7P

leonov_0fficial@vk 05-08-2017 13:35 2756479

Здравствуйте, я впервые общаюсь с данной программой и при первой же компиляции мне выдаёт ошибку: "Line 51: Column: 76 Unknown Type 'TItemArea' ", - помогите пожалуйста. (Версия программы - 5.5.9(u)).

Сам код:
Скрытый текст
Код:

type
  TComponentDesc = record
    Description: String;
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescPanel, CompDescImgPanel: TPanel;
  CompDescText: array[1..2] of TLabel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    CompDescImg.Show;

    CompDescText[2].Caption := CompDescs[CompIndex].Description;
    CompDescText[2].Enabled := True;
  end else
  begin
    CompDescText[2].Caption := CustomMessage('ComponentsInfo');
    CompDescText[2].Enabled := False;
    CompDescImg.Hide;
  end;
  LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescImg.Hide;
  CompDescText[2].Caption := CustomMessage('ComponentsInfo');
  CompDescText[2].Enabled := False;
  LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205)); //растягиваем окно компоненты
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));  //растягиваем ширину и высотку превью
    BevelInner := bvLowered;
  end;

  CompDescText[1] := TLabel.Create(WizardForm);
  with CompDescText[1] do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));  // описание компонентов относительно края превью
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsImgInfo');
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Hide;
  end;

  CompDescPanel := TPanel.Create(WizardForm);
  with CompDescPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(125), ScaleX(225), ScaleY(80));
    BevelInner := bvLowered;
  end;

  CompDescText[2] := TLabel.Create(WizardForm);
  with CompDescText[2] do
  begin
    Parent := CompDescPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsInfo');
  end;
    AddCompDescription(1, CustomMessage ('Description1'), 'dust2.bmp');
    AddCompDescription(2, CustomMessage ('Description2'), 'cache.bmp');
    AddCompDescription(3, CustomMessage ('Description3'), 'inferno.bmp');
    AddCompDescription(4, CustomMessage ('Description4'), 'mirage.bmp');
    AddCompDescription(5, CustomMessage ('Description5'), 'cbble.bmp');
    AddCompDescription(6, CustomMessage ('Description6'), 'overpass.bmp');
    AddCompDescription(7, CustomMessage ('Description7'), 'italy.bmp');
    AddCompDescription(8, CustomMessage ('Description8'), 'train.bmp');
    AddCompDescription(9, CustomMessage ('Description9'), 'nuke.bmp');
end;


pollipen 08-08-2017 17:15 2757181

парни подскажите как можно сделать что бы в папке при установки не проверялись файлы
Source: "C:\Users\Desktop\1\CommonFilesFolder\*"; DestDir: "{cf}"; Flags: что тут надо прописать

boss911 08-08-2017 19:36 2757222

Цитата:

Цитата pollipen
что бы в папке при установки не проверялись файлы »

Какую именно проверку нужно отключить, на что? Предположу, что вам нужен флаг overwritereadonly и/или ignoreversion.

eromunald 09-08-2017 14:15 2757371

Цитата:

Цитата El Sanchez
idpShowDetails(False) или к форме и к ее элементам обращайтесь через переменную IDPForm (IDP Help - Types - TIdpForm). Все это после вызова idpDownloadAfter. »

В принципе почти получилось, но во время скачивания файла ProgressBar не уходит и процесс скачивания файла еще виден, хотя были выставлены параметры idpShowDetails(False) и IDPForm.FileProgressBar.Visible := False Т.е. все скрыто кроме бара скачивания. Может есть другая возможность скрыть процесс скачивания файла или свернуть это окно.

eromunald 09-08-2017 14:31 2757374

Вложений: 1
Добавил IDPForm.FileProgressBar.Visible := False; IDPForm.TotalProgressBar.Visible := False; в результате получилось такое окно (на скрепке)

Nightwishh 10-08-2017 00:09 2757470

Как сделать чтобы при изменении пути в DirEdit кнопка NewButton становилась активной, а при нажатии на кнопку NewButton
она становилась неактивной?

OldGamer 10-08-2017 20:14 2757671

Вложений: 2
Господа, есть тут кто-нибудь, кто разбирается в Unicode-версии Inno Setup?
Или возможно ли отключить жёсткую проверку синтаксиса?

Установил Inno Setup с поддержкой Unicode, чтобы корректно отображалось название языков.
При компиляции появляются ошибки, а в обычной версии компиляция скрипта проходит без каких-либо проблем.

Что делать с этой строкой "record..."?

Сам скрипт
Код:


#include "botva2.iss"
#include "BASS_Module.iss"
#define GDFExe "{app}\Prog.exe"
#define GDFBinary "{app}\GDF.dll"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=MyProg
AppVersion=1.0
AppPublisher=EmuGames
AppCopyright=EmuGames
AppPublisherURL=
AppSupportURL=
AppUpdatesURL=
DefaultDirName={pf64}\MyProg™
DefaultGroupName=\MyProg™
AllowNoIcons=yes
InfoBeforeFile=\System requirements.txt
InfoAfterFile=\Recommendation.txt
OutputBaseFilename=setup
WizardImageFile=\picture.bmp
WizardSmallImageFile=\small picture.bmp
SetupIconFile=\icon.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=none
CompressionThreads=4
DiskSpanning=yes
DiskSliceSize=2100000000
SlicesPerDisk=1
RestartIfNeededByRun=no
ShowUndisplayableLanguages=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Name: english; MessagesFile: compiler:Languages\English.isl
Name: french; MessagesFile: compiler:Languages\French.isl
Name: german; MessagesFile: compiler:Languages\German.isl
Name: spanish; MessagesFile: compiler:Languages\Spanish.isl
Name: italian; MessagesFile: compiler:Languages\Italian.isl

[Messages]

SelectLanguageTitle=MyProg
SelectLanguageLabel=Please select a language.                                    Выберите язык установки.

[LangOptions]
russian.LanguageName=Русский / Russian
english.LanguageName=Английский / English
french.LanguageName=Французский / French
german.LanguageName=Немецкий / German
spanish.LanguageName=Испанский / Spanish
italian.LanguageName=Итальянский / Italian

[Tasks]
Name: desktopicon; Description: Создать ярлык на рабочем столе; GroupDescription: Ярлыки:
Name: pin; Description: Закрепить ярлык на панели задач; GroupDescription: Ярлыки:; Flags: unchecked

Name: DirectX; Description: Обновить DirectX; GroupDescription: Дополнительное программное обеспечение:; Flags: checkablealone
Name: Redist; Description: Установить Microsoft Visual C++ 2010 Redist; GroupDescription: Дополнительное программное обеспечение:; Flags: checkablealone

Name: desktopicon; Description: Русский | Английский | Multi6; GroupDescription: Язык интерфейса:; Flags: exclusive

[Files]
Source: include/GDF.dll; DestDir: {app};
Source: include/GameuxInstallHelper.dll; DestDir: {localappdata}; Flags: overwritereadonly
Source: CallbackCtrl.dll; DestDir: {tmp}; Flags: dontcopy
Source: BASS.dll; DestDir: {tmp}; Flags: dontcopy
Source: innocallback.dll; Flags: dontcopy
Source: botva2.dll; DestDir: {tmp}; Flags: dontcopy
Source: Bass_Files\*; DestDir: {tmp}; Flags: dontcopy
Source: OST.mp3; DestDir: {tmp}; Flags: dontcopy
Source: "\MyProg™.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "\miniature.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "\miniature-2.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: "\Pakovano\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension;

[Icons]
Name: "{userdesktop}\MyProg"; Filename: "{app}\MyProg.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{group}\MyProg"; Filename: "{app}\MyProg.exe";
Name: "{group}\{cm:UninstallProgram,MyProg}"; Filename: "{uninstallexe}"

[Run]
Description: {cm:LaunchProgram, MyProg}; Filename: {app}\MyProg.exe; WorkingDir: {app}; Flags: nowait postinstall skipifsilent
Filename: {src}\Soft\DirectX®\DXSETUP.exe; Parameters: /silent; Tasks: DirectX; StatusMsg: Обновление DirectX...
Filename: {src}\Soft\Vcredist\Vcredist_2010 (x64+x86).exe; Parameters: /q; Tasks: Redist; StatusMsg: Установка Microsoft Visual С++ 2010 Redistributable...

[UninstallDelete]
Type: filesandordirs; Name: "{app}";
Type: filesandordirs; Name: "{localappdata}\Spoon";
Type: filesandordirs; Name: "{localappdata}\VirtualStore";

[Сode]
type TGUID          = record Data1: Cardinal; Data2, Data3: Word; Data4: array [0..8] of Char; end;

const PlayTask    = 0;
        SupportTask = 1;
var GameuxGUID: TGUID;

function GenerateGUID(var GUID: TGUID): Cardinal; external 'GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly';
function AddToGameExplorer(Binary: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal; external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';
function CreateTask(InstallType: Integer; var GUID: TGUID; TaskType: Integer; TaskNumber: Integer; TaskName: String; Binary: String; Parameters: String): Cardinal; external 'CreateTaskA@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(Binary: String; var GUID: TGUID): Cardinal; external 'RetrieveGUIDForApplicationA@{localappdata}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal; external 'RemoveFromGameExplorer@{localappdata}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveTasks(var GUID: TGUID): Cardinal; external 'RemoveTasks@{localappdata}\GameuxInstallHelper.dll stdcall uninstallonly';

function IntToHex(Int: Cardinal; Digits: Integer): String; var i, Digit: Integer; ch: Byte;
begin
  result:='';
  for i:=0 to Digits-1 do
    begin
    digit:=Int mod 16;
    Int:=Int div 16;
    if digit<0 then
      digit:=digit+16;
      ch:=Ord('0')+digit;
        if digit>9 then
        ch:=ch+7;
        result:=chr(ch)+result;
    end;
end;

function GetGUID(GGUID: TGUID): String; var i: Integer;
begin
  result:='{'+IntToHex(GGUID.Data1, 8)+'-'+IntToHex(GGUID.Data2, 4)+'-'+IntToHex(GGUID.Data3, 4)+'-'+IntToHex(Ord(GGUID.Data4[0]), 2)+IntToHex(Ord(GGUID.Data4[1]), 2)+'-';
  for i:=2 to 7 do result:=result+IntToHex(Ord(GGUID.Data4[i]), 2); result:=result+'}';
end;

procedure GDFInstall(Binary, MainExe: String);
begin
  GenerateGUID(GameuxGUID);
  AddToGameExplorer(ExpandConstant(Binary), ExpandConstant('{app}'), 3, GameuxGUID);

  CreateTask(3, GameuxGUID, PlayTask, 0, 'Play', ExpandConstant(MainExe), '');
end;

procedure win7fix;
  var regGDF: Cardinal;
  var GUXPath: string;
begin
GUXPath := 'Software\Microsoft\Windows\CurrentVersion\GameUX\Games\' + GetGUID(GameuxGUID);
  if isWin64 then
  begin
    if RegQueryDWordValue(HKLM64, GUXPath, 'IsSigned', regGDF) then
      if regGDF=0 then
        if RegDeleteValue(HKLM64, GUXPath, 'IsSigned') then
          RegWriteDWordValue(HKLM64, GUXPath, 'IsSigned', 1);
  end
  else
  begin
    if RegQueryDWordValue(HKLM, GUXPath, 'IsSigned', regGDF) then
      if regGDF=0 then
        if RegDeleteValue(HKLM, GUXPath, 'IsSigned') then
          RegWriteDWordValue(HKLM, GUXPath, 'IsSigned', 1);
  end;
end;

type
  TPBProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint;
 
var
  TimeLeftLabel : TLabel;

  PBOldProc    : Longint;
  eTime, sTime  : DWORD;

var
  BASS_Initialized: Boolean;

const
  AW_BLEND = $00080000;
  AW_HIDE = $00010000;
const
    LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean;
external 'AnimateWindow@user32 stdcall';
function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;

var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

    { String resources }
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        res := 5386;        { Pin to Tas&kbar }
    end else res := 5387;  { Unpin from Tas&kbar }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

type
    TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);
var
  PercentsTimer: LongWord;
  PercentsLabel: TLabel;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function CallBackProc(P:TPBProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';

function LongintToStringTime(t:Longint):string;
var
  h,m,s:integer;
begin
  h:=t div 3600;
  t:=t-h*3600;
  m:=t div 60;
  s:=t-m*60;
  Result:='';
  if h>0 then Result:=Result+IntToStr(h)+' ч. ';
  if (m>0) or (h>0) then Result:=Result+IntToStr(m)+' мин. ';
  if (m>0) or (h>0) or (s>0) then Result:=Result+IntToStr(s)+' сек.';
end;

function PBProc(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
  lt:Longint;
  dt,at,pr,i1,i2:Extended;
  p:string;
  tc:DWORD;
begin
  Result:=CallWindowProc(PBOldProc,h,Msg,wParam,lParam);
  if (Msg=$402) and (WizardForm.ProgressGauge.Position>WizardForm.ProgressGauge.Min) then begin
    i1:=WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min;
    i2:=WizardForm.ProgressGauge.Max-WizardForm.ProgressGauge.Min;

    tc:=GetTickCount;
    if (tc-eTime)>=1000 then begin //???????????? ????? ?????????? ?? ????? ????????? ?? ????, ??? ??? ? 1 ???????
      dt:=(tc-sTime)/1000;
      at:=i2*dt/i1;
      lt:=Round(at-dt)
      TimeLeftLabel.Caption:='Осталось - '+LongintToStringTime(lt);
      eTime:=tc;
    end;

    pr:=i1*100/i2;
    p:=' - ['+Format('%f',[pr])+'%]';
    StringChange(p,',','.');
  end;
end;

procedure AllCancel;
begin
  SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
  TimeLeftLabel.Free;
end;

function InitializeSetup:boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
  Result:=True;
end;

Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.1n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
        SetLength(Result, Length(Result)-1);
End;

Procedure PercentsProc(h, msg, idevent, dwTime: Longword);
Begin
  with WizardForm.ProgressGauge do
  begin
    PercentsLabel.Caption:= 'Выполнено ' + NumToStr((Position*100)/Max) + ' %';
  end;
End;

const
  Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure RunListClickCheck(Sender: TObject);
var
  i:integer;
begin
  if WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex] then begin
    for i:=0 to WizardForm.RunList.Items.Count-1 do
      WizardForm.RunList.Checked[i]:=False;
    WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex]:=True;
  end;
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('Bass.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('volmax.png');
  ExtractTemporaryFile('volmin.png');
  ExtractTemporaryFile('volpb.png');
  ExtractTemporaryFile('voldote.png');
  ExtractTemporaryFile('OST.mp3');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('miniature.png');
  ExtractTemporaryFile('miniature-2.png');
 
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\miniature.png',4000,4000,2000,0,255,False,$FFFFFF,10);
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\miniature-2.png',4000,4000,2000,0,255,False,$FFFFFF,10);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),5,True,1,$FF000000);

  WizardForm.RunList.OnClickCheck:=@RunListClickCheck;
  BASS_Init('{tmp}\OST.mp3')
  BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\voldote.png', 20, 325)
  BASS_Initialized := True;
  ExtractTemporaryFile('MyProg™.png');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\MyProg™.png');
  WizardForm.TypesCombo.ItemIndex:=0;
 
  PercentsLabel:= TLabel.Create(WizardForm);
  with PercentsLabel do
  begin
    Left:= WizardForm.ProgressGauge.Left;
    Top:= WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(10);
    Width:= WizardForm.StatusLabel.Width;
    Height:= WizardForm.StatusLabel.Height;
    AutoSize:= False;
    Transparent := True;
    Parent:= WizardForm.InstallingPage;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  if (CurStep = ssPostInstall) and Version.NTPlatform and (Version.Major > 5) then begin
    GDFInstall('{#GDFBinary}', '{#GDFExe}');
      win7fix;
  end;
begin
  case CurStep of
    ssInstall: begin
      TimeLeftLabel:=TLabel.Create(nil);
      with TimeLeftLabel do begin
        Parent:=WizardForm.InstallingPage;
        AutoSize:=True;
        SetBounds(WizardForm.ProgressGauge.Left + ScaleX(250),WizardForm.ProgressGauge.Top + ScaleY(30),ScaleY(80),ScaleY(21));
      end;
sTime:=GetTickCount;
      eTime:=sTime;

      PBOldProc:=SetWindowLong(WizardForm.ProgressGauge.Handle,-4,CallBackProc(@PBProc,4));
    end;
    ssPostInstall: AllCancel;
  end;
begin
  if CurStep=ssInstall then begin
PercentsTimer:= SetTimer(0, 0, 100, WrapTimerProc(@PercentsProc, 4));
    ExtractTemporaryFile('MyProg™.png');
    ssAddImage(ExpandConstant('{tmp}')+'\MyProg™.png');
  end;
  if CurStep=ssPostInstall then ssStopShow;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
    wpFinished: end
  if IsTaskSelected('Pin') then
        PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
  if CurPageID=wpInstalling then begin;
    WizardForm.MainPanel.Visible:=False;
    WizardForm.Bevel1.Visible:=False;
    WizardForm.Width:=ScaleX(395);
    WizardForm.Height:=ScaleY(142);
    WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
    WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
    WizardForm.InnerNotebook.Left:=ScaleX(10);
    WizardForm.InnerNotebook.Top:=ScaleY(10);
    WizardForm.InnerNotebook.Width:=ScaleX(370);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(20);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(40);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(154);
    WizardForm.CancelButton.Top:=ScaleY(80);
  end;
  if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
    WizardForm.RunList.Checked[0]:=True;
    if WizardForm.Width<>502 then begin
      WizardForm.Visible:=False;
      WizardForm.Width:=ScaleX(502);
      WizardForm.Height:=ScaleY(392);
      WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
      WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
      WizardForm.MainPanel.Visible:=True;
      WizardForm.Bevel1.Visible:=True;
      WizardForm.InnerNotebook.Left:=ScaleX(40);
      WizardForm.InnerNotebook.Top:=ScaleY(72);
      WizardForm.InnerNotebook.Width:=ScaleX(417);
      WizardForm.Visible:=True;
    end;
  end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if CurPageID=wpFinished then
  begin
    if WizardForm.RunList.Checked[0] then
    Result := True;
  end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_OKCANCEL) = IDOK then
  begin
    Confirm := False;
    AnimateWindow(WizardForm.Handle, 2500, AW_BLEND or AW_HIDE);
    Cancel := True;
  end else
  Cancel := False;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Binary: String;
GUID: TGUID;
begin
if CurUninstallStep=usUninstall then
begin
Binary:=ExpandConstant('{#GDFBinary}');
RetrieveGUIDForApplication(Binary, GUID);
RemoveFromGameExplorer(GUID);
RemoveTasks(GUID);
UnloadDll(ExpandConstant('{localappdata}\GameuxInstallHelper.dll'));
end;
  begin
    if (CurUninstallStep=usUninstall) then
      begin
    case CurUninstallStep of
      usUninstall: begin
        PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
      end;
  end;
end;
end;
end;

procedure DeinitializeSetup();
begin
if BASS_Initialized then
begin
KillTimer(0, PercentsTimer);
  ssDeInitialize;
  BASS_DeInit;
    gdipShutdown
end;
end;


Буду очень благодарен за помощь.

usermode 15-08-2017 14:23 2758503

Пытаюсь прикрутить к Inno чтение с консоли, причем нужна реализация через пайпы и чтобы текст построчно отображался в Memo.
Пытаюсь адаптировать следующий пример, 3-ий на странице (RunDosInMemo):
http://decoding.dax.ru/faq/vcl/console/console001.html


Вроде почти перевел, но осталась заморочка именно с чтением через ReadFile и вывод, соответственно в Memo, да, там должны передаваться символы и строки, у меня счас там цифры, содрал с одного примера, но подружить с текстом не удается.
Просьба продвинутых поправить пример, если это возможно.

Скрипт (для версии Unicode)

Код:

[Setup]
AppName=MyApp
Appvername=MyApp                                       
DefaultDirname={pf}\MyApp

[_Code]
const
  ReadBuffer = 2400;
  STARTF_USESTDHANDLES = $100;
  STARTF_USESHOWWINDOW = 1;
  NORMAL_PRIORITY_CLASS = $00000020;
  HEAP_ZERO_MEMORY = $0008;
  WAIT_TIMEOUT = $00000102;

type
  TMyMsg = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

type
  TSecurityAttributes = record
    nLength: DWord;
    lpSecurityDescriptor: longint;
    bInheritHandle: Boolean;
  end;

TProcessInformation = record
  hProcess:DWORD;
  hThread:DWORD;
  dwProcessId:DWORD;
  dwThreadId:DWORD;
end;

TStartupInfo = record
  cb:DWORD;
  lpReserved:DWORD; // not PChar; - need NULL pointer
  lpDesktop:DWORD;  // not PChar; - need NULL pointer
  lpTitle:DWORD;  // not PChar; - need NULL pointer
  dwX:DWORD;
  dwY:DWORD;
  dwXSize:DWORD;
  dwYSize:DWORD;
  dwXCountChars:DWORD;
  dwYCountChars:DWORD;
  dwFillAttribute:DWORD;
  dwFlags:DWORD;
  wShowWindow:WORD;
  cbReserved2:WORD;
  lpReserved2:DWORD;
  hStdInput:DWORD;
  hStdOutput:DWORD;
  hStdError:DWORD;
end;

// ----------------------------------------------------------- //
function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL;
external 'PeekMessageW@user32.dll stdcall';

function TranslateMessage(const lpMsg: TMyMsg): BOOL;
external 'TranslateMessage@user32.dll stdcall';

function DispatchMessage(const lpMsg: TMyMsg): Longint;
external 'DispatchMessageW@user32.dll stdcall';
// ----------------------------------------------------------- //

function CloseHandle(hObject: THandle): BOOLEAN;
external 'CloseHandle@kernel32.dll stdcall';

function CreateProcess(lpApplicationName: String; lpCommandLine: string; lpProcAttrib,lpThreadAttrib: TSecurityAttributes; bInheritHandles: Boolean; dwCreationFlags: DWORD; lpEnvironment:DWORD; lpCurrentDirectory: String; var lpStartupInfo:TStartupInfo; var lpProcessInfo:TProcessInformation): Boolean;
external 'CreateProcessW@kernel32.dll stdcall';

function CreatePipe(out hReadPipe,hWritePipe: THandle; lpPipeAttributes: TSecurityAttributes; nSize: dword): BOOLEAN;
external 'CreatePipe@kernel32.dll stdcall';

function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD;
external 'WaitForSingleObject@kernel32.dll stdcall';
 
function ReadFile(hFile: THandle; lpBuffer: Longint; nNumberOfBytesToRead: DWORD; var lpNumberOfBytesRead: DWORD; lpOverlapped: Longint): BOOL;
external 'ReadFile@kernel32.dll stdcall';

function GetProcessHeap: THandle;
external 'GetProcessHeap@kernel32.dll stdcall';

function HeapAlloc(hHeap: THandle; dwFlags, dwBytes: DWORD): Longint;
external 'HeapAlloc@kernel32.dll stdcall';

function HeapSize(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): DWORD;
external 'HeapSize@kernel32.dll stdcall';

function HeapFree(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): BOOL;
external 'HeapFree@kernel32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint;
external 'OemToCharA@user32.dll stdcall';

procedure AppProcessMessage;
var
  Msg: TMyMsg;
begin
  while PeekMessage(Msg, 0, 0, 0, 1) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
end;

function OemToAnsiStr(strSource: AnsiString): AnsiString;
var
  nRet: longint;
begin
  SetLength(Result, Length(strSource));
  nRet:= OemToChar(strSource, Result);
end;

procedure InitializeWizard;
var
  MyMemo: TMemo;

  Security: TSecurityAttributes;
  ReadPipe, WritePipe: THandle;
  Start: TStartUpInfo;
  ProcessInfo: TProcessInformation;
  Buffer: PAnsiChar;
  BytesRead: DWord;
  Apprunning: DWord;
  appName, commandLine,workingDirectory: string;

  hFile, hHeap: THandle;
  lpBuffer: Longint;
  dwBufferSize, dwRead: DWORD;
begin
  WizardForm.InnerNoteBook.Hide;
  WizardForm.OuterNotebook.Hide;
 
  MyMemo:=TMemo.Create(WizardForm);
  MyMemo.SetBounds(30, 30, 440, 260);
  MyMemo.Parent:=WizardForm;

  MyMemo.Text:='Hello!';
 
  {
  with Security do
  begin
    nlength := SizeOf(Security);
    binherithandle := true;
    lpsecuritydescriptor := 0;
  end;
  }

  Security.nlength := SizeOf( Security );
  Security.binherithandle := true;
  Security.lpSecurityDescriptor := 0;

  if Createpipe( ReadPipe, WritePipe, Security, 0 ) then
  begin
    hHeap := GetProcessHeap;
    lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, ReadBuffer);
    dwBufferSize := HeapSize(hHeap, 0, lpBuffer);
    //Buffer := AllocMem( ReadBuffer+1 );
    //FillChar( Start, Sizeof( Start ), #0 );
    Start.cb := SizeOf( Start );
    Start.hStdOutput := WritePipe;
    Start.hStdInput := ReadPipe;
    Start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
    Start.wShowWindow := SW_HIDE;


    if CreateProcess('c:\windows\System32\PING.EXE', ' ' + 'ya.ru', Security, Security, True, NORMAL_PRIORITY_CLASS, 0, 'c:\windows\System32', Start, ProcessInfo) then
    begin
       
        repeat
            Apprunning := WaitForSingleObject( ProcessInfo.hProcess, 100 );

            ReadFile(ReadPipe, lpBuffer, dwBufferSize, dwRead, 0);
            //ReadFile( ReadPipe, lpBuffer[0], ReadBuffer, BytesRead, nil );
            //lpBuffer[BytesRead] := #0;
           
            MyMemo.Text := MyMemo.text + OemToAnsiStr(lpBuffer);
            AppProcessMessage;
        until ( Apprunning <> WAIT_TIMEOUT );
        // until ( BytesRead < ReadBuffer );

    end;
    HeapFree(hHeap, 0, lpBuffer);
    CloseHandle( ProcessInfo.hProcess );
    CloseHandle( ProcessInfo.hThread );
    CloseHandle( ReadPipe );
    CloseHandle( WritePipe );
  end;

end;


TheLeon 16-08-2017 15:14 2758722

Здравствуйте, у меня вопрос, а можно ли на финишной странице установщика сделать пункт, который удаляет файлы в определённых папках?(Решено)

El Sanchez 16-08-2017 15:23 2758726

Цитата:

Цитата usermode
чтение с консоли, причем нужна реализация через пайпы и чтобы текст построчно отображался в Memo. »

usermode,
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
CreateAppDir=false
DefaultDirName={tmp}
Uninstallable=false
DisableWelcomePage=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
 
WM_QUIT = $0012;
  PM_REMOVE = $1;
  MSGF_SLEEPMSG = $5300;
  STARTF_USESTDHANDLES = $0100;
  STARTF_USESHOWWINDOW = $0001;
  QS_ALLINPUT = $04FF;
  WAIT_TIMEOUT  = $00000102;
  EM_LINESCROLL = $B6;

type
#ifndef IS_ENHANCED
 
TMsg = record
   
hwnd: HWND;
    message: LongWord;
    wParam: Longint;
    lParam: Longint;
    time: LongWord;
    pt: TPoint;
  end;
#endif

 
TSecurityAttributes = record
   
nLength: DWORD;
    lpSecurityDescriptor: Longint;
    bInheritHandle: BOOL;
  end;
   
  TStartupInfo = record
   
cb: DWORD;
    lpReserved: Longint;
    lpDesktop: Longint;
    lpTitle: Longint;
    dwX: DWORD;
    dwY: DWORD;
    dwXSize: DWORD;
    dwYSize: DWORD;
    dwXCountChars: DWORD;
    dwYCountChars: DWORD;
    dwFillAttribute: DWORD;
    dwFlags: DWORD;
    wShowWindow: Word;
    cbReserved2: Word;
    lpReserved2: Longint;
    hStdInput: THandle;
    hStdOutput: THandle;
    hStdError: THandle;
  end;
   
  TProcessInformation = record
   
hProcess: THandle;
    hThread: THandle;
    dwProcessId: DWORD;
    dwThreadId: DWORD;
  end;

// Message Functions
function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessage{#A}@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpmsg: TMsg): Longint; external 'DispatchMessage{#A}@user32.dll stdcall';
procedure PostQuitMessage(nExitCode: Integer); external 'PostQuitMessage@user32.dll stdcall';

// Hook Functions
function CallMsgFilter(lpMsg: TMsg; nCode: Integer): BOOL; external 'CallMsgFilter{#A}@user32.dll stdcall';

// Synchronization Functions
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';

// Handle and Object Functions
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';

// Process and Thread Functions
function CreateProcess(lpApplicationName, lpCommandLine: string; lpProcessAttributes, lpThreadAttributes: TSecurityAttributes; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Longint; lpCurrentDirectory: string; lpStartupInfo: TStartupInfo; out lpProcessInformation: TProcessInformation): BOOL; external 'CreateProcess{#A}@kernel32.dll stdcall';

// Pipe Functions
function CreatePipe(out hReadPipe, hWritePipe: THandle; lpPipeAttributes: TSecurityAttributes; nSize: DWORD): BOOL; external 'CreatePipe@kernel32.dll stdcall';
function PeekNamedPipe(hNamedPipe: THandle; lpBuffer: AnsiString; nBufferSize: DWORD; out lpBytesRead: DWORD; lpTotalBytesAvail, lpBytesLeftThisMessage: DWORD): BOOL; external 'PeekNamedPipe@kernel32.dll stdcall';

// File Management Functions
function ReadFile(hFile: THandle; lpBuffer: AnsiString; nNumberOfBytesToRead: DWORD; var lpNumberOfBytesRead: DWORD; lpOverlapped: Longint): BOOL; external 'ReadFile@kernel32.dll stdcall';

var
 
OutputMemo: TMemo;
  RunButton: TButton;

//////////////////////////////////
function ProcessMessages: Boolean;
var
 
Msg: TMsg;
begin
 
Result := True;
  while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
  begin
    if
(Msg.Message = WM_QUIT) then
    begin
     
PostQuitMessage(Msg.wParam);
      Result := False;
      Exit;
    end;
    if not CallMsgFilter(Msg, MSGF_SLEEPMSG) then
    begin
     
TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
  end;
end;

/////////////////////////////// ///////////////////////////////////
procedure CaptureConsoleOutput(const ACommand, AParameters: string;
  const AOEMConvert: Boolean; AMemo: TMemo);
var
 
SecurityAttributes: TSecurityAttributes;
  StartupInfo: TStartupInfo;
  ProcessInformation: TProcessInformation;
  ReadHandle, WriteHandle: THandle;
  BufSize, ResultCode, BytesRead: DWORD;
  Buffer: AnsiString;
begin
 
SecurityAttributes.nLength := SizeOf(SecurityAttributes);
  SecurityAttributes.bInheritHandle := True;
  if CreatePipe(ReadHandle, WriteHandle, SecurityAttributes, 0) then
  try
   
StartupInfo.cb := SizeOf(StartupInfo);
    StartupInfo.hStdInput := ReadHandle;
    StartupInfo.hStdOutput := WriteHandle;
    StartupInfo.hStdError := WriteHandle;
    StartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow := SW_HIDE;
    if CreateProcess('', Format('%s %s', [ACommand, AParameters]), SecurityAttributes, SecurityAttributes, True, 0, 0, '', StartupInfo, ProcessInformation) then
    try
     
CloseHandle(WriteHandle);
      BufSize := 1024;  // 1KB
     
Buffer := StringOfChar(#0, BufSize);
      repeat
       
ResultCode := WaitForSingleObject(ProcessInformation.hProcess, 0);
        PeekNamedPipe(ReadHandle, Buffer, BufSize, BytesRead, 0, 0);
        while ProcessMessages and (BytesRead > 0) do
        begin
       
#ifdef IS_ENHANCED
         
AMemo.Lines.BeginUpdate;
        #endif
         
ReadFile(ReadHandle, Buffer, BytesRead, BytesRead, 0);
          if AOEMConvert then
           
OemToCharBuff(Buffer);
          AMemo.Text := AMemo.Text + Copy(Buffer, 1, BytesRead);
          SendMessage(AMemo.Handle, EM_LINESCROLL, 0, AMemo.Lines.Count);
        #ifdef IS_ENHANCED 
         
AMemo.Lines.EndUpdate;
        #endif
       
end;
      until not ProcessMessages or (ResultCode <> WAIT_TIMEOUT);
    finally
     
CloseHandle(ProcessInformation.hProcess);
      CloseHandle(ProcessInformation.hThread);
    end;
  finally
   
CloseHandle(ReadHandle);
  end;
end;

////////////////////////////////////////////
procedure RunButtonOnClick(Sender: TObject);
begin
 
CaptureConsoleOutput('cmd.exe', '/c ping ya.ru', True, OutputMemo);
end;

///////////////////////////
procedure InitializeWizard;
begin
 
WizardForm.OuterNotebook.Hide;

  OutputMemo := TMemo.Create(WizardForm);
  with OutputMemo do
  begin
   
Parent := WizardForm;
    SetBounds(WizardForm.OuterNotebook.Left, WizardForm.OuterNotebook.Top, WizardForm.OuterNotebook.Width, WizardForm.OuterNotebook.Height);
    ScrollBars := ssVertical;
    ReadOnly := True;
  #ifdef IS_ENHANCED
   
DoubleBuffered := True;
  #endif
 
end;

  RunButton := TButton.Create(WizardForm);
  with RunButton do
  begin
   
Parent := WizardForm;
    SetBounds(WizardForm.OuterNotebook.Left, WizardForm.NextButton.Top, WizardForm.NextButton.Width, WizardForm.NextButton.Height);
    Caption := 'Run';
    OnClick := @RunButtonOnClick;
  end;
end;

//////////////////////////////////////////////////////
function NextButtonClick(CurPageID: Integer): Boolean;
begin
 
Result := False;
end;


usermode 16-08-2017 16:21 2758735

El Sanchez, а что за компилятор используется? Пробовал расширенную версию от ResTools - не понимает многих параметров. (В Inno Ultra, все хорошо.)
Привык к стандартной официальной версии, буду пробовать адаптировать, за пример огромное спасибо!

добавлено
подскажите, какой изврат можно использовать в стандартной версии Unicode вместо:

Buffer := CastIntegerToString(BufPtr);

чтобы перевести содержимое в ANSI.

Адаптировал пример под официальную ANSI версию компилятора - все нормально, отображает символы корректно, но UNICODE не содержит CastIntegerToAnsiString.
Что нужно учесть, чтобы написать свою функцию CastIntegerToAnsiString, либо как решить задачу другим способом?
======================================================================================
Цитата:

Цитата El Sanchez
usermode, адаптировал под официальную версию. »

респект! рука профессионала!

nik1967 16-08-2017 16:57 2758746

El Sanchez, а вывод с консоли заголовка окна возможен? Скажем, проценты выполнения процесса? Было бы здорово.

El Sanchez 16-08-2017 21:44 2758797

Цитата:

Цитата usermode
Что нужно учесть, чтобы написать свою функцию CastIntegerToAnsiString, либо как решить задачу другим способом? »

usermode, адаптировал под официальную версию.
Цитата:

Цитата nik1967
а вывод с консоли заголовка окна возможен? Скажем, проценты выполнения процесса? »

nik1967, а фиг его знает. После CreateProcess известны PID и дескриптор процесса, по одному из них искать дескриптор окна, далее текст заголовка.

nik1967 16-08-2017 22:42 2758810

El Sanchez, спасибо за направление, но это не мой уровень, увы.

postal1703 17-08-2017 03:59 2758842

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

Nordek 17-08-2017 07:29 2758849

Цитата:

Цитата postal1703
т.е нужно указать файлы которые деинсталятор будит обходить стороной. »

Используйте флаг uninsneveruninstall

Пример:
Код:

[Files]
Source: MyProg.exe; DestDir: {app}; Flags: uninsneveruninstall


Dodakaedr 17-08-2017 10:48 2758901

Цитата:

Цитата TheLeon
можно ли на финишной странице установщика сделать пункт, который удаляет файлы в определённых папках? »

Пример очистки локальной папки Temp, для удаления файлов используйте вместо команды DelTree команду DeleteFile:
Скрытый текст
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
DelTmp: TNewCheckBox;

function DelTmpCheck(): boolean;
begin
  result := DelTmp.Checked;
end;

procedure InitializeWizard();
begin
  DelTmp := TNewCheckBox.Create(WizardForm);
  DelTmp.Parent := WizardForm.FinishedPage;
  DelTmp.Caption := 'Очистить папку Temp';
  DelTmp.SetBounds(ScaleX(WizardForm.RunList.Left), ScaleY(WizardForm.RunList.Top), ScaleX(140), ScaleY(15));
  DelTmp.Checked := true;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssDone:
      begin
        if DelTmpCheck then
          begin
            DelTree(ExpandConstant('{localappdata}\Temp'), false, true, true);
          end;
      end;
  end;
end;


TheLeon 17-08-2017 20:03 2759025

Dodakaedr, спасибо вам большое.

TheLeon 17-08-2017 20:41 2759037

Dodakaedr, теперь возникла другая проблема, код накладывается на секцию [run] на финишной странице, решил передвинуть текст, вроде получилось, но белый фон кода закрывает секцию [run]. Да, и как мне передвинуть текст немного правее(чтобы был в столбик с секцией [run])? Заранее спасибо!)

boss911 17-08-2017 22:51 2759070

Цитата:

Цитата TheLeon
белый фон кода закрывает секцию [run]. Да, и как мне передвинуть текст немного правее »

Замените одну строку в секции Code (процедура InitializeWizard):
Код:

  DelTmp.SetBounds(ScaleX(WizardForm.RunList.Left), ScaleY(WizardForm.RunList.Top), ScaleX(140), ScaleY(15));
на эти строки:
Код:

  DelTmp.Left := ScaleX(180);
  DelTmp.Top := ScaleY(155);
  DelTmp.Width := ScaleX(300);
  DelTmp.Height := ScaleY(15);

При необходимости можете поиграться числами (координатами и размерами).

Dodakaedr 17-08-2017 23:01 2759072

Цитата:

Цитата TheLeon
код накладывается на секцию [run] на финишной странице »

Скрытый текст
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Run]
FileName: "Test.exe"; Description: "бла-бла"; Flags: postinstall

[code]
var
DelTmp: TNewCheckBox;

function DelTmpCheck(): boolean;
begin
  result := DelTmp.Checked;
end;

procedure InitializeWizard();
begin
  WizardForm.RunList.Height := ScaleY(WizardForm.RunList.Height-100); //здесь указываем ширину RunList
  DelTmp := TNewCheckBox.Create(WizardForm);
  DelTmp.Parent := WizardForm.FinishedPage;
  DelTmp.Caption := 'Очистить папку Temp';
  DelTmp.SetBounds(ScaleX(WizardForm.RunList.Left+4), ScaleY(WizardForm.RunList.Top+WizardForm.RunList.Height+4), ScaleX(140), ScaleY(15)); //здесь указываем расположение чекбокса
  DelTmp.Checked := true;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssDone:
      begin
        if DelTmpCheck then
          begin
            DelTree(ExpandConstant('{localappdata}\Temp'), false, true, true);
          end;
      end;
  end;
end;


TheLeon 18-08-2017 08:13 2759114

boss911 и Dodakaedr, спасибо вам большое!

pollipen 20-08-2017 13:46 2759569

парни как сделать папку только для чтения или системную

boss911 20-08-2017 14:33 2759580

Цитата:

Цитата pollipen
как сделать папку только для чтения или системную »

Код:

[Dirs]
Name: {app}MyFolder; Attribs: readonly system


pollipen 23-08-2017 13:02 2760170

парни как убрать страницу установить , что бы продолжалась автоматом установка

boss911 23-08-2017 14:28 2760203

Цитата:

Цитата pollipen
убрать страницу установить »

Если я правильно понял, то речь идет о странице ReadyPage.
Код:

[Setup]
DisableReadyPage=yes


ZVSRus 23-08-2017 16:02 2760241

pollipen
Скрытый текст
Код:

[Setup]
 AppName=My Application
 AppVersion=1.5
 DefaultDirName={pf}\My Application

[Files]
 Source: "compiler:\*"; DestDir: "{app}"; Flags: ignoreversion

[Code_]
procedure CurPageChanged(CurPageID: Integer);
begin                                                                       
  case CurPageID of
    wpSelectDir:                                                           
    WizardForm.NextButton.Caption:= 'Установить'                           
  end;                                                                     
end;                                                                       

function ShouldSkipPage(PageID: Integer): Boolean;                                   
begin
  if (PageID = 8) or(PageID = 10) then
  Result:= True;                                                                     
end;


pollipen 25-08-2017 16:16 2760699

что то не получается вот скрипт надо чтобы тихо продолжалась установка без пользователя (может кто поправит или подскажет)
скрипт

HTML код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{820F943F-D4F5-47B0-A3E3-B4568C5A07EC}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableWelcomePage=yes
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\ww\Desktop\Soft\DirectX.exe"; DestDir: "{tmp}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[code]
function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
begin
  if not FileExists(ExpandConstant('{tmp}\DirectX.exe')) then ExtractTemporaryFile('DirectX.exe');
  Exec(ExpandConstant('{tmp}\DirectX.exe'), '', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);
  result:=True;
end;

#define A = (Defined UNICODE) ? "W" : "A"
const
    WM_USER = $0400;
    PBM_SETPOS = (WM_USER + 2);
    GWL_WNDPROC = (-4);
    GWL_USERDATA = (-21);

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

var
    InstPercentLabel: TLabel;

///////////////////////////////
procedure CreateInstallingPage;
begin
    { InstPercentLabel }
    InstPercentLabel := TLabel.Create(WizardForm);
    with InstPercentLabel do
    begin
        Parent := WizardForm.ProgressGauge;
        Align := alClient;
        Alignment := taCenter;
        Layout := tlCenter;
        Transparent := True;
    end;
end;

///////////////////////////////////////////////////////////////////////////////////////
function ProgressGaugeWndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
begin
    case Msg of
        PBM_SETPOS:
            begin
                Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
                with WizardForm.ProgressGauge do
                    InstPercentLabel.Caption := Format('%d %%', [MulDiv(Position, 100, Max)]);
            end;
    else
        Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

///////////////////////////
procedure SubclassControls;
begin
    { ProgressGauge }
    with WizardForm.ProgressGauge do
    begin
        if GetWindowLong(Handle, GWL_USERDATA) = 0 then
            SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, CallbackAddr('ProgressGaugeWndProc')));
    end;
end;

///////////////////////////
procedure InitializeWizard3;
begin
    CreateInstallingPage;
    SubclassControls;
end;

/////////////////////////////
procedure UnSubclassControls;
begin
    { ProgressGauge }
    with WizardForm.ProgressGauge do
    begin
        if GetWindowLong(Handle, GWL_USERDATA) > 0 then
            SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));
    end;
end;

procedure InitializeWizard1();
begin
WizardForm.DirBrowseButton.Hide;

with WizardForm.DirEdit do
begin
Width := ScaleX(417);
AutoSelect := False;
Enabled := False;
end;
end;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard2();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
WizardForm.Bevel1.Hide;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
if CurPageID=wpInstalling then
begin
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(91);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(15);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(325);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(68);
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end;
end;
////////////////////////
var
  Label1: TLabel;

procedure btnOnClick(Sender: TObject);
var
 rcode: integer;
begin
    ShellExec('open','http://forum.oszone.net','', '', SW_SHOW, ewNoWait, rCode);
end;

procedure btnOnClick2(Sender: TObject);
begin
    Label1.Font.Color := clred;
end;

procedure btnOnClick3(Sender: TObject);
begin
    Label1.Font.Color := clBlue;
end;

procedure InitializeWizard4();
begin
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := WizardForm;
    Cursor := crHand;
    Caption := 'Дополнительный софт';
    Font.Color := clBlue;
    Font.Height := -16;
    Font.Name := 'Tahoma';
    Font.Style := [fsUnderline];
    ParentFont := False;
    Transparent := True;
    OnClick := @btnOnClick;
    OnMouseEnter := @btnOnClick2;
    OnMouseLeave := @btnOnClick3;
    Left := ScaleX(8);
    Top := ScaleY(327);
    Width := ScaleX(153);
    Height := ScaleY(19);
  end;
end;
/////////////////
procedure CurPageChanged1(CurPageID: Integer);
begin                                                                       
  case CurPageID of
    wpSelectDir:                                                           
    WizardForm.NextButton.Caption:= 'Установить'                           
  end;                                                                     
end;                                                                       

function ShouldSkipPage(PageID: Integer): Boolean;                                   
begin
  if (PageID = 8) or(PageID = 10) then
  Result:= True;                                                                     
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3;
InitializeWizard4();
end;

////////////////////////////
procedure DeinitializeSetup;
begin
    if ExpandConstant('{wizardhwnd}') = '0' then
        Exit;
    UnSubclassControls;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID)
CurPageChanged2(CurPageID)
end


pollipen 26-08-2017 10:35 2760808

парни как запустить .msi файл из установщика, а то пишет что не является приложением win 32

R.i.m.s.k.y. 26-08-2017 11:35 2760820

pollipen, http://www.jrsoftware.org/iskb.php?msi

Код:

[Files]
Source: "Your-MSI-File.msi"; DestDir: "{tmp}"

[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\Your-MSI-File.msi"""


Nordek 26-08-2017 14:13 2760842

Цитата:

Цитата pollipen
надо чтобы тихо продолжалась установка без пользователя »

Судя по поведению, Вам необходимо чтоб следовало скрытое выполнение DirectX.
Код:

Exec(ExpandConstant('{tmp}\DirectX.exe'), '/q', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);

Цитата:

Цитата pollipen
поправит »

Скрытый текст

Поправил:
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"


[Setup]
AppId={{820F943F-D4F5-47B0-A3E3-B4568C5A07EC}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableWelcomePage=yes
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\ww\Desktop\Soft\DirectX.exe"; DestDir: "{tmp}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[Code]
function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
begin
  if not
FileExists(ExpandConstant('{tmp}\DirectX.exe')) then ExtractTemporaryFile('DirectX.exe');
  Exec(ExpandConstant('{tmp}\DirectX.exe'), '/q', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);
  result:=True;
end;

#define A = (Defined UNICODE) ? "W" : "A"
const
    WM_USER = $0400;
    PBM_SETPOS = (WM_USER + 2);
    GWL_WNDPROC = (-4);
    GWL_USERDATA = (-21);

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

var
    InstPercentLabel: TLabel;

///////////////////////////////
procedure CreateInstallingPage;
begin
    { InstPercentLabel }
    InstPercentLabel := TLabel.Create(WizardForm);
    with InstPercentLabel do
    begin

        Parent := WizardForm.ProgressGauge;
        Align := alClient;
        Alignment := taCenter;
        Layout := tlCenter;
        Transparent := True;
    end;
end;

///////////////////////////////////////////////////////////////////////////////////////
function ProgressGaugeWndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
begin
    case
Msg of
        PBM_SETPOS:
            begin
                Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
                with WizardForm.ProgressGauge do
                    InstPercentLabel.Caption := Format('%d %%', [MulDiv(Position, 100, Max)]);
            end;
    else
        Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

///////////////////////////
procedure SubclassControls;
begin
    { ProgressGauge }
    with WizardForm.ProgressGauge do
    begin
        if
GetWindowLong(Handle, GWL_USERDATA) = 0 then
            SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, CallbackAddr('ProgressGaugeWndProc')));
    end;
end;


/////////////////////////////
procedure UnSubclassControls;
begin
    { ProgressGauge }
    with WizardForm.ProgressGauge do
    begin
        if
GetWindowLong(Handle, GWL_USERDATA) > 0 then
           
SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));
    end;
end;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';


procedure CurPageChanged(CurPageID: Integer);
begin
if
CurPageID=wpInstalling then
begin

WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(91);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(15);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(325);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(68);
end;

  case CurPageID of
    wpSelectDir:
    WizardForm.NextButton.Caption:= 'Установить'
  end;

if CurPageID=wpFinished
then
  begin

    WizardForm.Width:=502;{Размер окна по горизонтали}
    WizardForm.Height:=392;{Размер окна по вертикали}
    WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
  end;
end;



////////////////////////
var
  Label1: TLabel;

procedure btnOnClick(Sender: TObject);
var
 rcode: integer;
begin
    ShellExec('open','http://forum.oszone.net','', '', SW_SHOW, ewNoWait, rCode);
end;

procedure btnOnClick2(Sender: TObject);
begin
    Label1.Font.Color := clred;
end;

procedure btnOnClick3(Sender: TObject);
begin
    Label1.Font.Color := clBlue;
end;


/////////////////
procedure InitializeWizard();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;

// *****
WizardForm.Bevel1.Hide;

// *****
WizardForm.DirBrowseButton.Hide;

// *****
with WizardForm.DirEdit do
  begin

    Width := ScaleX(417);
    AutoSelect := False;
    Enabled := False;
  end;

// *****
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin

    Parent := WizardForm;
    Cursor := crHand;
    Caption := 'Дополнительный софт';
    Font.Color := clBlue;
    Font.Height := -16;
    Font.Name := 'Tahoma';
    Font.Style := [fsUnderline];
    ParentFont := False;
    Transparent := True;
    OnClick := @btnOnClick;
    OnMouseEnter := @btnOnClick2;
    OnMouseLeave := @btnOnClick3;
    SetBounds(ScaleX(8), ScaleY(327), Width, ScaleY(19));
  end;
/////////////////


///////////////////////////

    CreateInstallingPage;
    SubclassControls;
/////////////////////////////
end;


function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if
(PageID = 8) or(PageID = 10) then
  Result:= True;
end;


////////////////////////////
procedure DeinitializeSetup;
begin
    if
ExpandConstant('{wizardhwnd}') = '0' then
       
Exit;
    UnSubclassControls;
end;


ZVSRus 26-08-2017 14:58 2760844

pollipen
Цитата:

чтобы тихо продолжалась установка без пользователя
Если имелось ввиду что бы не показывалась страница SelectTasksPage (следующая страница за той на которой кнопка далее переименована на установить)

тогда так

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = 8) or(PageID = 9) or(PageID = 10) then
Result:= True;
end;

pollipen 26-08-2017 16:28 2760855

Спасибо ZVSRus выручил.

pollipen 27-08-2017 20:52 2761035

Вопрос такой на Splash можно как то поставить анимацию (.gif)

ZVSRus 28-08-2017 11:01 2761100

pollipen
как то так

Цитата:

Цитата Положи рядом со скриптом картинку .gif и соответствующие .DLL,ки
; Время проявления картинки Splash (1500мс = 1,5 сек)
#define SplS "2000"
; Время показа картинки Splash (3000мс = 3 сек)
#define SplR "5000"
; Время затухания картинки Splash (1500мс = 1,5 сек)
#define SplE "2000"

[Setup]
AppName=Splash
AppVerName=Splash
DefaultDirName={pf}\Splash
OutputDir=.
UsePreviousAppDir=no
UsePreviousGroup=no

[Files]
Source: "Include\gifctrl.dll"; Flags: dontcopy solidbreak
Source: "splash.gif"; Flags: dontcopy solidbreak
Source: "Include\isgsg.dll"; Flags: dontcopy solidbreak
// Source: "splash.png"; Flags: dontcopy solidbreak

[code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure RunSplash();
begin
ExtractTemporaryFile('splash.gif');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.gif',{#SplS},{#SplR},{#SplE},0,255,False,$FFFFFF,10);
end;

procedure InitializeWizard;
begin
RunSplash();
end;


pollipen 28-08-2017 11:25 2761103

не получилось ни чего не показывает

ZVSRus 28-08-2017 12:04 2761108

pollipen
Цитата:

не получилось ни чего не показывает
Смотри внимательней, в примере DLL лежат в папке Include, сотри это.

https://www.upload.ee/files/7397789/splash.rar.html

pollipen 28-08-2017 14:58 2761123

да, у меня всё так и было, но почему то тишина
https://youtu.be/bGzZmjz6BOU

Nordek 28-08-2017 15:34 2761134

Цитата:

Цитата pollipen
да, у меня всё так и было, но почему то тишина »

Потому, что у Вас юникодная версия Inno.

Поправил пример:
Код:

; Время проявления картинки Splash (1500мс = 1,5 сек)
#define SplS "2000"
; Время показа картинки Splash (3000мс = 3 сек)
#define SplR "5000"
; Время затухания картинки Splash (1500мс = 1,5 сек)
#define SplE "2000"

[Setup]
AppName=Splash
AppVerName=Splash
DefaultDirName={pf}\Splash
OutputDir=.
UsePreviousAppDir=no
UsePreviousGroup=no

[Files]
Source: "Include\gifctrl.dll"; Flags: dontcopy solidbreak
Source: "splash.gif"; Flags: dontcopy solidbreak
Source: "Include\isgsg.dll"; Flags: dontcopy solidbreak
// Source: "splash.png"; Flags: dontcopy solidbreak

[Code]
procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure RunSplash();
begin
 
ExtractTemporaryFile('splash.gif');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.gif',{#SplS},{#SplR},{#SplE},0,255,False,$FFFFFF,10);
end;

procedure InitializeWizard;
begin
 
RunSplash();
end;


pollipen 28-08-2017 16:11 2761144

:up спасибо!!!
Всё работает!!! :clapping:

R.i.m.s.k.y. 29-08-2017 10:32 2761257

Не могу понять как сделать так чтобы при запуске под UAC от имени администратора иконки создавались в папке пользователя а не администратора или в общей папке
Т.е логинится пользователь User, установщик запускается от Admin, и иконки создаются в папке
c:\Users\Admin\AppData\Roaming\Microsoft\Windows\Start Menu\

[Icons]
Components: www; Name: "{group}\w w w ...

vadim.koltsov@vk 30-08-2017 11:21 2761457

Всем привет. Прикручиваю в расширенной версии фон на компонентлист, но при скролле картинка "ползает". Как это можно исправить?
Скрытый текст

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DisableFinishedPage=yes
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[CustomMessages]
rus.Text=Язык интерфейса:
rus.Voice=Язык озвучки:
rus.Russian=Русский
rus.English=Английский

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Components]
Name: Text; Description: {cm:Text}; Flags: fixed; Types: Full;               
Name: Text\Eng; Description: {cm:English}; Flags: exclusive; ExtraDiskSpaceRequired: 50000000;
Name: Text\Rus; Description: {cm:Russian}; Flags: exclusive; ExtraDiskSpaceRequired: 60000000;
Name: Voice; Description: {cm:Voice}; Flags: fixed; Types: Full;
Name: Voice\Eng; Description: {cm:English}; Flags: exclusive; ExtraDiskSpaceRequired: 500000000;
Name: Voice\Rus; Description: {cm:Russian}; Flags: exclusive; ExtraDiskSpaceRequired: 600000000;

Name: Text1; Description: {cm:Text}; Flags: fixed; Types: Full;
Name: Text1\Eng; Description: {cm:English}; Flags: exclusive; ExtraDiskSpaceRequired: 50000000;
Name: Text1\Rus; Description: {cm:Russian}; Flags: exclusive; ExtraDiskSpaceRequired: 60000000;
Name: Voice1; Description: {cm:Voice}; Flags: fixed; Types: Full;
Name: Voice1\Eng; Description: {cm:English}; Flags: exclusive; ExtraDiskSpaceRequired: 500000000;
Name: Voice1\Rus; Description: {cm:Russian}; Flags: exclusive; ExtraDiskSpaceRequired: 600000000;

Name: Text2; Description: {cm:Text}; Flags: fixed; Types: Full;
Name: Text2\Eng; Description: {cm:English}; Flags: exclusive; ExtraDiskSpaceRequired: 50000000;
Name: Text2\Rus; Description: {cm:Russian}; Flags: exclusive; ExtraDiskSpaceRequired: 60000000;
Name: Voice2; Description: {cm:Voice}; Flags: fixed; Types: Full;
Name: Voice2\Eng; Description: {cm:English}; Flags: exclusive; ExtraDiskSpaceRequired: 500000000;
Name: Voice2\Rus; Description: {cm:Russian}; Flags: exclusive; ExtraDiskSpaceRequired: 600000000;

[Files]
Source: Embedded\WizardImages\BMPImage.bmp; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: Embedded\WizardImages\BTNImage.bmp; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;

[---code---]var
  BGBitmapImage,BTNImage: TBitmapImage;
  BorderWidth: Integer;
  BGImageStream,BTNImageStream: TMemoryStream;

procedure InitializeWizard();
begin
  BGImageStream := TMemoryStream.Create;
  ExtractTemporaryFileToStream('BMPImage.bmp', BGImageStream);
  BGImageStream.Position := 0;

  BTNImageStream := TMemoryStream.Create;
  ExtractTemporaryFileToStream('BtnImage.bmp', BTNImageStream);
  BTNImageStream.Position := 0;

  BGBitmapImage := TBitmapImage.Create(WizardForm);
  BGBitmapImage.Bitmap.LoadFromStream(BGImageStream);

  BTNImage := TBitmapImage.Create(WizardForm);
  BTNImage.Bitmap.LoadFromStream(BTNImageStream);
with WizardForm.ComponentsList do begin
  Font.Color:= $FFF8F8;
  Font.Name:='Tahoma';
  Font.Size:= 8;
  BorderWidth := (WizardForm.ComponentsList.Width-WizardForm.ComponentsList.ClientWidth) div 2;
  LoadBGBmpFromBitmap(BGBitmapImage.Bitmap,  WizardForm.ComponentsList.Left+BorderWidth, WizardForm.ComponentsList.Top+BorderWidth);
  LoadBtnBmpFromBitmap(BTNImage.Bitmap);
end;
end;


postal1703 01-09-2017 15:48 2761896

нужна ваша помощь. как сделать так чтобы установщик запустил выбранный мной файл а после удачного запуска удалил его?

Nordek 01-09-2017 18:38 2761940

Цитата:

Цитата postal1703
как сделать так чтобы установщик запустил выбранный мной файл »

Скрытый текст
Так:
Код:

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {tmp}

[Run]
Filename: {tmp}\MyProg.exe; Description: {cm:LaunchProgram,My Program}; Flags: nowait postinstall skipifsilent



или так:
Код:

[Tasks]
Name: file; Description: Run My File

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {tmp}

[Run]
Filename: {tmp}\MyProg.exe; Tasks: file


или так:
Код:

[Tasks]
Name: file; Description: Run My File

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: deleteafterinstall

[Run]
Filename: {app}\MyProg.exe; Tasks: file


TheLeon 03-09-2017 13:49 2762226

Здравствуйте, уважаемые пользователи Oszone.net(Форума). Выскакивает ошибка при компиляции проекта, а именно(причина понятна, но не знаю как решить):
(Решено)

Сам код:
Скрытый текст

[code]
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
if not FileExists(ExpandConstant('{app}\steam.exe')) then begin
MsgBox('Ошибка! Вы должны указать путь к папке Steam.', mbError, MB_OK);
Result := False;
end;
end;
end;
procedure SomeProc;
begin
end;
var
DelTmp: TNewCheckBox;
function DelTmpCheck(): boolean;
begin
result := DelTmp.Checked;
end;
procedure InitializeWizard();
begin
WizardForm.RunList.Height := ScaleY(WizardForm.RunList.Height-100);
DelTmp := TNewCheckBox.Create(WizardForm);
DelTmp.Parent := WizardForm.FinishedPage;
DelTmp.Caption := ' Очистить временные файлы игры (рекомендуется)';
DelTmp.Left := ScaleX(180);
DelTmp.Top := ScaleY(170);
DelTmp.Width := ScaleX(300);
DelTmp.Height := ScaleY(15);
DelTmp.Checked := true;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssDone:
begin
if DelTmpCheck then
begin
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\directx_installer\*'), false, true, true);
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\csgo_lv\streams\*'), false, true, true);
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\EmptySteamDepot'), True, true, true);
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\thirdpartylegalnotices.doc'), false, true, true);
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\installscript.vdf'), false, true, true);
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\images'), True, true, true);
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\maps'), True, true, true);
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\scripts'), True, true, true);
DelTree(ExpandConstant('{userdocs}\images'), True, true, true);
DelTree(ExpandConstant('{userdocs}\maps'), True, true, true);
DelTree(ExpandConstant('{userdocs}\scripts'), True, true, true);
end;
end;
end;
end;
var
ImagePanel: TPanel;
ComponentsInfoImage: TBitmapImage;

procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('LEON\DE_DUST2') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_dust2.bmp')) else
If IsComponentSelected('LEON\DE_INFERNO') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_inferno.bmp')) else
If IsComponentSelected('LEON\DE_MIRAGE') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_mirage.bmp')) else
If IsComponentSelected('LEON\DE_CACHE') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_cache.bmp')) else
If IsComponentSelected('LEON\DE_CBBLE') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_cbble.bmp')) else
If IsComponentSelected('LEON\DE_OVERPASS') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_overpass.bmp')) else
If IsComponentSelected('LEON\CS_ITALY') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_italy.bmp')) else
If IsComponentSelected('LEON\DE_TRAIN') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_train.bmp')) else
If IsComponentSelected('LEON\DE_NUKE') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_nuke.bmp')) else

If IsComponentSelected('FROOSH\DE_DUST2') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_dust2.bmp')) else
If IsComponentSelected('FROOSH\DE_INFERNO') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_inferno.bmp')) else
If IsComponentSelected('FROOSH\DE_MIRAGE') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_mirage.bmp')) else
If IsComponentSelected('FROOSH\DE_CACHE') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_cache.bmp')) else
If IsComponentSelected('FROOSH\DE_CBBLE') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_cbble.bmp')) else
If IsComponentSelected('FROOSH\DE_OVERPASS') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_overpass.bmp')) else
If IsComponentSelected('FROOSH\DE_SEASON') then
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_season.bmp'));
end;

procedure InitializeWizard();
begin
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Visible := True;
WizardForm.ComponentsList.Height := ScaleX(100);
WizardForm.ComponentsList.Top := ScaleX(47);
WizardForm.ComponentsList.Width := ScaleX(232);
WizardForm.ComponentsDiskSpaceLabel.Visible := False;

ImagePanel := TPanel.Create(WizardForm);
ImagePanel.Parent := WizardForm.SelectComponentsPage;
ImagePanel.Caption := '';
ImagePanel.Top := ScaleX(47);
ImagePanel.Left := ScaleX(240);
ImagePanel.Width := ScaleX(177);
ImagePanel.Height := ScaleX(101);
ImagePanel.BevelInner := bvRaised;
ImagePanel.BevelOuter := bvLowered;

ExtractTemporaryFile('leon_dust2.bmp');
ExtractTemporaryFile('leon_inferno.bmp');
ExtractTemporaryFile('leon_mirage.bmp');
ExtractTemporaryFile('leon_cache.bmp');
ExtractTemporaryFile('leon_cbble.bmp');
ExtractTemporaryFile('leon_overpass.bmp');
ExtractTemporaryFile('leon_italy.bmp');
ExtractTemporaryFile('leon_train.bmp');
ExtractTemporaryFile('leon_nuke.bmp');

ExtractTemporaryFile('froosh_dust2.bmp');
ExtractTemporaryFile('froosh_inferno.bmp');
ExtractTemporaryFile('froosh_mirage.bmp');
ExtractTemporaryFile('froosh_cache.bmp');
ExtractTemporaryFile('froosh_cbble.bmp');
ExtractTemporaryFile('froosh_overpass.bmp');
ExtractTemporaryFile('froosh_season.bmp');

WizardForm.ComponentsList.OnClickCheck:= @ComponentsListClickCheck;
ComponentsInfoImage:= TBitmapImage.Create(WizardForm);
ComponentsInfoImage.Parent:= ImagePanel;
ComponentsInfoImage.Top:= ScaleY(4);
ComponentsInfoImage.Left:= ScaleX(4);
ComponentsInfoImage.Width:= ScaleX(168);
ComponentsInfoImage.Height:= ScaleY(92);
ComponentsInfoImage.Stretch:= True;
ComponentsInfoImage.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectComponents: ComponentsListClickCheck(nil);
end;
end;

Iska 03-09-2017 14:13 2762231

Цитата:

Цитата TheLeon
Выскакивает ошибка при компиляции проекта, а именно: »

В коде Вашего проекта две процедуры с одним и тем же именем «InitializeWizard()».

Nordek 03-09-2017 14:42 2762236

TheLeon, Исправил:
Код:

[Code]
function NextButtonClick(CurPageID: Integer): Boolean;
begin
 
Result := True;
  case CurPageID of
   
wpSelectDir:
      if not FileExists(ExpandConstant('{app}\steam.exe')) then begin
       
MsgBox('Ошибка! Вы должны указать путь к папке Steam.', mbError, MB_OK);
        Result := False;
      end;
  end;
end;
procedure SomeProc;
begin
end
;
var
DelTmp: TNewCheckBox;
function DelTmpCheck(): boolean;
begin
 
result := DelTmp.Checked;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case
CurStep of
   
ssDone:
      begin
        if
DelTmpCheck then
          begin
           
DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\directx_installer\*'), false, true, true);
            DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\csgo_lv\streams\*'), false, true, true);
            DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\EmptySteamDepot'), True, true, true);
            DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\thirdpartylegalnotices.doc'), false, true, true);
            DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\installscript.vdf'), false, true, true);
            DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\images'), True, true, true);
            DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\maps'), True, true, true);
            DelTree(ExpandConstant('{app}\steamapps\common\Counter-Strike Global Offensive\scripts'), True, true, true);
            DelTree(ExpandConstant('{userdocs}\images'), True, true, true);
            DelTree(ExpandConstant('{userdocs}\maps'), True, true, true);
            DelTree(ExpandConstant('{userdocs}\scripts'), True, true, true);
          end;
      end;
  end;
end;
////////////////////////////////////////////////////////////////////////////////////////////////
var
 
ImagePanel: TPanel;
  ComponentsInfoImage: TBitmapImage;

procedure ComponentsListClickCheck(Sender: TObject);
begin
  If
IsComponentSelected('LEON\DE_DUST2') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_dust2.bmp')) else
  If
IsComponentSelected('LEON\DE_INFERNO') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_inferno.bmp')) else
  If
IsComponentSelected('LEON\DE_MIRAGE') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_mirage.bmp')) else
  If
IsComponentSelected('LEON\DE_CACHE') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_cache.bmp')) else
  If
IsComponentSelected('LEON\DE_CBBLE') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_cbble.bmp')) else
  If
IsComponentSelected('LEON\DE_OVERPASS') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_overpass.bmp')) else
  If
IsComponentSelected('LEON\CS_ITALY') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_italy.bmp')) else
  If
IsComponentSelected('LEON\DE_TRAIN') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_train.bmp')) else
  If
IsComponentSelected('LEON\DE_NUKE') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\leon_nuke.bmp')) else

  If
IsComponentSelected('FROOSH\DE_DUST2') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_dust2.bmp')) else
  If
IsComponentSelected('FROOSH\DE_INFERNO') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_inferno.bmp')) else
  If
IsComponentSelected('FROOSH\DE_MIRAGE') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_mirage.bmp')) else
  If
IsComponentSelected('FROOSH\DE_CACHE') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_cache.bmp')) else
  If
IsComponentSelected('FROOSH\DE_CBBLE') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_cbble.bmp')) else
  If
IsComponentSelected('FROOSH\DE_OVERPASS') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_overpass.bmp')) else
  If
IsComponentSelected('FROOSH\DE_SEASON') then
   
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\froosh_season.bmp'));
end;


procedure InitializeWizard();
begin
 
WizardForm.TYPESCOMBO.Visible:= false;
  WizardForm.ComponentsList.Visible := True;
  WizardForm.ComponentsList.Height := ScaleX(100);
  WizardForm.ComponentsList.Top := ScaleX(47);
  WizardForm.ComponentsList.Width := ScaleX(232);
  WizardForm.ComponentsDiskSpaceLabel.Visible := False;

  ImagePanel := TPanel.Create(WizardForm);
  ImagePanel.Parent := WizardForm.SelectComponentsPage;
  ImagePanel.Caption := '';
  ImagePanel.Top := ScaleX(47);
  ImagePanel.Left := ScaleX(240);
  ImagePanel.Width := ScaleX(177);
  ImagePanel.Height := ScaleX(101);
  ImagePanel.BevelInner := bvRaised;
  ImagePanel.BevelOuter := bvLowered;

  ExtractTemporaryFile('leon_dust2.bmp');
  ExtractTemporaryFile('leon_inferno.bmp');
  ExtractTemporaryFile('leon_mirage.bmp');
  ExtractTemporaryFile('leon_cache.bmp');
  ExtractTemporaryFile('leon_cbble.bmp');
  ExtractTemporaryFile('leon_overpass.bmp');
  ExtractTemporaryFile('leon_italy.bmp');
  ExtractTemporaryFile('leon_train.bmp');
  ExtractTemporaryFile('leon_nuke.bmp');

  ExtractTemporaryFile('froosh_dust2.bmp');
  ExtractTemporaryFile('froosh_inferno.bmp');
  ExtractTemporaryFile('froosh_mirage.bmp');
  ExtractTemporaryFile('froosh_cache.bmp');
  ExtractTemporaryFile('froosh_cbble.bmp');
  ExtractTemporaryFile('froosh_overpass.bmp');
  ExtractTemporaryFile('froosh_season.bmp');

  WizardForm.ComponentsList.OnClickCheck:= @ComponentsListClickCheck;
  ComponentsInfoImage:= TBitmapImage.Create(WizardForm);
  ComponentsInfoImage.Parent:= ImagePanel;
  ComponentsInfoImage.Top:= ScaleY(4);
  ComponentsInfoImage.Left:= ScaleX(4);
  ComponentsInfoImage.Width:= ScaleX(168);
  ComponentsInfoImage.Height:= ScaleY(92);
  ComponentsInfoImage.Stretch:= True;
  ComponentsInfoImage.BringToFront;

  WizardForm.RunList.Height := ScaleY(WizardForm.RunList.Height-100);
  DelTmp := TNewCheckBox.Create(WizardForm);
  DelTmp.Parent := WizardForm.FinishedPage;
  DelTmp.Caption := ' Очистить временные файлы игры (рекомендуется)';
  DelTmp.Left := ScaleX(180);
  DelTmp.Top := ScaleY(170);
  DelTmp.Width := ScaleX(300);
  DelTmp.Height := ScaleY(15);
  DelTmp.Checked := true;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case
CurPageID of
   
wpSelectComponents: ComponentsListClickCheck(nil);
  end;
end;

P.S Теперь найдите отличия между своим кодом и из данного сообщения.

TheLeon 03-09-2017 14:45 2762239

Nordek, спасибо.

Nordek 03-09-2017 14:46 2762240

Не понятно что за "Файл 147853"
Цитата:

Страница не найдена. Если вы уверены, что использовали правильную ссылку, свяжитесь с администрацией
Если прикрепили к сообщению файл, то пусть будет прикреплённым - ненужно самодеятельности.
Если не хватает места для прикрепления например картинок - используйте хостинг картинок.

TheLeon 03-09-2017 14:54 2762241

Nordek, "Файл 147853" - это был весь проект(на всякий если кому-нибудь понадобится для проверки), но решил удалить.

ErikPshat 10-09-2017 01:27 2763846

Помогите пожалуйста, знаю наверняка 100500 раз это спрашивали, но никак не могу найти подходящую формулу.
Нужно, перед установкой программы, проверить, установлена ли до этого данная программа и, если установлена, то запустить её стандартную деинсталляцию. После удаления продолжить инсталляцию.

Я нарыл такой код, но он у меня никак не проявляет себя:
Код:

[Code]
var
  ResultCode: Integer;
function InitializeSetup(): Boolean;
begin
  // вызов деинсталяции перед установкой
  Exec(ExpandConstant('{uninstallexe}'), '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  Result := True;
end;


habib2302 10-09-2017 02:25 2763849

Доброе время суток. Помогите решить проблему. Указал минимальную версию 0,6.4 (Win 10) в Setup'е, но при запуске выдает ошибку о том, что программа не может быть установлена

habib2302 10-09-2017 02:45 2763850

ErikPshat,
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
AppId=wwwwwwwwwwwwww

[code]

function UninstallMyApp(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
        Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
        if not Result then MsgBox('Удаление завершилось неудачей, бывай!', mbError, MB_OK);
    end;
end;



function InitializeSetup(): Boolean;
begin
    Result := UninstallMyApp();
end;


Nordek 10-09-2017 05:06 2763853

Цитата:

Цитата habib2302
Указал минимальную версию ... (Win 10) »

Скрытый текст
What browser am I using? Is my browser up to date?
What browser am I using?
Mr. Whoer

Windows NT
Код:

Mozilla/5.0 (Windows NT 6.4; Win64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36
Windows 10 (Реальность)
Код:

Mozilla/5.0 (Windows NT 10.0; Win64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36


Цитата:

Цитата habib2302
Указал минимальную версию 0,6.4 (Win 10) »

Windows 10 кривая, определяет и как Windows 8.1 и как Windows 10 уже с MinVersion 6.3, вы же замахнулись аж на MinVersion 6.4.
Указав MinVersion 6.3 - уже будет блокировать Windows 10.

Укажите:
Код:

MinVersion=0,6.2

ErikPshat 10-09-2017 13:37 2763903

habib2302, спасибо! Проверил, отлично работает по умолчанию.

R.i.m.s.k.y. 10-09-2017 19:44 2763959

Цитата:

Цитата Nordek
Windows 10 кривая, определяет и как Windows 8.1 и как Windows 10 уже с MinVersion 6.3, вы же замахнулись аж на MinVersion 6.4.
Указав MinVersion 6.3 - уже будет блокировать Windows 10. »

не согласен
старый инно, манифест давно не обновлялся вот и путает установщик 0,6.3 с Win 10
лично я определяю версию по ntoskrnl.exe
Код:

[CODE]

var
VersionMSntoskrnl, VersionLSntoskrnl: Cardinal;

function InitializeSetup(): Boolean;
begin
GetVersionNumbers(ExpandConstant('{sys}\ntoskrnl.exe'), VersionMSntoskrnl, VersionLSntoskrnl);
end;
...
function IsWin10(): Boolean;
begin
if VersionMSntoskrnl > $60003 then Result := True else Result := False;
end;


Nightwishh 10-09-2017 22:44 2763988

Можете посмотреть правильно ли я прикрути к ISDone новую форму окна отмены установки
Вот код новой формы окна отмены установки
Код:

var
  CancelForm: TSetupForm;
  YesButton: TNewButton;
  NoButton: TNewButton;
  FormClose: Boolean;

procedure CancelFormButtonClick(Sender: TObject);
begin
  case TNewButton(Sender) of
    YesButton: FormClose := True;
    NoButton:  FormClose := False;
  end;
  CancelForm.Close;
end;

function ShowCancelMessage(): Boolean;
begin
  CancelForm := CreateCustomForm();
  try
    with CancelForm do
    begin
      ClientWidth := ScaleX(473);
      ClientHeight := ScaleY(129);
      BorderIcons := [];
      Caption := SetupMessage(msgExitSetupTitle);
      CenterInsideControl(WizardForm, False);
    end;

    with TLabel.Create(CancelForm) do
    begin
      Parent := CancelForm;
      SetBounds(ScaleX(60), ScaleY(10), ScaleX(400), ScaleY(80));
      AutoSize := False;
      Caption := SetupMessage(msgExitSetupMessage);
    end;

    YesButton := TNewButton.Create(CancelForm);
    with YesButton do
    begin
      Parent := CancelForm;
      SetBounds(ScaleX(157), ScaleY(95), ScaleX(75), ScaleY(23));
      OnClick := @CancelFormButtonClick;
      Caption := SetupMessage(msgButtonYes);
    end;

    NoButton := TNewButton.Create(CancelForm);
    with NoButton do
    begin
      Parent := CancelForm;
      SetBounds(ScaleX(241), ScaleY(95), ScaleX(75), ScaleY(23));
      OnClick := @CancelFormButtonClick;
      Caption := SetupMessage(msgButtonNo);
    end;

    CancelForm.ShowModal;
    Result := FormClose;
  finally
    CancelForm.Free;
  end;
end;

ISDone
Код:

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if ShowCancelMessage then ISDoneCancel:=1;
  ResumeProc;
end;


habib2302 12-09-2017 18:19 2764320

Доброе время суток. Как отключить в деинсталляторе диалог с процессбаром оставив msgbox?

habib2302 18-09-2017 15:12 2765318

Доброе время суток. Решил перейти на обычную (не расширенную) версию innosetup. При переходе решил изменить код. Но дело в том, что перестала работать ботва т.е. не отображаются картинки. Помогите решить проблему.
https://yadi.sk/d/Dcs1Az1T3Mz4BM

ZVSRus 19-09-2017 15:25 2765574

habib2302,
Цитата:

Как отключить в деинсталляторе диалог с процессбаром оставив msgbox?
Какой msgbox вы хотите оставить, до (который спрашивает, Вы действительно хотите удалить программу) или после (Который информирует, что программа удалена)?

habib2302 19-09-2017 16:03 2765581

ZVSRus, хочу оставить "Вы действительно хотите удалить программу" и "Программа была полностью удалена"
Хочу удалить (скрыть) вот этот диалог


ZVSRus 19-09-2017 16:40 2765586

habib2302,
Тогда так:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[code]
function InitializeUninstall:boolean;
var
rcode: Integer;
begin
Result:= False;
if not UninstallSilent then begin
Exec(ExpandConstant('{uninstallexe}'), '/VERYSILENT', '', SW_SHOW, ewNoWait, RCode);
Exit;
end;
if MsgBox('Вы действительно хотите удалить программу?', mbConfirmation, MB_YESNO) = IDYES then
Result:= True;
MsgBox('Программа полностью удалена', mbInformation, mb_ok);
end;


vk_k14m@vk 20-09-2017 00:35 2765672

Как запускать дополнительное приложение во время установки?

Допустим идет установка приложения:

адрес_установки/test/test.exe
адрес_установки/test/data/packer.exe
адрес_установки/test/data/00/file01
адрес_установки/test/data/00/file02
адрес_установки/test/data/00/file03
адрес_установки/test/data/00/fileXX
адрес_установки/test/data/01/file01
адрес_установки/test/data/01/file02
адрес_установки/test/data/01/file03
адрес_установки/test/data/01/fileXX

После распаковки этих файлов должна запуститься консоль и запаковать папки "00" и "01" в специальне архив с помощью packer.exe. В консоли это будет выглядеть так:

Код:

packer.exe 00
packer.exe 01

Или пусть это будет *.bat файл, который после установки приложение должен будет удалиться...

После чего консоль закрывается и приложение считается установленным. Как это устроить?

Iska 20-09-2017 00:58 2765675

vk_k14m@vk, что мешает сделать это даже до создания инсталляции? Что мешает «запаковать папки "00" и "01" в специальне архив с помощью packer.exe» на месте и поместить в инсталляцию уже готовый архив?

vk_k14m@vk 20-09-2017 01:04 2765676

Цитата:

Цитата Iska
что мешает сделать это даже до создания инсталляции? Что мешает «запаковать папки "00" и "01" в специальне архив с помощью packer.exe» на месте и поместить в инсталляцию уже готовый архив? »

Предполагается что у устанавливаемого приложения (на самом деле игры) будет на выбор множество взаимозаменяемых компонентов. Все они хранятся в специальных архивах которые можно распаковывать/упаковывать через packer.exe. Тобиш в зависимости от того какие галочки ты выберешь при установке эти архивы могут быть слегка либо совершенно разными. А если эти архивы весят по 300-900 МБайт? Не буду же я раздувать инсталятор кучей архивов с дубликатами файлов.

Вот по этому и нужно раскидать по папками нужные файлы и в конце их запаковать.

Dodakaedr 20-09-2017 08:22 2765686

Цитата:

Цитата habib2302
При переходе решил изменить код. Но дело в том, что перестала работать ботва т.е. не отображаются картинки. Помогите решить проблему. »

В модуле Code_2.iss напишите название секции [Code]

boss911 20-09-2017 08:33 2765689

Цитата:

Цитата vk_k14m@vk
После распаковки этих файлов должна запуститься консоль и запаковать папки "00" и "01" в специальне архив с помощью packer.exe. »

Код:

[Run]
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/data/00; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/data/01; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/data/02; Description: Упаковка файлов...; Flags: waituntilterminated runhidden

И так далее. Флаг runhidden позволит скрыть консольное окно (packer.exe), можно убрать, если не требуется.

habib2302 20-09-2017 11:20 2765708

Dodakaedr, для обычной версии inno setup это ничего не меняет. как не отображались так и не отображаются

Dodakaedr 20-09-2017 13:45 2765725

Цитата:

Цитата habib2302
для обычной версии inno setup это ничего не меняет. как не отображались так и не отображаются »

Тогда создайте кастомную панель с белым цветом, лого конвертируйте в jpg формат с белым фоном.
Типа такого

Код:

  ImgPanel := TPanel.Create(wizardform);
  ImgPanel.parent := wizardform;
  imgpanel.color := clwhite;
  imgpanel.setbounds(370, 3, 55, 55);
  imgpanel.bevelouter := bvNone;
  ........

  lPicHandle := ImgLoad(imgpanel.Handle, ExpandConstant('{tmp}\WMSI.jpg'), ScaleX(0), ScaleY(0), WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(imgpanel.Handle);


vk_k14m@vk 20-09-2017 14:46 2765734

Цитата:

Цитата boss911
И так далее. Флаг runhidden позволит скрыть консольное окно (packer.exe), можно убрать, если не требуется. »

Большое спасибо, это то что надо.

И еще один вопрос. Архивы созданы с помощью packer.exe буду удаляться при удалении приложения?

Ах да, нужно же потом удалить те временные папки после запаковки. Как это сделать?

Iska 20-09-2017 18:01 2765772

Цитата:

Цитата vk_k14m@vk
И еще один вопрос. Архивы созданы с помощью packer.exe буду удаляться при удалении приложения? »

Разумеется нет — ведь этих файлов не было в комплекте поставки.

vk_k14m@vk 20-09-2017 18:17 2765776

Цитата:

Цитата Iska
Разумеется нет — ведь этих файлов не было в комплекте поставки. »

А вручную их прописать нельзя? Например при удалении некоторых игр у меня и сейвы удалялись. Хотя их в установщике не было...

boss911 20-09-2017 18:46 2765783

Цитата:

Цитата vk_k14m@vk
Архивы созданы с помощью packer.exe буду удаляться при удалении приложения? »

Не будут.
А так:
Код:

[UninstallDelete]
Name: {app}\data\*.ext; Type: files

- будут. Только правильно укажите путь и расширение файлов (архивов). В данном случае удалены будут все файлы по указанной вами маске.

Цитата:

Цитата vk_k14m@vk
нужно же потом удалить те временные папки после запаковки. »

На нужных папках, которые прописаны в секции [Files], дописать флаг deleteafterinstall (Flags: deleteafterinstall).

vk_k14m@vk 20-09-2017 18:51 2765786

Цитата:

Цитата boss911
Код:
Код:

[Run]
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/data/00; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/data/01; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/data/02; Description: Упаковка файлов...; Flags: waituntilterminated runhidden

»

Не работает. Просто ничего не происходит. Если убрать флаг runhidden то видно что консоль открывается и тут же пропадает. Хотя она должна несколько секунд упаковывать файлы.

boss911 20-09-2017 19:05 2765787

Цитата:

Цитата vk_k14m@vk
Если убрать флаг runhidden то видно что консоль открывается и тут же пропадает. Хотя она должна несколько секунд упаковывать файлы. »

Значит вы не правильно указали параметры (в 'Parameters') упаковки файлов, тут уж давайте сами разбирайтесь, как работать с "packer.exe". Моя задача была вам показать, как запустить "packer.exe" с параметрами (параметры были предоставлены в вашем примере) после распаковки файлов, судя по вашему ответу, packer.exe запустился, далее дело за вами.

vk_k14m@vk 20-09-2017 19:10 2765788

Цитата:

Цитата boss911
Значит вы не правильно указали параметры (в 'Parameters') упаковки файлов, тут уж давайте сами разбирайтесь, как работать с "packer.exe". Моя задача была вам показать, как запустить "packer.exe" с параметрами (параметры были предоставлены в вашем примере) после распаковки файлов, судя по вашему ответу, packer.exe запустился, далее дело за вами. »

Спасибо, разобрался. Вместо "Parameters: {app}/data/00" достаточно было написать просто "Parameters: 00".

Теперь другой вопрос
Цитата:

Цитата boss911
На нужных папках, которые прописаны в секции [Files], дописать флаг deleteafterinstall (Flags: deleteafterinstall). »

А есть другой способ? Через туже консоль например. Мое приложение после установки будет весить около 33 гигов. Хоть и сказал что папки будут упакованы в архив, но без применения сжатия. Архивы даже немного больше будут весить. И это не изменить.
Тоесть 30 гигов весят папки, +примерно гигов 33 будут весить архивы после запаковки. И всего будет нужно 63 гига просто что б установить приложение. Для экономии места было б удобно удалять папку сразу после того как ее запаковали, а потом преступать к запаковке следующей папки. Так место требуемое для установки сократится в два раза.

Iska 20-09-2017 19:19 2765789

vk_k14m@vk, есть мнение, что Вам с такими объёмами и запросами пора бы уже не просто задавать вопросы, но и самому всерьёз взяться за изучение Pascal scripting.

boss911 20-09-2017 19:24 2765791

Цитата:

Цитата vk_k14m@vk
Для экономии места было б удобно удалять папку сразу после того как ее запаковали, а потом преступать к запаковке следующей папки. Так место требуемое для установки сократится в два раза. »

Код:

[Run]
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/00; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {sys}\CMD.EXE; WorkingDir: {app}/data; Parameters: /C RD /S /Q 00; Description: Упаковка файлов...; Flags: waituntilterminated runhidden

Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/01; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {sys}\CMD.EXE; WorkingDir: {app}/data; Parameters: /C RD /S /Q 01; Description: Упаковка файлов...; Flags: waituntilterminated runhidden

Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/02; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {sys}\CMD.EXE; WorkingDir: {app}/data; Parameters: /C RD /S /Q 02; Description: Упаковка файлов...; Flags: waituntilterminated runhidden

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

vk_k14m@vk 20-09-2017 20:03 2765800

Цитата:

Цитата Iska
есть мнение, что Вам с такими объёмами и запросами пора бы уже не просто задавать вопросы, но и самому всерьёз взяться за изучение Pascal scripting. »

Хорошо когда у человека есть свое мнение. Как только я узнаю что такое Pascal scripting так сразу начну его изучать. Но зачем учить весь язык если тебе нужно только несколько предложений?

Цитата:

Цитата boss911
Код:

[Run]
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/00; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {sys}\CMD.EXE; WorkingDir: {app}/data; Parameters: /C RD /S /Q 00; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/01; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {sys}\CMD.EXE; WorkingDir: {app}/data; Parameters: /C RD /S /Q 01; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {app}/data/packer.exe; WorkingDir: {app}/data; Parameters: {app}/02; Description: Упаковка файлов...; Flags: waituntilterminated runhidden
Filename: {sys}\CMD.EXE; WorkingDir: {app}/data; Parameters: /C RD /S /Q 02; Description: Упаковка файлов...; Flags: waituntilterminated runhidden

И так далее. Удаление папки сразу после ее упаковки осуществляется с помощью командной строки, консольное окно которой так же будет скрыто. »

Большое спасибо добрый человек. Это пожалуй все что мне нужно было знать...

Iska 20-09-2017 20:39 2765806

Цитата:

Цитата vk_k14m@vk
Как только я узнаю что такое Pascal scripting так сразу начну его изучать. »

«Win-R», «hh.exe "mk:@MSITStore:%ProgramFiles%\Inno%20Setup%205\ISetup.chm::/topic_scriptintro.htm"» (или «hh.exe "mk:@MSITStore:%ProgramFiles(x86)%\Inno%20Setup%205\ISetup.chm::/topic_scriptintro.htm"» — если у Вас x64 ОС), «Enter».

vk_k14m@vk 20-09-2017 20:44 2765807

Цитата:

Цитата Iska
«Win-R», «hh.exe "mk:@MSITStore:%ProgramFiles%\Inno%20Setup%205\ISetup.chm::/topic_scriptintro.htm"» (или «hh.exe "mk:@MSITStore:%ProgramFiles(x86)%\Inno%20Setup%205\ISetup.chm::/topic_scriptintro.htm"» — если у Вас x64 ОС), «Enter». »

Обожаю английский язык...

vk_k14m@vk 21-09-2017 23:56 2766054

Вопрос. В секции [Files] важна последовательность?
Например такое выражение:
Код:

[Files]
Source: "D:\Inno Setup\Installer\1 Main Files\test\testapp.exe"; DestDir: "{app}"; Components: main;
Source: "D:\Inno Setup\Installer\2 Addon\test\testapp.exe"; DestDir: "{app}"; Components: addon;

Где "1 Main Files" файл который устанавливается в любом случае. А где "2 Addon" - файл установится если во время установки поставить "галочку".

Последовательность имеет значение? По логике сначала должен установится
D:\Inno Setup\Installer\1 Main Files\test\testapp.exe
а потом его должен заменить
D:\Inno Setup\Installer\2 Addon\test\testapp.exe

Я прав?

mig73 22-09-2017 00:14 2766055

vk_k14m@vk,
Да, влияет на порядок установки. А ещё, группировка однородных файлов повысит коэффициент сжатия при компиляции.

vk_k14m@vk 22-09-2017 00:18 2766056

Цитата:

Цитата mig73
А ещё, группировка однородных файлов повысит коэффициент сжатия при компиляции. »

Ты имеешь в виду файлов с одинаковым расширением, например *.BMP?

Nordek 22-09-2017 03:28 2766072

Цитата:

Цитата vk_k14m@vk
Ты имеешь в виду файлов с одинаковым расширением »

Справку читайте:

Справка » Вкладка Указатель » В поиске вводите: MergeDuplicateFiles

Результат:
Цитата:

Возможные значения: yes или no
Значение по умолчанию: yes

Описание:
По умолчанию одинаковые файлы, указанные несколько раз сжимаются только один раз (без дупликатов). Если в инсталляторе имеется несколько идентичных файлов, в скрипте их следует в один ресурс (source file), это может уменьшить размер инсталлятора. Если вы хотите отключить это отслеживание, укажите значение директивы равным no.


Также могут быть полезными флаги, например:

solidbreak
Если непрерывное сжатие включено, этот флаг указывает компилятору завершить текущий поток сжатия и начать новый перед сжатием файла(ов) соответствующих источнику. Это позволяет программе установки быстро найти файл без необходимости вначале извлекать перед ним все остальные файлы. Может быть полезным в большом, многокомпонентном инсталляторе в том случае, если Вы считаете, что на распаковку файлов тратится слишком много времени, относящихся к компонентам, которые не были выбраны.

nocompression
Запрещает компилятору сжимать файл. Устанавливайте этот флаг для файлов, сжатие которых не принесет пользы (например, изображения в формате JPED) для того, чтобы ускорить процесс компиляции и сохранить несколько байт в полученном инсталляторе.

mig73 22-09-2017 03:59 2766074

vk_k14m@vk,
Цитата:

Ты имеешь в виду файлов с одинаковым расширением
Да, это и имел ввиду. Последовательно расположенные (если возможно) по типам, например сначала исполняемые *.com, *.exe, потом системные и драйверы *.sys, *.drv, а в конце текстовые *.txt, *.inf, *.ini. В WinRAR есть аналогичная последовательность в RarFiles.lst (Порядок сортировки файлов для непрерывных архивов).

Имеется недостаток. Муторно это каждый файлик прописывать, проще и быстрее сразу папкой бахнуть типа Source:"tc9.app\x64\*"; Эффект есть, но не такой чтобы ВАУ.

Iska 22-09-2017 05:25 2766076

mig73, из того, что отчасти может быть существенным для непрерывных архивов WinRAR, вовсе не следует существенность того же механизма для инсталляций InnoSetup.

Вы на какую информацию по InnoSetup опираетесь в данном случае?

mig73 22-09-2017 13:08 2766142

Iska,
Что значит "на какую информацию"?
Когда готовил кошерную сборку Total Commander, то задался вопросом минимизации инсталера, поскольку не люблю тему с хламом и более 50 МБ. Информация есть в справке, а кое-что подбиралось опытным путём.

vk_k14m@vk 22-09-2017 15:57 2766170

Цитата:

Цитата Nordek
Справка » Вкладка Указатель » В поиске вводите: MergeDuplicateFiles »

А если у меня нет дубликатов файлов? Да у меня будут файлы с одинаковым именем и расширением по одному и тому же пути при выборочной установке. Но у них будет разное содержимое. Сомневаюсь что эта опция мне нужна.

Цитата:

Цитата mig73
Да, это и имел ввиду. Последовательно расположенные (если возможно) по типам, например сначала исполняемые *.com, *.exe, потом системные и драйверы *.sys, *.drv, а в конце текстовые *.txt, *.inf, *.ini. »

Я применяю lzma2 сжатие, так что аналогии с WinRAR не нужно. И да, муторно такое делать, особенно когда в установщике много компонентов. Но для сравнения попробую.

Сейчас мое тестовое приложение занимает 12 гигов, установщик 6 гигов. Тоесть сжимает всего на 50%.

mig73 22-09-2017 17:18 2766191

Понимаю, WinRAR просто чтоб пояснить принцип сей кутерьмы. Если хучева куча файлов, то и не заморачивайтесь, профит не особый, но работает. Для проверки можно с десяток разных типов взять и в тестовом режиме создать скрипт. Для максимального сжатия использую такие параметры
Код:

;---compression---
Compression=lzma2/ultra64
InternalCompressLevel=Ultra64
SolidCompression=yes
LZMABlockSize=262144
LZMADictionarySize=312000
LZMAUseSeparateProcess=yes
LZMANumBlockThreads=4
LZMANumFastBytes=273
LZMAMatchFinder=BT
LZMAAlgorithm=1


Iska 22-09-2017 17:46 2766199

Цитата:

Цитата mig73
Информация есть в справке, »

Вы не могли бы сослаться на точное место в справке, где Вы почерпнули эту информацию (я не досконально знаю InnoSetup и не встречал такой информации ранее)?

Цитата:

Цитата mig73
а кое-что подбиралось опытным путём. »

Не могли бы Вы описать этот путь, и каким образом Вы пришли на основании этих опытов к описанным выводам?

Цитата:

Цитата mig73
SolidCompression=yes »

Навряд ли автору стоит сие пользовать: разработчик категорически не рекомендует использовать непрерывный архив для инсталляций объёмом более 100 Mb или состоящих из нескольких частей.

vk_k14m@vk 22-09-2017 17:59 2766204

Цитата:

Цитата Iska
Навряд ли автору стоит сие пользовать: разработчик категорически не рекомендует использовать непрерывный архив для инсталляций объёмом более 100 Mb или состоящих из нескольких частей. »

Читал я про эту опцию, и тоже считаю что она мне не нужна. Тестирую инсталятор пока только с основными файлами. Весят они 12 гигов. Полный вес всех компонентов до запаковки на вскидку может достигнуть и 40 гигабайт.

mig73 22-09-2017 18:53 2766217

Цитата:

Цитата Iska
сослаться на точное место в справке »


Цитата:

Цитата Iska
Не могли бы Вы описать этот путь »

Он прост до безобразия, хоть я и почти лох в Inno Setup и большинства не знаю, но догадался реально проверить эту особенность на инсталляторе собственной сборки ТС, используя в итоге такую секцию
Секция Files

;x64 files
Source:"tc9.app\x64\*"; DestDir:"{app}"; Check: Is64BitInstallMode; BeforeInstall: AddToMemo; Flags:sortfilesbyextension ignoreversion recursesubdirs createallsubdirs overwritereadonly; Components: "x64"
;x86 files
Source:"tc9.app\x86\*"; DestDir:"{app}"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion recursesubdirs createallsubdirs overwritereadonly; Components: "x32"
;Common files
Source:"tc9.app\PLUGINS\*"; DestDir:"{app}\PLUGINS"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source:"tc9.app\Everything\*"; DestDir:"{app}\Everything"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion overwritereadonly
Source:"tc9.app\ARC\*"; DestDir:"{app}\ARC"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion overwritereadonly
Source:"tc9.app\UTILITY\*"; DestDir:"{app}\UTILITY"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source:"tc9.app\*"; DestDir:"{app}"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion overwritereadonly
Source:"tc9.app\Scripts\*"; DestDir:"{app}\Scripts"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source:"tc9.app\ini\*"; DestDir:"{app}\ini"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion overwritereadonly
Source:"tc9.app\LANGUAGE\*"; DestDir:"{app}\LANGUAGE"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion overwritereadonly
Source:"tc9.app\temp\*"; DestDir:"{app}\temp"; BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source:"tc9.app\XP\*"; DestDir:"{app}"; Check: FileExists(ExpandConstant('{sd}\ntldr')); BeforeInstall: AddToMemo; Flags:solidbreak sortfilesbyextension ignoreversion recursesubdirs createallsubdirs overwritereadonly

при немного другой группировке файлов, размер увеличивается на 200 Кб, чего я не желаю :)
Цитата:

Цитата Iska
Навряд ли автору стоит сие пользовать: разработчик категорически не рекомендует »

Возможно, но я никогда не делал таких объёмных инсталляторов и кроме того, не склонен сразу категорически отказываться от возможности, которая кстати всегда работает в моём случае.

Iska 23-09-2017 01:03 2766258

mig73, спасибо, Ваша мысль понятна.

Перевод, конечно, тот ещё. solid compression — уплотнённое сжатие, масло масляное? В текущей версии, кстати, никаких упоминаний про LZMA/BZIP.
Скрытый текст
Цитата:

[Setup]: SolidCompression
Valid values:
yes or no
Default value:
no

Description:
If yes, solid compression will be enabled. This causes all files to be compressed at once instead of separately. This can result a much greater overall compression ratio if your installation contains many files with common content, such as text files, especially if such common content files are grouped together within the [Files] section.

The disadvantage to using solid compression is that because all files are compressed into a single compressed stream, Setup can no longer randomly access the files. This can decrease performance. If a certain file isn't going to be extracted on the user's system, it has to decompress the data for that file anyway (into memory) before it can decompress the next file. And if, for example, there was an error while extracting a particular file and the user clicks Retry, it can't just seek to the beginning of that file's compressed data; since all files are stored in one stream, it has seek to the very beginning. If disk spanning was enabled, the user would have to re-insert disk 1.

Thus, it is not recommended that solid compression be enabled on huge installs (say, over 100 MB) or on disk-spanned installs. It is primarily designed to save download time on smaller installs distributed over the Internet.

В общем, реальная польза может быть в том случае, если используется solid+группировка файлов, похожих по содержимому (расширение же тут постольку-поскольку)+размеры файлов вмещаются в размер окна сжатия. И, действительно, это очень похоже на тот же механизм, что используется в WinRAR.

Цитата:

Цитата Nordek
Также могут быть полезными флаги, например:
solidbreak
Если непрерывное сжатие включено, этот флаг указывает компилятору завершить текущий поток сжатия и начать новый перед сжатием файла(ов) соответствующих источнику. Это позволяет программе установки быстро найти файл без необходимости вначале извлекать перед ним все остальные файлы. Может быть полезным в большом, многокомпонентном инсталляторе в том случае, если Вы считаете, что на распаковку файлов тратится слишком много времени, относящихся к компонентам, которые не были выбраны. »

Кхе-кхе, не знал про данный флаг :(.

Nordek 23-09-2017 05:22 2766281

Цитата:

Цитата Iska
solid compression — уплотнённое сжатие »

Скрытый текст
Цитата:

SolidCompression

Допустимые значения: yes или no

Значение по умолчанию: no

Описание:
Если задано значение yes, то будет задействовано непрерывное сжатие. Это позволит сжать все файлы как один, а не по отдельности.
Такое положение может привести к значительно лучшей степени сжатия, если в инсталляторе содержится много файлов с общим содержимым, например текстовых файлов, особенно если такие общие файлы сгруппированы в секции [Files].
Недостаток непрерывного сжатия заключается в том, что все файлы сжимаются единым потоком, инсталлятор не может беспорядочно обращаться к любому из файлов. Это может снизить производительность.
Если какой-либо файл не был извлечён в системе пользователя, то для того чтоб получить доступ к этому файлу с последующим его извлечением, в любом случае сначала понадобится извлечение остального содержимого (в память). И если например, при извлечении определённого файла произошла ошибка, и пользователь нажал кнопку "Повторить", инсталлятор не сможет обратиться к файлу, так как все файлы сжаты как единый, и придётся произвести повторную попытку снова. Если включено разбиение на диски, пользователю необходимо будет повторно вставить первый диск.
В общем, не рекомендуется применять непрерывное сжатие к большим по размеру инсталляторам (скажем, более 100 МБ) или если используется разбиение на диски. В первую очередь предназначалось для экономии времени при загрузке небольших приложений, распространяемых через Интернет.


Цитата:

Цитата vk_k14m@vk
А если у меня нет дубликатов файлов? »

Последовательность интересует?
Скрытый текст
Последовательность следует сверху вниз.

Например включено в инсталлятор:
Код:

[Files]
Source: C:\WINDOWS\Fonts\*; DestDir: {app}\Fonts; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: C:\WINDOWS\Cursors\*; DestDir: {app}\Cursors; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: C:\WINDOWS\Help\*; DestDir: {app}\Help; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

то извлечение будет производиться сначала Fonts, затем Cursors и наконец Help.

Если:
Код:

[Files]
Source: C:\WINDOWS\Help\*; DestDir: {app}\Help; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\WINDOWS\Fonts\*; DestDir: {app}\Fonts; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\WINDOWS\Cursors\*; DestDir: {app}\Cursors; Flags: ignoreversion recursesubdirs createallsubdirs

- аналогично Help, затем Fonts и наконец Cursors.

Также в таком случае:
Код:

[Files]
Source: MyProg1.exe; DestDir: {app}; Flags: ignoreversion
Source: MyProg2.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\WINDOWS\Help\*; DestDir: {app}\Help; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\WINDOWS\Fonts\*; DestDir: {app}\Fonts; Flags: ignoreversion recursesubdirs createallsubdirs

- сначала MyProg1.exe, затем MyProg2.exe, Help и наконец Fonts.

Аналогично:
Код:

Source: C:\WINDOWS\Fonts\*; DestDir: {app}\Fonts; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\WINDOWS\Help\*; DestDir: {app}\Help; Flags: ignoreversion recursesubdirs createallsubdirs
Source: MyProg2.exe; DestDir: {app}; Flags: ignoreversion
Source: MyProg1.exe; DestDir: {app}; Flags: ignoreversion

- сначала Fonts, затем Help, MyProg2.exe и наконец MyProg1.exe.


Лучшее сжатие интересует?
Скрытый текст
Совместно с SolidCompression используйте флаг sortfilesbyextension

Цитата:

sortfilesbyextension
Этот флаг указывает компилятору сжимать найденные файлы, отсортированные по расширению, прежде чем они будут отсортированы по имени пути. Это уменьшит размер инсталлятора, если используется совместно с директивой "Непрерывное сжатие" (SolidCompression).
Например:
Код:

[Setup]
...
Compression=lzma2/ultra64
SolidCompression=true

[Files]
Source: "C:\WINDOWS\Fonts\*"; DestDir: "{app}\Fonts"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "C:\WINDOWS\Cursors\*"; DestDir: "{app}\Cursors"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension


Также:
Цитата:

sortfilesbyname
Этот флаг указывает компилятору сжимать найденные файлы, отсортированные по имени, прежде чем они будут отсортированы по имени пути. Это уменьшит размер инсталлятора, если используется совместно с директивой "Непрерывное сжатие" (SolidCompression). Если также используется sortfilesbyextension, файлы сначала сортируются по расширению.
Код:

[Setup]
...
Compression=lzma2/ultra64
SolidCompression=true

[Files]
Source: "C:\WINDOWS\Fonts\*"; DestDir: "{app}\Fonts"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname
Source: "C:\WINDOWS\Cursors\*"; DestDir: "{app}\Cursors"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname


Iska 23-09-2017 05:37 2766284

Цитата:

Цитата Nordek
SolidCompression
Допустимые значения: »

Не-не, я, слава богу, технический английский пока ещё понимаю ;).

А вот про это:
Цитата:

Цитата Nordek
Совместно с SolidCompression используйте флаг sortfilesbyextension »

опять не знал. Давно, давно не брал я шашек в руки :(. Как перешёл на msi, так и «забил» на InnoSetup.

vk_k14m@vk 24-09-2017 00:33 2766406

Цитата:

Цитата Nordek
Лучшее сжатие интересует? »

Значит если использовать SolidCompression вместе с флагом sortfilesbyextension то не нужно вручную группировать однотипные файлы? Достаточно выбрать всю папку, и тот флаг сам их отсортирует?
Так же если у меня включены компоненты, например папка "1" устанавливается в любом случае, а папки "2а" и "2b" ставятся на выбор. То к этим трем папкам нужно добавлять флаги "solidbreak". Что б сэкономить время на распаковку "2а" если ее не нужно устанавливать?

Nordek 24-09-2017 01:54 2766416

Цитата:

Цитата vk_k14m@vk
Значит если использовать SolidCompression вместе с флагом sortfilesbyextension то не нужно вручную группировать однотипные файлы? Достаточно выбрать всю папку, и тот флаг сам их отсортирует? »

Да, файлы будут отсортированы автоматически.

Цитата:

Цитата vk_k14m@vk
Так же если у меня включены компоненты, например папка "1" устанавливается в любом случае, а папки "2а" и "2b" ставятся на выбор. То к этим трем папкам нужно добавлять флаги "solidbreak". Что б сэкономить время на распаковку "2а" если ее не нужно устанавливать? »

Имеет смысл добавить флаг solidbreak, но при этом степень сжатия будет чуть хуже.

Iska 24-09-2017 02:19 2766419

Цитата:

Цитата vk_k14m@vk
если у меня включены компоненты, например папка "1" устанавливается в любом случае, а папки "2а" и "2b" ставятся на выбор. То к этим трем папкам нужно добавлять флаги "solidbreak". »

К первой — не надо.

mig73 24-09-2017 03:18 2766423

vk_k14m@vk,
У вас объёмный инсталлятор и совместно с SolidCompression может имеет смысл использовать флаг solidbreak.

sortfilesbyextension тоже использую, но это наверное эффективно не сработает когда в типе файла информация совсем другая. Например в drv, вовсе не бинарник, а текст.

vk_k14m@vk 25-09-2017 06:02 2766659

Народ. У меня проблемы с упаковкой. Inni Setup в секции [Files] игнорирует все дальше второй строчки. Первые две запаковывает остальные пропускает. В чем может быть причина?
Скрытый текст
Код:

; Этот сценарий создан с помощью Мастера Inno Setup.
; ОБРАТИТЕСЬ К СПРАВОЧНОЙ ДОКУМЕНТАЦИИ, ЧТОБЫ ИСПОЛЬЗОВАТЬ ВСЕ ВОЗМОЖНОСТИ INNO SETUP!

#define MyAppName "Artificial Academy 2"
#define MyAppVersion "2.0.1"
#define MyAppPublisher "Illusion"
#define MyAppExeName "AA2Play.exe"

[Setup]
; Примечание: Значение AppId является уникальным идентификатором для этого приложения.
; Не используйте одно и тоже значение AppId для разных приложений.
; (Для создания нового значения GUID, выберите в меню "Инструменты" пункт "Создать GUID".)
AppId={{37EDDB6D-1F9B-474F-8FF4-57CC8277B1A7}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName=D:\Games\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=D:\Inno Setup
OutputBaseFilename=setup
SetupIconFile=D:\Inno Setup\Installer\ico.ico
WizardImageFile=D:\Inno Setup\Installer\WizardImage.bmp
WizardSmallImageFile=D:\Inno Setup\Installer\WizardSmallImage.bmp
Compression=lzma2/ultra64 
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=1536000000

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
Name: "Main";                    Description: "Artificial Academy 2";          Types: full compact custom; Flags: fixed
Name: "Anticensor";              Description: "Антицензор";                    Types: custom
Name: "Anticensor\MKIII";        Description: "МКIII";                          Types: custom;              Flags: exclusive
Name: "Anticensor\MKIII\clothes"; Description: "Пак одежды для MKIII анцензора"; Types: custom;              Flags: exclusive
Name: "Anticensor\SVII";          Description: "SVII";                          Types: custom;              Flags: exclusive 
Name: "Anticensor\SVII\clothes";  Description: "Пак одежды для SVII анцензора";  Types: custom;              Flags: exclusive 
Name: "Hairstyles";              Description: "Дополнительные прически и лица"; Types: custom;               
Name: "Russification";            Description: "Русификатор";                    Types: custom;               

[Files]
Source: "D:\Inno Setup\Installer\1 Main Files\Artificial Academy 2\AA2Play.exe";                    DestDir: "{app}"; Components: Main;                            Flags: ignoreversion sortfilesbyextension
Source: "D:\Inno Setup\Installer\1 Main Files\Artificial Academy 2\*";                              DestDir: "{app}"; Components: Main;                            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "D:\Inno Setup\Installer\2a MKIII files and clothes\Artificial Academy 2*";                  DestDir: "{app}"; Components: Anticensor\MKIII;                Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b SVII files and clothes\Artificial Academy 2*";                  DestDir: "{app}"; Components: Anticensor\SVII;                Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\3 Hairstyles files\Artificial Academy 2*";                          DestDir: "{app}"; Components: Hairstyles;                      Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\Main\Artificial Academy 2*";                DestDir: "{app}"; Components: Main;                            Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\MKIII\Artificial Academy 2*";                DestDir: "{app}"; Components: Anticensor\MKIII;                Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\SVII\Artificial Academy 2*";                DestDir: "{app}"; Components: Anticensor\SVII;                Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\Hairstyles\Artificial Academy 2*";          DestDir: "{app}"; Components: Hairstyles;                      Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\MKIII and Hairstyles\Artificial Academy 2*"; DestDir: "{app}"; Components: Anticensor\MKIII and Hairstyles; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\SVII and Hairstyles\Artificial Academy 2*";  DestDir: "{app}"; Components: Anticensor\SVII and Hairstyles;  Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
; Примечание: Не используйте' флаги "ignoreversion" для общих системных файлов.

[Icons]
Name: "{group}\{#MyAppName}";                      Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}";              Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run] 
Filename: "{app}\data\AA2Decrypt_fix.bat"; WorkingDir: {app}/data; Description: Упаковка папок...; Flags: waituntilterminated

[UninstallDelete]
Name: {app}\data\*.pp; Type: files


Nordek 25-09-2017 08:22 2766669

vk_k14m@vk, Рабочий пример. Можете сходу проверить.
Или удалите ненужные файлы пустышки (*.txt, *.exe) из примера и распределите ваше содержимое по каталогам.

Iska 25-09-2017 08:50 2766674

Меня лично терзают смутные сомнения насчёт возможно пропущенного обратного слэша, начиная как раз после второй строчки:
Цитата:

Код:

[Files]
Source: "D:\Inno Setup\Installer\1 Main Files\Artificial Academy 2\AA2Play.exe";                    DestDir: "{app}"; Components: Main;                            Flags: ignoreversion sortfilesbyextension
Source: "D:\Inno Setup\Installer\1 Main Files\Artificial Academy 2\*";                              DestDir: "{app}"; Components: Main;                            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "D:\Inno Setup\Installer\2a MKIII files and clothes\Artificial Academy 2*";                  DestDir: "{app}"; Components: Anticensor\MKIII;                Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b SVII files and clothes\Artificial Academy 2*";                  DestDir: "{app}"; Components: Anticensor\SVII;                Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak



Nordek 25-09-2017 09:52 2766698

Цитата:

Цитата Iska
насчёт возможно пропущенного обратного слэша »

Если пользователь укажет:
"C:\Folder\App Files*" то компилятор будет рекурсивно включать файлы с именем "App Files" любых расширений, а также войдут все каталоги с подкаталогами которые находились в текущем каталоге. На выходе будут извлечены файлы с таковыми именами. Также на выходе будут созданы каталоги и подкаталоги, но каталоги с подкаталогами будут пустыми.

Если пользователь укажет:
"C:\Folder\App Files\*" то компилятор рекурсивно включит всё содержимое из каталога App Files.

Iska 25-09-2017 10:11 2766702

Nordek, это-то понятно. Я имею в виду: в первой-второй строках указан каталог «Artificial Academy 2», а далее якобы файлы, начинающиеся тоже на «Artificial Academy 2»? Ну, явная же описка!

vk_k14m@vk 25-09-2017 12:04 2766740

Цитата:

Цитата Iska
это-то понятно. Я имею в виду: в первой-второй строках указан каталог «Artificial Academy 2», а далее якобы файлы, начинающиеся тоже на «Artificial Academy 2»? Ну, явная же описка! »

Нет. Проблема как раз в / была. Это не файлы начинающиеся на «Artificial Academy 2». Это папки.
по адресу 1 Main Files\Artificial Academy 2 у меня основные файлы установки. Дальше, моды которые заменяют некоторые основные файлы. По этому я так же назвал их Artificial Academy 2. Это как если бы ты вручную копировал основные файлы, а потом в ту же папку кидал моды с заменой.

Iska 25-09-2017 12:13 2766741

Цитата:

Цитата vk_k14m@vk
Нет. Проблема как раз в / была. Это не файлы начинающиеся на «Artificial Academy 2». Это папки. »

Что значит «нет»? Ну, а я про что?!

P.S. Видимо, мне пора нанимать пресс-секретаря, ибо в очередной раз меня поняли с точностью до наоборот.

Nordek 25-09-2017 17:58 2766835

Цитата:

Цитата Iska
Я имею в виду: в первой-второй строках указан каталог «Artificial Academy 2», а далее якобы файлы, начинающиеся тоже на «Artificial Academy 2»? »

Цитата:

Цитата Iska
Что значит «нет»? Ну, а я про что?! »

Iska, Ты предположил правильно. И я того же мнения:
Цитата:

Цитата Iska
пропущенного обратного слэша »

Обратный слэш действительно был упущен, и "Artificial Academy 2" - это каталог.

Скрытый текст
Единственное что может сбить с толку, это вопрос.
Например при всём этом, так или иначе стоило бы уточнить:
Цитата:

Цитата:

Цитата vk_k14m@vk
У меня проблемы с упаковкой. »

Что значит проблемы с упаковкой?
Т.е дальше компиляция не продолжается?

Цитата:

Цитата vk_k14m@vk
Inni Setup в секции [Files] игнорирует все дальше второй строчки. »

Что значит игнорирует? Останавливается на какой-то ошибке?

Цитата:

Цитата vk_k14m@vk
Первые две запаковывает остальные пропускает. »

Что значит пропускает? Т.е всё-таки компиляция продолжается, но файлы не включаются в инсталлятор?
- т.е "Что происходит?".

Но ведь мы редко уточняем "Что на самом деле происходит?", как ясновидцы сразу предлагаем ответ - От чего зачастую случаются недопонимание, недоразумения, конфликты.
Будь ответ правильным - то вопросов вообще никаких не возникло бы, даже в мыслях не зародились.
Правильно составленный вопрос - это половина ответа.

vk_k14m@vk 26-09-2017 17:11 2767073

Привет народ, снова я. Я вам еще не надоел?
Снова нужен ответ. С помощью секции [Run] можно запустить любое приложение после распаковки всех файлов. А можно ли тоже самое провернуть ДО распаковки?
Суть в чем, если помните моя инсталляция распаковывает "распакованные" файлы, и в конце их запаковывает. И так же установка выборочная. Если кто-то установит "легкую" версию, а потом захочет до-установить что-то. То ему нужно будет полностью удалять приложение и ставить с нуля. Так как инсталляция распакует нужные файлы а в конце снова их запакует чем создаст дубликаты архивов (так уже работает тот пакер).

По этому при повторной установке перед распаковкой нужно запустить файл (батник) который бы снова распаковал установленные ранее архивы. Как это сделать? Это получается что этот батник должен сначала распаковаться, потом прекратить установку остальных файлов, и только после его закрытия распаковка должна продолжиться. И это должно происходить только если программа уже была ранее установлена. Это не слишком сложно сделать?

З.Ы. Кто-то сталкивался с подобными запаковывающими/распаковывающими приложениями которые через консоль работают? Может подскажите какие могут быть аргументы что б приложение не создавало дубликат уже существующего архива, а заменяло его? В описании программы нет вообще никаких данных о работе через консоль. Только "кинуть на него архива для распаковки" и "кинуть папку для запаковки".

R.i.m.s.k.y. 26-09-2017 17:19 2767075

vk_k14m@vk, в справке прочти раздел installation order и Event Functions, ты поймешь что выполнять можно на разных этапах, и задай более осмысленный вопрос, например в какой момент нужно запускать твой батник

Цитата:

Цитата vk_k14m@vk
В описании программы нет вообще никаких данных о работе через консоль »

и правильно, Инно он же не про консоль

vk_k14m@vk 26-09-2017 17:48 2767082

Цитата:

Цитата R.i.m.s.k.y.
в справке прочти раздел installation order и Event Functions, ты поймешь что выполнять можно на разных этапах, и задай более осмысленный вопрос, например в какой момент нужно запускать твой батник »

Почитаю, и вернусь если ничего не пойму)
И я вроде достаточно подробно описал когда этот файл должен запускаться.
1-я установка, этот файл не запускается.
Если приложение УЖЕ установлено и кто-то снова запускает установку. Тот этот файл должен быть извлечен самым первым, и сразу же после извлечения дальнейшее извлечение должно быть приостановлено до завершения работы этого файла. Потом извлечение продолжается.
Вроде все ясно, вот запускаешь ты установщик с уже установленным приложением, листаешь далее далее, выбираешь создавать не создавать ярылки, и потом с нажатием кнопки "установить". сразу извлекается и запускается этот файл, и после завершение этого файла извлечение продолжается в обычном режиме.

Цитата:

Цитата R.i.m.s.k.y.
и правильно, Инно он же не про консоль »

Нет нет, я смотрел описание именно декомпилера которым пользуюсь. Там вообще не написано что он с консолью работает. Вот я и спрашиваю о других подобных командах.Например можно же через CMD.exe создавать, копировать, перемещать файлы? Что будет если создаваемый/копируемый/перемещаемый файл уже существует по указному адресу? Сделается дубликат? Или команда не выполнится? Или заменится?

R.i.m.s.k.y. 26-09-2017 19:53 2767101

Цитата:

Цитата vk_k14m@vk
Вроде все ясно, вот запускаешь ты установщик с уже установленным приложением, листаешь далее далее, выбираешь создавать не создавать ярылки, и потом с нажатием кнопки "установить". сразу извлекается и запускается этот файл, и после завершение этого файла извлечение продолжается в обычном режиме. »

это можно сделать через [Files] BeforeInstall, CurStepChanged, CurPageChanged и NextButtonClick
Я обычно делаю так
Код:

[Files]
Check: Уже_установленное_приложение; Source: сразу_извлекается_и_запускается_этот_файл.exe; DestDir: {tmp}; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs;
...
Source: Твои файлы...


[Code]

procedure install_this_file();
var res:integer; file, path : string;
begin
  file := ExpandConstant('{tmp}\сразу_извлекается_и_запускается_этот_файл.exe'); path := ExpandConstant('{tmp}');
  if FileExists(file) then Exec(file, ' параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл') + ' ' + file + #13#10 + 'не найден'), mbInformation, MB_OK);
end;

Function Уже_установленное_приложение():boolean;
begin
 if это_приложение_уже_установлено then Result := True else Result := False;
end;


vk_k14m@vk 29-09-2017 01:52 2767492

Цитата:

Цитата R.i.m.s.k.y.
Я обычно делаю так »

Вопросик, а в коде все правильно? Меня почему-то немного пугает красный текст в Inno Setup

[code]
procedure install_this_file();
var res:integer; file, path : string;
begin
file := ExpandConstant('{tmp}\AA2Decrypt_unpack.bat'); path := ExpandConstant('{tmp}');
if FileExists(file) then Exec(file, 'параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл') + ' ' + file + #13#10 + 'не найден' ), mbInformation, MB_OK);
end;

Function AA2Decrypt_fix_unpack.bat():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;

А вот когда меняю ' на " то красный текст меняет цвет.

R.i.m.s.k.y. 29-09-2017 07:33 2767502

vk_k14m@vk, это подсветка синтаксиса


Iska 29-09-2017 11:09 2767528

Там, безо всякой подсветки, несогласованность скобок наблюдается невооружённым глазом:
Цитата:

Цитата vk_k14m@vk
else MsgBox('Файл') + ' ' + file + #13#10 + 'не найден' ), mbInformation, MB_OK); »


R.i.m.s.k.y. 29-09-2017 12:05 2767540

да после 'Файл' скобка не нужна
простите напутал при переделке под пост

vk_k14m@vk 30-09-2017 01:02 2767691

Продолжаем викторину "помоги тупому". Вопрос дня - Что я делаю не так...

Скрытый текст
Код:

; Этот сценарий создан с помощью Мастера Inno Setup.
; ОБРАТИТЕСЬ К СПРАВОЧНОЙ ДОКУМЕНТАЦИИ, ЧТОБЫ ИСПОЛЬЗОВАТЬ ВСЕ ВОЗМОЖНОСТИ INNO SETUP!

#define MyAppName "Artificial Academy 2"
#define MyAppVersion "2.0.1"
#define MyAppPublisher "Illusion"
#define MyAppExeName "AA2Play.exe"

[Setup]
; Примечание: Значение AppId является уникальным идентификатором для этого приложения.
; Не используйте одно и тоже значение AppId для разных приложений.
; (Для создания нового значения GUID, выберите в меню "Инструменты" пункт "Создать GUID".)
AppId={{37EDDB6D-1F9B-474F-8FF4-57CC8277B1A7}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName=D:\Games\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=D:\Inno Setup
OutputBaseFilename=setup
SetupIconFile=D:\Inno Setup\Installer\ico.ico
WizardImageFile=D:\Inno Setup\Installer\WizardImage.bmp
WizardSmallImageFile=D:\Inno Setup\Installer\WizardSmallImage.bmp
Compression=lzma2/ultra64 
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=1536000000

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
Name: "Main";                                    Description: "Artificial Academy 2";                  Types: full compact custom; Flags: fixed
Name: "Anticensor";                              Description: "Антицензор";                            Types: custom
Name: "Anticensor\MKIII";                        Description: "МКIII";                                  Types: custom;              Flags: exclusive
Name: "Anticensor\MKIII\clothes";                Description: "Пак одежды для MKIII анцензора";        Types: custom;              Flags: exclusive
Name: "Anticensor\MKIII\clothes\garter_belt";    Description: "Аддон на подвязки";                      Types: custom;
Name: "Anticensor\SVII";                          Description: "SVII";                                  Types: custom;              Flags: exclusive 
Name: "Anticensor\SVII\clothes";                  Description: "Пак одежды для SVII анцензора";          Types: custom;              Flags: exclusive 
Name: "Anticensor\SVII\clothes\texture";          Description: "Пак текстур для одежды";                Types: custom;
Name: "Anticensor\SVII\clothes\extra_a";          Description: "Extra A пак одежды для SVII анцензора";  Types: custom;              Flags: exclusive 
Name: "Anticensor\SVII\clothes\extra_a\texture";  Description: "Пак тестру для одежды Extra A";          Types: custom;              Flags: exclusive 
Name: "Anticensor\SVII\clothes\extra_h5";        Description: "Extra H5 пак одежды для SVII анцензора"; Types: custom;              Flags: exclusive 
Name: "Anticensor\SVII\clothes\extra_h5\texture"; Description: "Пак тестру для одежды Extra H5";        Types: custom;              Flags: exclusive 
Name: "Anticensor\SVII\clothes\garter_belt";      Description: "Аддон на подвязки";                      Types: custom;
Name: "Hairpack";                                Description: "Пак дополнительных причесок";            Types: custom;               
Name: "Override";                                Description: "Пак дополнительных лиц и причесок";      Types: custom;               
Name: "Russification";                            Description: "Русификатор";                            Types: custom;                     
Name: "ProgramFiles";                            Description: "Дополнительные приложения";              Types: custom;             
Name: "ProgramFiles\ReiEditAA2";                  Description: "ReiEditAA2";                            Types: custom;             

[Files]                                                                                                   
Check: AA2Decrypt_unpack;  Source: "D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_unpack.bat";      DestDir: "{tmp}"; BeforeInstall: ChangeCaption('AA2Decrypt_unpack.bat'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\*";                                        DestDir: "{app}"; Components: Main;                                        Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "D:\Inno Setup\Installer\2a [AA2][Uncensor][3D MK-III][FA][v2.0][Various]\Artificial Academy 2*";              DestDir: "{app}"; Components: Anticensor\MKIII;                            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2a1 [AA2][HEXA Clothing Collection][MK-III][v5.2][Various]\Artificial Academy 2*";    DestDir: "{app}"; Components: Anticensor\MKIII\clothes;                    Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2a2 [AA2][HEXACC][Garter Belt][v1.5][Various]\Artificial Academy 2*";                  DestDir: "{app}"; Components: Anticensor\MKIII\clothes\garter_belt;        Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b [AA2][SVII Uncensor][3D Pubes][All-In-One][v1.6]\Artificial Academy 2*";            DestDir: "{app}"; Components: Anticensor\SVII;                            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b1 [AA2][SVII Clothing Collection][3D Pubes][v5.0]\Artificial Academy 2*";            DestDir: "{app}"; Components: Anticensor\SVII\clothes;                    Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b1a SVII Clothing Collection - Texture Pack v5.0\Artificial Academy 2*";              DestDir: "{app}"; Components: Anticensor\SVII\clothes\texture;            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b2 [AA2][SVII Clothing Collection][Extra A][3D Pubes][v1.2.1]\Artificial Academy 2*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\texture;            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b2a SVII Clothing Collection - Extra A - Texture Pack v1.2\Artificial Academy 2*";    DestDir: "{app}"; Components: Anticensor\SVII\clothes\texture;            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b3 [AA2][SVII Clothing Collection][Extra H5][Censored][v1.0]\Artificial Academy 2*";  DestDir: "{app}"; Components: Anticensor\SVII\clothes\texture;            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b3a SVII Clothing Collection - Extra H5 - Texture Pack v1.0\Artificial Academy 2*";  DestDir: "{app}"; Components: Anticensor\SVII\clothes\texture;            Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b4 [AA2][SVII Clothing Collection][Garter Belt][v1.5]\Artificial Academy 2*";        DestDir: "{app}"; Components: Anticensor\SVII\clothes\garter_belt;        Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\3 [AA2][HEXA Hairpack][RE][v3.0][Various]\Artificial Academy 2*";                      DestDir: "{app}"; Components: Hairpack;                                    Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\4 [AA2][HEXA Override Collection][v3.5][Various]\Artificial Academy 2*";              DestDir: "{app}"; Components: Override;                                    Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\ReiEditAA2 0.9.5.3b\Artificial Academy 2*";                                            DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2;                    Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\SVII Clothing Collection - ReiEdit v5.0\Artificial Academy 2*";                        DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2 and Anticensor\SVII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\Artificial Academy 2\*";                                        DestDir: "{app}"; Components: Main;                                        Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
; Примечание: Не используйте' флаги "ignoreversion" для общих системных файлов.

[Сode]
procedure install_this_file();
var res:integer; file, path : string;
begin
  file := ExpandConstant('{tmp}\AA2Decrypt_unpack.bat'); path := ExpandConstant('{tmp}');
  if FileExists(file) then Exec(file, 'параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл' + ' ' + file + #13#10 + 'не найден'), mbInformation, MB_OK);
end;

Function AA2Decrypt_unpack():boolean;
begin
 if это_приложение_уже_установлено then Result := True else Result := False;
end;

[Icons]
Name: "{group}\{#MyAppName}";                      Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}";              Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run] 
Filename: "{app}\data\AA2Decrypt.bat"; WorkingDir: {app}/data; Description: Упаковка папок...; Flags: waituntilterminated

[UninstallDelete]
Name: {app}\data\*.pp; Type: files


Iska 30-09-2017 02:10 2767693

Цитата:

Цитата vk_k14m@vk
Что я делаю не так... »

Не читаете ответы в теме. Там отмечены две некорректные скобки. Одну из них Вы нашли и убрали. Ищите там же отмеченную другую и тоже убирайте.

vk_k14m@vk 30-09-2017 19:25 2767773

Цитата:

Цитата Iska
Там отмечены две некорректные скобки »

Не обратил внимание что две. Нашел исправил. Идем дальше. У меня снова ошибка, на этот раз тут:
if это_приложение_уже_установлено then Result := True else Result := False;
это_приложение_уже_установлено ведь нужно на что-то заменить?

R.i.m.s.k.y. 30-09-2017 19:28 2767774

Цитата:

Цитата vk_k14m@vk
это_приложение_уже_установлено ведь нужно на что-то заменить?»

естественно, на твою проверку уже установленного твоего приложения

pollipen 30-09-2017 21:04 2767779

парни подскажите как сделать что бы одновременно шла установка и показывался splash

vk_k14m@vk 30-09-2017 21:15 2767783

Цитата:

Цитата R.i.m.s.k.y.
естественно, на твою проверку уже установленного твоего приложения »

Значит можно сделать так?
if {#MyAppName} then Result := True else Result := False;

R.i.m.s.k.y. 30-09-2017 21:23 2767784

if ExpandConstant('{#MyAppName}')...

vk_k14m@vk 30-09-2017 22:04 2767787

Цитата:

Цитата R.i.m.s.k.y.
if ExpandConstant('{#MyAppName}')... »

Эх, опять что-то не так
Скрытый текст

R.i.m.s.k.y. 30-09-2017 22:05 2767789

vk_k14m@vk, под if'ом должна быть логическая переменная

vk_k14m@vk 30-09-2017 22:20 2767790

Цитата:

Цитата R.i.m.s.k.y.
под if'ом должна быть логическая переменная »

Наверно мне нужно было сразу сказать что я в Inno Setup чуть больше недели, а про Pascal вообще ничего не знаю. К слову как и про программирование в целом. Так что твой ответ мне ничего не говорит...

Nordek 30-09-2017 22:59 2767795

Цитата:

Цитата pollipen
что бы одновременно шла установка и показывался splash »

Splash:
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

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

[Files]
Source: "splash.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "Files\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Code]
procedure ShowSplashScreen(p1:HWND;p2:Ansistring;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
 
ExtractTemporaryFile('back.bmp');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\back.bmp',1000,3000,1000,0,255,False,$FFFFFF,10);
end;

//                                                                        1    2    3    4 5  6      7
//  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\back.bmp',1000,3000,1000,0,255,False,$FFFFFF,10);
//1 Время появления в мсек
//2 Время показа в мсек
//3 Время затухания
//4 Минимальная прозрачность  (0-255)
//5 Максимальная прозрачность (0-255)
//6 Вырезать цвет (считать вырезанный цвет прозрачным)
//7 Цвет прозрачности - Указание цвета для прозрачности. По умолчанию "Белый цвет (FFFFFF)". Значения считать справа налево, например красный не FF0000 а 0000FF.

Код:

                                                                        1    2    3    4 5  6      7
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\back.bmp',1000,3000,1000,0,255,False,$FFFFFF,10);
1 Время появления в мсек
2 Время показа в мсек
3 Время затухания
4 Минимальная прозрачность  (0-255)
5 Максимальная прозрачность (0-255)
6 Вырезать цвет (считать вырезанный цвет прозрачным)
7 Цвет прозрачности - Указание цвета для прозрачности. По умолчанию "Белый цвет (FFFFFF)". Значения считать справа налево, например красный не FF0000 а 0000FF.

Background:
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: back.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Code]
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin                                                       
 
ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$000000ff);
  ExtractTemporaryFile('back.bmp');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\back.bmp');
end;

//                                                1 2    3  4 5
//  ssInitialize(GetWindowLong(MainForm.Handle,-8),8,True,0,$FF000000);
// 1 Время показа в секундах
// 2 Использование эффекта "Растворение". False - Выкл/True - Вкл
// 3 Метод масштабирования 0 - Не растягивать 1 - Пропорционально 2 - Во весь экран
// 4 Прозрачность полотна
// 5 Цвет полотна

Код:

                                                  1 2    3  4 5
  ssInitialize(GetWindowLong(MainForm.Handle,-8),8,True,0,$FF000000);
1  Время показа в секундах
2  Использование эффекта "Растворение". False - Выкл/True - Вкл
3  Метод масштабирования 0 - Не растягивать 1 - Пропорционально 2 - Во весь экран
4  Прозрачность полотна
5  Цвет полотна


vk_k14m@vk 02-10-2017 17:13 2768003

Ответьте кто нибудь, как работает этот код?
Код:

[Files]
Check: Уже_установленное_приложение; Source: сразу_извлекается_и_запускается_этот_файл.exe; DestDir: {tmp}; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs;
...
Source: Твои файлы...


[Сode]

procedure install_this_file();
var res:integer; file, path : string;
begin
  file := ExpandConstant('{tmp}\сразу_извлекается_и_запускается_этот_файл.exe'); path := ExpandConstant('{tmp}');
  if FileExists(file) then Exec(file, ' параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл' + ' ' + file + #13#10 + 'не найден', mbInformation, MB_OK);
end;

Function Уже_установленное_приложение():boolean;
begin
 if это_приложение_уже_установлено then Result := True else Result := False;
end;

Что на что там заменять?
AppName=Artificial Academy 2
Приложение которое должно запускаться перед началом установки:
D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_unpack.bat

R.i.m.s.k.y. 02-10-2017 21:32 2768073

Цитата:

Цитата vk_k14m@vk
как работает этот код »

замурчательно работает

тебе понятно как работают секции Инно, в частности Files?
если да - продолжаем, если нет - читай справку в частности по ключевым словам что я тебе давал про порядок установки
В ней дисительно расписано нормально

если функция Уже_установленное_приложение возвращает True то строчка с Check: Уже_установленное_приложение;
Код:

Check: Уже_установленное_приложение; Source: сразу_извлекается_и_запускается_этот_файл.exe; DestDir: {tmp}; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs;
выполняется, если если функция Уже_установленное_приложение возвращает False то строчка пропускается

В строке присутствуют процедуры BeforeInstall и AfterInstall
Первая работает перед копированием Source: сразу_извлекается_и_запускается_этот_файл.exe, вторая - после.
После копирования файла Source: сразу_извлекается_и_запускается_этот_файл.exe запускается процедура AfterInstall: install_this_file, которая содержит запуск файла сразу_извлекается_и_запускается_этот_файл.exe из папки DestDir: {tmp}
Отсюда побочный вывод: если копируется не один файл а папка с набором файлов то AfterInstall: нечто будет запускаться после копирования каждого файла из папки что может как минимум затормозить установку и вызвать непредвиденные последствия

____________

Всё что я расписал есть в справке, легко находится по словам Check, BeforeInstall и AfterInstall

vk_k14m@vk 02-10-2017 22:12 2768082

Цитата:

Цитата R.i.m.s.k.y.
если функция Уже_установленное_приложение возвращает True »

А если функция возвращает ошибку??? У меня ошибка в этой строчке. По этому я и спрашиваю как она работает. Как она понимает True или не True? Что они проверяет? К тому же Check: Уже_установленное_приложение не компилируется, похоже он не понимает русские символы.

Так что я переименовал Check: Already_Installed_Application;
Потом, инстеллер компилируется. Но потом когда пытаюсь установить свое приложение, выскакивает ошибка в этой строчке

Function Already_Installed_Application():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;

Приложение вообще не устанавливается.

Значение это_приложение_уже_установлено нужно изменять на свое? Там нужно вписывать название приложение которое устанавливает инсталлер? Когда пишу ExpandConstant('{#MyAppName}') тоже ошибка. Как же заставить его работать...

Цитата:

Цитата R.i.m.s.k.y.
BeforeInstall »

Все что тут делает BeforeInstal так это меняет сообщение при установке
BeforeInstall: ChangeCaption('Установка этого файла')
Так что он в этом случае бесполезен.

Iska 03-10-2017 00:05 2768110

Цитата:

Цитата R.i.m.s.k.y.
тебе понятно как работают секции Инно, в частности Files? »

R.i.m.s.k.y., конечно, не понимает. В принципе не понимает, что нужно делать. Коллега vk_k14m@vk банально пытается компилировать представленную ему ранее болванку скрипта и кода как есть. Изучать справку и язык не хочет/не может.


vk_k14m@vk, загрузите себе перевод, поблагодарите коллегу mig73 за выложенное и читайте, читайте, читайте.

vk_k14m@vk 03-10-2017 01:07 2768120

Все работает, просто убрал проблемные строчки

Function Already_Installed_Application():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;

и пошло как по маслу. Правда теперь то приложение при любой установке запускается. Зато лишней мороки с кодом нет...

R.i.m.s.k.y. 03-10-2017 07:42 2768143

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

Цитата:

Цитата vk_k14m@vk
Все работает, просто убрал проблемные строчки »

и проверки теперь нет

ZVSRus 03-10-2017 13:58 2768197

Цитата:

Цитата vk_k14m@vk
Правда теперь то приложение при любой установке запускается. Зато лишней мороки с кодом нет...

А какие приложения подразумеваются, и какая требуется проверка, на запуск или на установку, или на то и другое?

R.i.m.s.k.y. 03-10-2017 14:31 2768203

Цитата:

Цитата ZVSRus
А какие приложения подразумеваются, и какая требуется проверка, на запуск или на установку, или на то и другое? »

изначально желалось
Цитата:

Цитата vk_k14m@vk
Привет народ, снова я. Я вам еще не надоел?
Снова нужен ответ. С помощью секции [Run] можно запустить любое приложение после распаковки всех файлов. А можно ли тоже самое провернуть ДО распаковки?
Суть в чем, если помните моя инсталляция распаковывает "распакованные" файлы, и в конце их запаковывает. И так же установка выборочная. Если кто-то установит "легкую" версию, а потом захочет до-установить что-то. То ему нужно будет полностью удалять приложение и ставить с нуля. Так как инсталляция распакует нужные файлы а в конце снова их запакует чем создаст дубликаты архивов (так уже работает тот пакер).
По этому при повторной установке перед распаковкой нужно запустить файл (батник) который бы снова распаковал установленные ранее архивы. Как это сделать? Это получается что этот батник должен сначала распаковаться, потом прекратить установку остальных файлов, и только после его закрытия распаковка должна продолжиться. И это должно происходить только если программа уже была ранее установлена. Это не слишком сложно сделать?
З.Ы. Кто-то сталкивался с подобными запаковывающими/распаковывающими приложениями которые через консоль работают? Может подскажите какие могут быть аргументы что б приложение не создавало дубликат уже существующего архива, а заменяло его? В описании программы нет вообще никаких данных о работе через консоль. Только "кинуть на него архива для распаковки" и "кинуть папку для запаковки". »

но не шмоглось
как ни советовали

ZVSRus 03-10-2017 14:53 2768207

R.i.m.s.k.y. Извиняюсь, с чего началась тема подзабыл.
"распакованные" файлы, запакованные файлы, батник, консоль. Только "кинуть на него архива для распаковки" и "кинуть папку для запаковки" - Тяжело сразу понять данное ассорти. Я понимаю это игра. Мне подумалось что одни файлы нужно распаковать через один чекбокс, другие через другой чекбокс, сделать проверку на данные чекбоксы, ну и на запуск установленного исполняемого файла.
Такие темы нужно более детально расписывать.

R.i.m.s.k.y. 03-10-2017 15:08 2768210

ZVSRus, уот энто уот фсио на энтой странице
я пыталсо F1 но не алё

vk_k14m@vk 03-10-2017 16:43 2768222

Цитата:

Цитата ZVSRus
Извиняюсь, с чего началась тема подзабыл.
"распакованные" файлы, запакованные файлы, батник, консоль. Только "кинуть на него архива для распаковки" и "кинуть папку для запаковки" - Тяжело сразу понять данное ассорти. Я понимаю это игра. Мне подумалось что одни файлы нужно распаковать через один чекбокс, другие через другой чекбокс, сделать проверку на данные чекбоксы, ну и на запуск установленного исполняемого файла.
Такие темы нужно более детально расписывать. »

С чего все началось. Есть игра. Она хранит свои файлы в архивах *.рр. Есть выборочная установка которая должна на выбор ставить разные файлы в этих архивах. Архивы довольно много весит, и запаковывать каждый вариант одного архива дорого в плане места. По этому я принял решение "запаковывать распакованные" *.рр архивы, а потом, в конце установки все их запаковывать через *.bat файл.

Так установка прекрасно работает. Но если кто-то установил чистый вариант игры, а потом решит что-то добавить? Тот батник уже не будет правильно работать, и придется полностью удалять игру и ставить заново. По этому нужен второй батник, который перед началом установки будет делать обратное действие - распаковывать эти *.рр архивы что б их можно было дополнить, и опять в конце установки запаковать.

Сначала я хотел что б этот второй батник запускался только в том случае, если эта игра уже была установлена и установщик запускают второй раз. Но не сложилось. Остановился на том что он всегда будет запускаться. И если файлов для распаковки нет, то он работает в холостую...

ZVSRus 03-10-2017 18:11 2768232

vk_k14m@vk
Это полный пи....! Набор ахинейских фраз и предложений. Вы хоть понимаете что вам на 3 страницы писанины никто не может ответить, потому что никто толком не может вас понять до конца. На 213 странице где ваш скрип, это каша, Check: AA2Decrypt_unpack; чековая проверка пишется в конце строки (я вставляю данную проверку перед флагами). В секции [Files]
все строки должны начинаться с Source: (во всяком случае чековую проверку в начале строки никогда не встречал). У вас есть чековая функция Function AA2Decrypt_unpack():boolean;, а где сам чекбокс, или что у вас там, я нигде не нашел то, на что ссылается данная проверка.
Artificial Academy 2* это так и должно быть, или все же между двойкой и звездочкой должна стоять наклонная черта.
Source: "D:\Inno Setup\Installer\2a [AA2][Uncensor][3D MK-III][FA][v2.0][Various]\Artificial Academy 2*"; - почти все строки так.
Я понял только одно: У вас 2 батника, один распаковывается во временную папку и от туда через код запускается. DestDir: "{tmp}";
Source: "D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_unpack.bat"; DestDir: "{tmp}"; BeforeInstall: ChangeCaption('AA2Decrypt_unpack.bat'); AfterInstall: install_this_file; Check: AA2Decrypt_unpack;
Второй батник в конце установки через секцию [Run] что то упаковывает. Все остальные папки что в секции [Files] через те или иные компоненты что в секции [Components] устанавливаются в директорию DefaultDirName=D:\Games\{#MyAppName}. Теперь вопрос, что нужно запускать или устанавливать через чекбокс или через что другое?
Объясните подробно но кратко, своими простыми словами.

vk_k14m@vk 03-10-2017 18:53 2768242

ZVSRus, как раз это

Function Уже_установленное_приложение():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;

я удалил. По тому что оно не работает. И нет объяснений как оно должно работать. А между двойкой и звездочкой должна стоять наклонная черта. Но я их специально по убирал что б протестировать работу установщика, и не ждать 8 часов пока все запакуется.

Check: у меня в начале по тому что я скопировал ее из этого поста.
Цитата:

Цитата R.i.m.s.k.y.
это можно сделать через [Files] BeforeInstall, CurStepChanged, CurPageChanged и NextButtonClick
Я обычно делаю так

Код:

[Files]
Check: Уже_установленное_приложение; Source: сразу_извлекается_и_запускается_этот_файл.exe; DestDir: {tmp}; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs;
...
Source: Твои файлы...
[Сode]
procedure install_this_file();
var res:integer; file, path : string;
begin
 file := ExpandConstant('{tmp}\сразу_извлекается_и_запускается_этот_файл.exe'); path := ExpandConstant('{tmp}');
 if FileExists(file) then Exec(file, ' параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл') + ' ' + file + #13#10 + 'не найден'), mbInformation, MB_OK);
end;
Function Уже_установленное_приложение():boolean;
begin
 if это_приложение_уже_установлено then Result := True else Result := False;
end;

»

И как можно заметить, там Check: в начале.

Сейчас у меня все выглядит так:
Скрытый текст
; Этот сценарий создан с помощью Мастера Inno Setup.
; ОБРАТИТЕСЬ К СПРАВОЧНОЙ ДОКУМЕНТАЦИИ, ЧТОБЫ ИСПОЛЬЗОВАТЬ ВСЕ ВОЗМОЖНОСТИ INNO SETUP!

#define MyAppName "Artificial Academy 2"
#define MyAppVersion "2.0.1"
#define MyAppPublisher "Illusion"
#define MyAppExeName "AA2Play.exe"

[Setup]
; Примечание: Значение AppId является уникальным идентификатором для этого приложения.
; Не используйте одно и тоже значение AppId для разных приложений.
; (Для создания нового значения GUID, выберите в меню "Инструменты" пункт "Создать GUID".)
AppId={{37EDDB6D-1F9B-474F-8FF4-57CC8277B1A7}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName=D:\Games\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=D:\Inno Setup
OutputBaseFilename=setup
SetupIconFile=D:\Inno Setup\Installer\ico.ico
WizardImageFile=D:\Inno Setup\Installer\WizardImage.bmp
WizardSmallImageFile=D:\Inno Setup\Installer\WizardSmallImage.bmp
Compression=lzma2/ultra64
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=1536000000

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
Name: "Main"; Description: "Artificial Academy 2"; Types: full compact custom; Flags: fixed
Name: "Anticensor"; Description: "Антицензор"; Types: custom
Name: "Anticensor\MKIII"; Description: "МКIII"; Types: custom; Flags: exclusive
Name: "Anticensor\MKIII\clothes"; Description: "Пак одежды для MKIII анцензора"; Types: custom; Flags: exclusive
Name: "Anticensor\MKIII\clothes\garter_belt"; Description: "Аддон на подвязки"; Types: custom;
Name: "Anticensor\SVII"; Description: "SVII"; Types: custom; Flags: exclusive
Name: "Anticensor\SVII\clothes"; Description: "Пак одежды для SVII анцензора"; Types: custom; Flags: exclusive
Name: "Anticensor\SVII\clothes\texture"; Description: "Пак текстур для одежды"; Types: custom;
Name: "Anticensor\SVII\clothes\extra_a"; Description: "Extra A пак одежды для SVII анцензора"; Types: custom;
Name: "Anticensor\SVII\clothes\extra_a\texture"; Description: "Пак тестур для одежды Extra A"; Types: custom;
Name: "Anticensor\SVII\clothes\extra_h5"; Description: "Extra H5 пак одежды для SVII анцензора"; Types: custom;
Name: "Anticensor\SVII\clothes\extra_h5\texture"; Description: "Пак тестур для одежды Extra H5"; Types: custom;
Name: "Anticensor\SVII\clothes\garter_belt"; Description: "Аддон на подвязки"; Types: custom;
Name: "Hairpack"; Description: "Пак дополнительных причесок"; Types: custom;
Name: "Override"; Description: "Пак дополнительных лиц и причесок"; Types: custom;
Name: "Russification"; Description: "Русификатор"; Types: custom;
Name: "Russification\Hlimitation_yes"; Description: "Ограничение H-сцен"; Types: custom; Flags: exclusive
Name: "Russification\Hlimitation_no"; Description: "Без аграничения"; Types: custom; Flags: exclusive
Name: "ProgramFiles"; Description: "Дополнительные приложения"; Types: custom;
Name: "ProgramFiles\AA2Install"; Description: "AA2Install"; Types: custom;
Name: "ProgramFiles\ReiEditAA2"; Description: "ReiEditAA2"; Types: custom;
Name: "ProgramFiles\AA2Face"; Description: "AA2Face"; Types: custom;

[Files]
Source: "D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_unpack.bat"; DestDir: "{app}"; BeforeInstall: ChangeCaption('Установка этого файла'); AfterInstall: install_this_file; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\*"; DestDir: "{app}"; Components: Main; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "D:\Inno Setup\Installer\2a [AA2][Uncensor][3D MK-III][FA][v2.0][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2a1 [AA2][HEXA Clothing Collection][MK-III][v5.2][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII\clothes; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2a2 [AA2][HEXACC][Garter Belt][v1.5][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII\clothes\garter_belt; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b [AA2][SVII Uncensor][3D Pubes][All-In-One][v1.6]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b1 [AA2][SVII Clothing Collection][3D Pubes][v5.0]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b1a SVII Clothing Collection - Texture Pack v5.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\texture; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b2 [AA2][SVII Clothing Collection][Extra A][3D Pubes][v1.2.1]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_a; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b2a SVII Clothing Collection - Extra A - Texture Pack v1.2\Artificial Academy \2*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_a\texture; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b3 [AA2][SVII Clothing Collection][Extra H5][Uncensored][v1.0]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_h5; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b3a SVII Clothing Collection - Extra H5 - Texture Pack v1.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_h5\texture; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\2b4 [AA2][SVII Clothing Collection][Garter Belt][v1.5]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\garter_belt; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\3 [AA2][HEXA Hairpack][RE][v3.0][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Hairpack; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\4 [AA2][HEXA Override Collection][v3.5][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Override; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5a [AA2][Interface][Russian user interface v.1][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5b [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5ba [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor\MKIII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5bb [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor\SVII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5bxa [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification\Hlimitation_yes and Anticensor; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5bxb [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification\Himitation_no and Anticensor; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\AA2Install v7 b3.1\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\AA2Install; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\ReiEditAA2 0.9.5.3b\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\SVII Clothing Collection - ReiEdit v5.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2 and Anticensor\SVII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\HEXA Override Collection - ReiEdit\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2 and Override; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\AA2Face 1.4.2\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\AA2Face; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\0 Delete after install\Artificial Academy 2\*"; DestDir: "{app}"; Components: Main; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
; Примечание: Не используйте' флаги "ignoreversion" для общих системных файлов.

[code]
procedure install_this_file();
var res:integer; file, path : string;
begin
file := ExpandConstant('{app}\AA2Decrypt_unpack.bat'); path := ExpandConstant('{app}');
if FileExists(file) then Exec(file, 'параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл' + ' ' + file + #13#10 + 'не найден', mbInformation, MB_OK);
end;

procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\data\AA2Decrypt.bat"; WorkingDir: {app}/data; Description: Упаковка папок...; Flags: waituntilterminated

[UninstallDelete]
Name: {app}\data\*.pp; Type: files

AA2Decrypt.bat - должен всегда запускаться после распаковки всех файлов.
AA2Decrypt_unpack.bat - хотелось бы что б запускался только при повторной установке. Тоесть я установил приложение. А потом снова запускаю установщик, и в самом начале извлекается и запускается самый первый файл из списка - AA2Decrypt_unpack.bat. Пока он работает дальнейшее извлечение файлов не идет. И только когда этот батник закрывается, установка (извлечение) продолжится в обычном режиме. Это я уже все подробно расписывал...

R.i.m.s.k.y. 03-10-2017 20:28 2768274

Цитата:

Цитата vk_k14m@vk
И нет объяснений как оно должно работать »

ничоси!
а это что?

vk_k14m@vk 03-10-2017 20:40 2768281

Цитата:

Цитата R.i.m.s.k.y.
ничоси!
а это что? »

Функции с именем Уже_установленное_приложение быть не может. InnoSetup ругается на букву У. Так что твой код уже не правильный.

R.i.m.s.k.y. 03-10-2017 21:08 2768297

Цитата:

Цитата vk_k14m@vk
Функции с именем Уже_установленное_приложение быть не может. »

молодец, половину логической цепочки догадался, вторая половина - подставить собственное название и собственную проверку вместо это_приложение_уже_установлено
Скрытый текст
ну ясен-красен что это пример с аллегорией

ZVSRus 03-10-2017 21:15 2768303

vk_k14m@vk
Загляни в личку.

R.i.m.s.k.y.
Извиняюсь, но вы тоже не правы, человеку нужно готовое решение.
Вы же видите что ему в не догадку поменять это_приложение_уже_установлено например на if AA2Decrypt_unpack then Result := True else Result := False;, придет время и он будет подсказывать.

R.i.m.s.k.y. 03-10-2017 21:38 2768308

Цитата:

Цитата ZVSRus
Вы же видите что ему в не догадку поменять »

я тоже сначала так думал пока vk_k14m@vk не поменял на AA2Decrypt_unpack
хотя наверное я слишком многого ждал

vk_k14m@vk 03-10-2017 22:22 2768316

Цитата:

Цитата ZVSRus
Вы же видите что ему в не догадку поменять »

Я бы поменял оба значения, если бы они были одинаковыми.

Function Уже_установленное_приложение():boolean;
begin
if это_приложение_уже_установлено then Result := True else Result := False;
end;

Я ж думал что Уже_установленное_приложение и это_приложение_уже_установлено должны называться по разному. Я даже думал что это_приложение_уже_установлено нужно заменить на название игры которую устанавливается.

Хватит об этой теме уже. Я надеялся что мне принесут все готовое, но сильно губу раскатал. С кем не бывает. Есть еще пара других вопросов. Я уже практически закончил свой установщик и скоро от вас отстану)

1) Для игры есть две версии русификатора, v1 для "чистой" игры, и v5 для игры с антицензором. И так же для v5 есть еще маленькая опция которой нет в v1.

И вот эта опция (ограничение/без ограничений) должна быть неактивна если не поставить галочку на антицензор.
Код:

[Components]
Name: "Main";                          Description: "Artificial Academy 2"; Types: Main Main_Ru MKIII SVII custom;
Name: "Anticensor";                    Description: "Антицензор";          Types: custom
Name: "Russification";                Description: "Русификатор";          Types: Main_Ru custom;                     
Name: "Russification\Hlimitation_yes"; Description: "Ограничение H-сцен";  Types: MKIII SVII custom;              Flags: exclusive                   
Name: "Russification\Hlimitation_no";  Description: "Без аграничения";      Types: custom;                        Flags: exclusive

Можно ли это как-то устроить?

2) Вернемся к версии русификатора в секции [Files] добавлены две папки, в одной лежат файлы от v1 во второй от v5.
Код:

Source: "D:\Inno Setup\Installer\5a [AA2][Interface][Russian user interface v.1][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification;                Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5b [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak

И вот v1 не должна устанавливаться если был выбран компонент "Anticensor". Хотел сделать Components: Russification not Anticensor; но так не работает.
З.Ы. То как я написал во второй строчке Components: Russification and Anticensor; это верно? Сам InnoSetup ошибку не показывал.

3) Опять влияние компонентов но уже на ярлыки. Нужно что б при выборе компонентов Russification и Anticensor менялся главный исполняемый файл игры. Тоесть менялся файл на который будут ссылаться созданные ярлыки. По умолчанию исполняемый файл {app}\AA2Play.exe, а с этими компонентами им должен стать {app}\illusion_locale_loader.exe.
Опять же спрашиваю, можно ли такое осуществить...

4) Если пункт 3 можно сделать, то можно ли будет добавить к создаваемому ярлыку аргументы? А если конкретнее
"...\illusion locale loader.exe" /MKIII - если был выбран компонент Anticensor\MKIII и
"...\illusion locale loader.exe" /CVII - если был выбран компонент Anticensor\SVII

Скрытый текст


5) Снова ярлыки. Можно изменить иконку ярлыка?

6) Последнее. У меня почему-то при запуске установщика сразу открывается страница с выбором пути установки игры. Насколько я помню сначала должна открываться страница на которой слева отображается изображение WizardImageFile. У меня почему то это пропускается...
Скрытый текст

ZVSRus 03-10-2017 22:51 2768321

Цитата:

Цитата vk_k14m@vk
Последнее. У меня почему-то при запуске установщика сразу открывается страница с выбором пути установки игры.

У вас наверное версия INNO одна из последних.
[Setup]
DisableWelcomePage=no
В последних версиях страница приветствия по умолчанию отключена.

Цитата:

И вот эта опция (ограничение/без ограничений) должна быть неактивна если не поставить галочку на антицензор.
Эти компоненты надо объединить
Name: "Anticensor\Russification";
Name: "Anticensor\Russification\Hlimitation_yes";
Name: "Anticensor\Russification\Hlimitation_no";
как то так

vk_k14m@vk 03-10-2017 23:03 2768322

Цитата:

Цитата ZVSRus
У вас наверное версия INNO одна из последних.
[Setup]
DisableWelcomePage=no
В последних версиях страница приветствия по умолчанию отключена. »

5.5.8 у меня версия. Спасибо за ответ, теперь появилась)

Цитата:

Цитата ZVSRus
Эти компоненты надо объединить
Name: "Anticensor\Russification";
Name: "Anticensor\Russification\Hlimitation_yes";
Name: "Anticensor\Russification\Hlimitation_no";
как то так »

Это не подходит. Ведь есть версия Русификатор которую можно поставить и без антицензора. Нужно что-то другое...

ZVSRus 03-10-2017 23:15 2768323

vk_k14m@vk
В первом коде и во втором вы противоречите себе

И вот эта опция (ограничение/без ограничений) должна быть неактивна если не поставить галочку на антицензор.

И вот v1 не должна устанавливаться если был выбран компонент "Anticensor".

Эти две строки противоречат друг другу

vk_k14m@vk 03-10-2017 23:21 2768326

Цитата:

Цитата ZVSRus
В первом коде и во втором вы противоречите себе
И вот эта опция (ограничение/без ограничений) должна быть неактивна если не поставить галочку на антицензор.
И вот v1 не должна устанавливаться если был выбран компонент "Anticensor".
Эти две строки противоречат друг другу »

Именно. Есть же два русификатора, один для антицензора другой для чистой игры. Вот и получается что если антицензор выбран, то должен ставится русификатор для него, а русификатор под чистую игру не должен ставится. Так же русификатор для чистой игры не имеет опций, и если будет выбрана одна из них (ограничение/без ограничений) то она либо поломает игру, либо не будет работать.

ZVSRus 04-10-2017 09:46 2768362

vk_k14m@vk
[Components]
Name: "Anticensor\Russification"; Description: "Русификатор"; Types: custom;
Name: "Anticensor\Russification\Hlimitation_yes"; Description: "Ограничение H-сцен"; Types: custom; Flags: exclusive
Name: "Anticensor\Russification\Hlimitation_no"; Description: "Без аграничения"; Types: custom; Flags: exclusive

[Files]
Source: "ru.png"; DestDir: "{app}"; Components: Anticensor\Russification\Hlimitation_yes; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "en.png"; DestDir: "{app}"; Components: Anticensor\Russification\Hlimitation_no; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak

А так тоже не пойдет?
PS: Вы это делаете для себя, или для всех?

El Sanchez 04-10-2017 15:23 2768413

Цитата:

Цитата vk_k14m@vk
А между двойкой и звездочкой должна стоять наклонная черта. Но я их специально по убирал что б протестировать работу установщика, и не ждать 8 часов пока все запакуется. »

vk_k14m@vk, ну и пакуйте для тестов несколько небольших pp-файлов и оставьте один компонент к ним относящийся, в [Setup] выставить Compression=none и вперед.
Цитата:

Цитата vk_k14m@vk
Сейчас у меня все выглядит так:
AA2Decrypt_unpack.bat - хотелось бы что б запускался только при повторной установке.
»

vk_k14m@vk, плохо все будет. Что при первой, что при повторной установках. Откройте консоль (Пуск - Выполнить - сmd), скопировать выделенное dir "D:\Inno Setup\Installer" /ad /s/b>"D:\Inno Setup\Installer\files.txt", вставить в консоли (ПКМ - Вставить), нажать Enter, полученный файл files.txt из D:\Inno Setup\Installer выкладываете сюда (прикрепить к сообщению).

vk_k14m@vk 04-10-2017 16:55 2768432

Цитата:

Цитата ZVSRus
А так тоже не пойдет? »

Это тоже самое. Говорю же, есть два русификатора. Первый можно ставить и без антицензора. Значит какой смысл запихивать русификатор под антицензор? Таким образом русификатор только для антицензора можно будет поставить.

Цитата:

Цитата ZVSRus
PS: Вы это делаете для себя, или для всех? »

Парился бы я так. Для себя я бы сразу всю игра запаковал без этой возни с компонентами.

Неужели никак нельзя это устроить? Может дополнительные страницы создать, и на них некоторые компоненты выбирать. Например на главной странице оставить антицензор и русификатор, а вторая страница будет открываться только если на антицензоре и русификаторе поставили галочки, и уже на второй странице выбирать опцию ограничение/без ограничений.

Цитата:

Цитата El Sanchez
в [Setup] выставить Compression=none и вперед. »

65 гигов для теста. Дорогое удовольствие

Цитата:

Цитата El Sanchez
плохо все будет. Что при первой, что при повторной установках. Откройте консоль (Пуск - Выполнить - сmd), скопировать выделенное dir "D:\Inno Setup\Installer" /ad /s/b>"D:\Inno Setup\Installer\files.txt", вставить в консоли (ПКМ - Вставить), нажать Enter, полученный файл files.txt из D:\Inno Setup\Installer выкладываете сюда (прикрепить к сообщению). »

Это ты меня просишь список папок показать? Ладно держи. К слову в *.рр архивы будут запакованы все папки которые начинаются на data\jg2...
З.Ы. Ваш файл объемом 117.2 Kb превышает предел в 97.7 Kb, установленный на форуме для этого типа файлов.

R.i.m.s.k.y. 04-10-2017 17:00 2768434

Цитата:

Цитата vk_k14m@vk
Дорогое удовольствие »

даже если
Цитата:

Цитата El Sanchez
ну и пакуйте для тестов несколько небольших pp-файлов »

?

Цитата:

Цитата vk_k14m@vk
Неужели никак нельзя это устроить? »

всё можно если осторожно
я вот уже вторую страницу не могу догнать краями чего всё-таки нужно сделать

распиши по пунктам
0. Установщик состоит из компонентов: ...
0.1 каждому компоненту соответствует папка ...
1. если программа не установлена
1.1 берем это файло
1.2 кладем сюда
1.3 запускаем это
2 если программа установлена
2.1 кладем это файло сюда
2.2 запускаем это
2.3 копируем остальное файло туда

даже лучше блоксхему нарисуй что в каких случаях ставится/запускается/распаковывается/закукоживается
самому проще будет

и это, я наверное первый буду, а каков критерий определения наличия уже установленной проги? это отсылка к
Цитата:

Цитата vk_k14m@vk
if это_приложение_уже_установлено »


vk_k14m@vk 04-10-2017 17:27 2768440

R.i.m.s.k.y., уже матом хочется сказать. Как ты узнаешь установлен у тебя на компе например Microsoft Visual C++ 2015 года. Если он уже установлен и ты снова попытаешься его установить, установщик скажет тебе что он уже установлен? Или как нивчем не бывало продолжит установку? Если ты поставил на комп игру Doom. А потом случайно снова запустил установщик. Ну забыл ты что игра у тебя уже есть, склероз старческий. Тебе игра предложит установиться в тоже самое место, где она уже стоит. Откуда она это знает? Может она в реестре прописываеться? Что б потом через программы и компоненты ее можно было удалить. Или как то иначе?

Как все должно работать, в очередной раз тебе объясняю. Ты первый раз запустил установщик. Установщик проверяет есть ли такая игры на ПК, или еще нету. Если нету. то файл AA2Decrypt_unpack.bat не должен запускаться перед установкой.
Если ты запускаешь установщик n-раз. Он проверяет установлена ли на компе эта игра или нет. Если игра установлена, то файл AA2Decrypt_unpack.bat запускается сразу после распаковки.
Все. Это ж элементарно. Не нужно быть гением что б это понять.

И вообще. Я же сказал закрыть эту тему. Если она для вас настолько сложная, не нужно в нее вникать. Просто забудь.

ZVSRus 04-10-2017 17:35 2768441

Цитата:

Цитата R.i.m.s.k.y.
даже лучше блоксхему нарисуй что в каких случаях ставится/запускается/распаковывается/закукоживается

Супер! Я ЗА. 4 страница подходит к концу, результат нулевой. Видимо данному товарищу нужно на пальцах показывать или за спиной стоять.

Цитата:

Цитата vk_k14m@vk
Это ты меня просишь список папок показать? Ладно держи.

То что в текстовом файле, это список папок? или же и файлов?

vk_k14m@vk 04-10-2017 17:42 2768443

R.i.m.s.k.y., еще раз тебе расскажу как все работает.
Вот смотри, внизу список которые распаковывает установщик. В каждой такой папке лежит 10-400 файлов. После их распаковки, в самом конце запускается файл AA2Decrypt.bat который запаковывает каждую эту папку в *.рр архив, а саму папку удаляет.
Код:

D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e00_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e01_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e01_00_HEXAOC_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e01_00_HEXAOC_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e01_00_HEXAOC_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_00_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_00_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_00_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_00_04
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_00_05
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_00_HEXA
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_00_HEXAOC
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_01_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_01_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_01_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_01_HEXA
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_01_HEXAOC
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_02_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_02_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_02_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_02_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_02_04
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_02_05
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_02_HEXA
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_02_HEXAOC
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_03_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_03_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_03_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_03_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_03_HEXA
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e02_03_HEXAOC
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e03_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e04_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e05_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e05_00_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e05_00_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e05_00_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e06_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2e07_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_00_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_00_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_00_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_00_04
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_00_05
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_00_HEXA
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_00_HEXAOC
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_01_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_01_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_01_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_01_HEXA
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_01_HEXAOC
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_02_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_02_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_02_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_02_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_02_04
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_02_05
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_02_HEXA
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_02_HEXAOC
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_03_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_03_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_03_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_03_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_03_HEXA
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_03_HEXAOC
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p00_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p00_00_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p00_00_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p00_00_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p00_00_04
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_03
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_D
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_E
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_F
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_G
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_H
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_I
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_J
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_K
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_L
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_M
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_O
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_P
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_Q
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_R
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_S
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_T
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_HEXA_U
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_D
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_E
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_EXTRA_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_F
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_G
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_H
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_H5_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_H5_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_H5_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_I
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_J
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_K
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_L
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_M
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_O
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_P
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p01_00_SVII_X
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_D
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_E
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_F
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_G
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_H
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_I
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_J
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_K
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_L
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_M
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_O
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_P
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_Q
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_R
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_S
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_T
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_HEXA_U
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_D
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_E
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_EXTRA_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_F
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_G
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_H
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_H5_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_H5_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_H5_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_I
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_J
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_K
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_L
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_M
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_O
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_P
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p03_00_SVII_X
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_02
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_D
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_E
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_F
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_G
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_H
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_I
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_J
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_K
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_L
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_M
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_O
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_P
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_Q
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_R
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_S
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_T
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_HEXA_U
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_D
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_E
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_EXTRA_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_F
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_G
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_H
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_H5_A
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_H5_B
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_H5_C
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_I
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_J
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_K
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_L
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_M
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_O
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p04_00_SVII_P
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a01_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a02_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a03_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a04_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a05_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a06_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a07_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a08_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a09_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a10_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a11_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a12_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a13_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a14_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a15_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a16_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a17_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a18_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a19_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a20_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a21_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a22_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_a23_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_s00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_s01_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_s02_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_s03_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_s04_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p05_s05_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p06_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p07_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p07_00_01
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p08_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_00_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_01_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_02_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_03_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_04_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_05_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_06_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_07_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_08_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_09_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_10_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_11_00
D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2p09_12_00

А теперь представь что кто-то установил чистую игру, без дополнительных компонентов. А потом решил что-то добавить? Ему придется удалять игру полностью и устанавливать с нуля. По тому что AA2Decrypt.bat не умеет изменять уже запакованные архивы. Им можно либо полностью запаковать либо полностью распаковать. Если попробовать установить игру снова, то снова распакуются те папки сверху. И AA2Decrypt.bat снова их запакует, но получатся дубликаты например jg2e00_00_00.pp и jg2e00_00_00.bak0.pp. По тому что так работает AA2Decrypt_fix.exe который запускает AA2Decrypt.bat.

Вот и получается, что при повторной установке, что б все работало как надо. Все *.рр архивы нужно снова сделать папки, а сами архивы удалить. Это и делает AA2Decrypt_unpack.bat.

Цитата:

Цитата ZVSRus
То что в текстовом файле, это список папок? или же и файлов? »

В видишь в конце каждого пути раширение? Например D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\data\jg2el02_03_00.txt? Нет? Так может это папки? К чему вообще спрашивать если сам мне команду написал...

vk_k14m@vk 04-10-2017 18:03 2768448

ZVSRus, вот держи список папок вместе с файлами
https://www.dropbox.com/s/rv4l5b0tdm...s_new.txt?dl=0
Но для этого я немного другую команду прописывал.
dir "D:\Inno Setup\Installer" /ad /s /a /b /-p /o:gen >"D:\Inno Setup\files.txt"

ZVSRus 04-10-2017 18:39 2768451

Цитата:

Цитата vk_k14m@vk
В видишь в конце каждого пути расширения?

Вот по этому и спросил, что расширения не вижу, вдруг забыл? 1151 папка это круто!

Цитата:

R.i.m.s.k.y., уже матом хочется сказать. Как ты узнаешь установлен у тебя на компе например Microsoft Visual C++ 2015 года. Если он уже установлен и ты снова попытаешься его установить, установщик скажет тебе что он уже установлен?
А что вы обижаетесь, как вы задаете вопросы, так вам и отвечают. Как проверить что установлено, элементарно, даже средствами INNO. Если в секции [Setup] поставить директиву DirExistsWarning=yes тогда установщик при повторной установке будет видеть путь установки что прописан в директиве DefaultDirName=C:\Games\{#MyAppName}, если по данному пути что установлено, установщик предложит вам продолжить установку или отказаться. Вот от этого и нужно было изначально плясать.
Не много стал понимать что к чему. Если ошибусь поправите.
Если при повторной установке установщик увидит что программа установлена, запустится батник на упаковку всего содержимого, а папки, файлы начнет удалять? Так (это называется сделать бекап)
Только я не понимаю одного, для чего делать бекап на 65 гигов? Предполагаю что 65 гигов будут бекапится не один час.
А не проще сделать так, при повторной установке снести за пару минут предыдущую установку, и установить снова с чистого листа.
Оба батника будут уже не нужны.

vk_k14m@vk 04-10-2017 19:01 2768454

Цитата:

Цитата ZVSRus
Если ошибусь поправите.
Если при повторной установке установщик увидит что программа установлена, запустится батник на упаковку всего содержимого, а папки, файлы начнет удалять? Так (это называется сделать бекап)»

Нет. Вы ошиблись. Этот батник РАСПАКОВЫВАЕТ и удаляет *.рр архивы, что б их содержимое можно было изменить. Потом установщик заменяет/дополняет распакованные папки, а в конце снова запаковывает обратно.

Цитата:

Цитата ZVSRus
Оба батника будут уже не нужны. »

Батник который запускается в конце установки будет по прежнему нужен. Я же рассказывал. Компоненты. При выборе разных компонентов содержимое *.рр архивов будет меняется. Если взять архив размером 500 Мбайт. +при выборе разных компонентов этот архив будет менятся раза 4. То это уже 2500 Мбайт. При этот во всех вариантах этого архива некоторые файлы будут одинаковыми. Так зачем запаковывать готовые архивы. Зачем мне раздувать размер установщика? К тому же эти архивы практически не сжимаются. 65 гигов весят все компоненты игры, которые все вместе не смогут быть установлены. Если я начну запаковывать архивы, то размер может увеличится раз в 5.

ZVSRus 04-10-2017 19:11 2768457

vk_k14m@vk
Ну и последний вопрос, вы подумали о конечном пользователе!
То что у вас прописано в секции [Components] вам нужно писать руководство, что, куда, и зачем, думаю конечный пользователь заплутается в данном частоколе. Ну да ладно. Удачи!

vk_k14m@vk 04-10-2017 19:16 2768459

Цитата:

Цитата ZVSRus
Ну и последний вопрос, вы подумали о конечном пользователе!
То что у вас прописано в секции [Components] вам нужно писать руководство, что, куда, и зачем, думаю конечный пользователь заплутается в данном частоколе. Ну да ладно. Удачи! »

В раздаче на торренте будет все прописано.

R.i.m.s.k.y. 04-10-2017 20:13 2768469

Цитата:

Цитата vk_k14m@vk
Как ты узнаешь установлен у тебя на компе например Microsoft Visual C++ 2015 года »

Код:

[code]
const
  INSTALLSTATE_DEFAULT = 5;

#ifdef UNICODE
  #define A "W"
 #else
  #define A "A"
#endif

function MsiQueryProductState(szProduct: String): Integer;
external 'MsiQueryProductState{#A}@msi.dll stdcall';

function IsMsiProductInstall(ProductCode: String): Boolean;
begin
  Result := MsiQueryProductState(ProductCode) = INSTALLSTATE_DEFAULT;
end;

//к примеру определяем установлен ли Microsoft Visual C++ 2010  x86 Redistributable, ProductCode которого {196BB40D-1578-3D01-B289-BEFC77A11A1E}
procedure InitializeWizard();
begin
  if IsMsiProductInstall('{196BB40D-1578-3D01-B289-BEFC77A11A1E}') then
    MsgBox('vcredist 2010 installed for current user', mbInformation, MB_OK)
  else
    MsgBox('vcredist 2010 not installed', mbInformation, MB_OK);
end;

ProductCode можно посмотреть в msi-документе с помощью Orca (таблица Property, свойство ProductCode)
Более того, ProductCode индивидуален мало того что для каждого языка Microsoft Visual C++ 2015, так еще и для каждой его ревизии, получается целый паровоз вариантов

Цитата:

Цитата vk_k14m@vk
Если он уже установлен и ты снова попытаешься его установить, установщик скажет тебе что он уже установлен? Или как нивчем не бывало продолжит установку? »

это зависит от прописанной реакции на установленный экземпляр проги, иногда и версии установленного приходится кейсить

Цитата:

Цитата vk_k14m@vk
Если ты поставил на комп игру Doom. А потом случайно снова запустил установщик. Ну забыл ты что игра у тебя уже есть, склероз старческий. Тебе игра предложит установиться в тоже самое место, где она уже стоит. Откуда она это знает? »

плохой вариант по HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\GUID|AppName_is1
Хороший по ключу реестра, характерного для приложения, и наличия экзешника, например вот так определяется наличие проги и её версии
Код:

Function isSVPexist():boolean;
var moreOrEqual : boolean; s : string; VersionMS, VersionLS : cardinal;
begin
  RegQueryStringValue(HKCU, 'Software\SVP','Path', s);
  s := RemoveQuotes(s); s := RemoveBackslashUnlessRoot(s);
  if (FileExists(s+'\SVPMgr.exe')) then begin
    GetVersionNumbers(s+'\SVPMgr.exe', VersionMS, VersionLS);
    moreOrEqual:=true;
    if (VersionMS<$30000) then moreOrEqual:=false else begin
      if ( (VersionMS=$30000) and (VersionLS<$FA) ) then moreOrEqual:=false
    end;
    Result := moreOrEqual;
  end //(FileExists(s+'\SVPMgr.exe'))
  else Result := False;
end;

Цитата:

Цитата ZVSRus
А что вы обижаетесь, как вы задаете вопросы, так вам и отвечают. Как проверить что установлено, элементарно, даже средствами INNO. Если в секции [Setup] поставить директиву DirExistsWarning=yes тогда установщик при повторной установке будет видеть путь установки что прописан в директиве DefaultDirName=C:\Games\{#MyAppName}, если по данному пути что установлено, установщик предложит вам продолжить установку или отказаться. Вот от этого и нужно было изначально плясать. »

это плохой вариант
установщик тупо посмотрит в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1 и если его нет поведет себя как будто проги нет в системе, а если ее ставили с другого установщика у которого другой GUID или {#MyAppName}?
Спорный способ

Цитата:

Цитата vk_k14m@vk
И вообще. Я же сказал закрыть эту тему. Если она для вас настолько сложная, не нужно в нее вникать. Просто забудь. »

как скажешь

vk_k14m@vk 04-10-2017 20:21 2768472

R.i.m.s.k.y., забей уже. Меня вполне устраивает то что я сейчас имею. Не надо мне эти ваши сложные коды. Мне совсем немного осталось доделать...
Цитата:

Цитата vk_k14m@vk
Я уже практически закончил свой установщик и скоро от вас отстану)
1) Для игры есть две версии русификатора, v1 для "чистой" игры, и v5 для игры с антицензором. И так же для v5 есть еще маленькая опция которой нет в v1.

И вот эта опция (ограничение/без ограничений) должна быть неактивна если не поставить галочку на антицензор.
Код:

[Components]
Name: "Main"; Description: "Artificial Academy 2"; Types: Main Main_Ru MKIII SVII custom;
Name: "Anticensor"; Description: "Антицензор"; Types: custom
Name: "Russification"; Description: "Русификатор"; Types: Main_Ru custom;
Name: "Russification\Hlimitation_yes"; Description: "Ограничение H-сцен"; Types: MKIII SVII custom; Flags: exclusive
Name: "Russification\Hlimitation_no"; Description: "Без аграничения"; Types: custom; Flags: exclusive

Можно ли это как-то устроить?

2) Вернемся к версии русификатора в секции [Files] добавлены две папки, в одной лежат файлы от v1 во второй от v5.
Код:

Source: "D:\Inno Setup\Installer\5a [AA2][Interface][Russian user interface v.1][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\5b [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak

И вот v1 не должна устанавливаться если был выбран компонент "Anticensor". Хотел сделать Components: Russification not Anticensor; но так не работает.
З.Ы. То как я написал во второй строчке Components: Russification and Anticensor; это верно? Сам InnoSetup ошибку не показывал.»


ZVSRus 04-10-2017 20:57 2768482

Цитата:

Цитата vk_k14m@vk
5) Снова ярлыки. Можно изменить иконку ярлыка?

[Icons]
Name: "{group}\{#MyAppName} Help"; Filename: "{app}\{#MyAppHelpName}"; IconFilename: "{app}\Help.ico";

nik1967 04-10-2017 21:20 2768490

vk_k14m@vk,
3)
4)
Код:

[Components]
Name: Russification; Description: Russification; Flags: exclusive 
Name: Anticensor; Description: Anticensor; Flags: exclusive
Name: Anticensor\MKIII; Description: MKIII; Flags: exclusive
Name: Anticensor\SVII; Description: SVII; Flags: exclusive

[Icons]
Name: {userdesktop}\Название игры; Components: Russification; Filename: {app}\AA2Play.exe; Workingdir: {app}
Name: {userdesktop}\Название игры; Components: Anticensor\MKIII; Filename: {app}\illusion_locale_loader.exe; Parameters: "/MKIII"; Workingdir: {app}
Name: {userdesktop}\Название игры; Components: Anticensor\SVII; Filename: {app}\illusion_locale_loader.exe; Parameters: "/SVII"; Workingdir: {app}

Ну как-то так.

El Sanchez 04-10-2017 21:43 2768497

Цитата:

Цитата vk_k14m@vk
65 гигов для теста. Дорогое удовольствие »

vk_k14m@vk, мне для тестов хватило 23 Кб.
Цитата:

Цитата vk_k14m@vk
Это ты меня просишь список папок показать? Ладно держи. »

vk_k14m@vk, угу, папок, а пришел список файлов. Ну да ладно.
Цитата:

Цитата vk_k14m@vk
К слову в *.рр архивы будут запакованы все папки которые начинаются на data\jg2... »

vk_k14m@vk, я прекрасно понимаю чего вам нужно и как оно работает. В общем, AA2Decrypt_fix.exe перенесите в папку 0 Delete after install, все остальное в ней не нужно:
Скрытый текст

Код:

[Components]
Name: "Main"; Description: "Artificial Academy 2"; Types: full compact custom; Flags: fixed
Name: "Anticensor"; Description: "Антицензор"; Types: full custom
Name: "Anticensor\MKIII"; Description: "МКIII"; Types: full custom; Flags: exclusive
Name: "Anticensor\MKIII\clothes"; Description: "Пак одежды для MKIII анцензора"; Types: full custom; Flags: exclusive
Name: "Anticensor\MKIII\clothes\garter_belt"; Description: "Аддон на подвязки"; Types: full custom;
Name: "Anticensor\SVII"; Description: "SVII"; Types: full custom; Flags: exclusive
Name: "Anticensor\SVII\clothes"; Description: "Пак одежды для SVII анцензора"; Types: full custom; Flags: exclusive
Name: "Anticensor\SVII\clothes\texture"; Description: "Пак текстур для одежды"; Types: full custom;
Name: "Anticensor\SVII\clothes\extra_a"; Description: "Extra A пак одежды для SVII анцензора"; Types: full custom
Name: "Anticensor\SVII\clothes\extra_a\texture"; Description: "Пак текстур для одежды Extra A"; Types: full custom
Name: "Anticensor\SVII\clothes\extra_h5"; Description: "Extra H5 пак одежды для SVII анцензора"; Types: full custom
Name: "Anticensor\SVII\clothes\extra_h5\texture"; Description: "Пак текстур для одежды Extra H5"; Types: full custom
Name: "Anticensor\SVII\clothes\garter_belt"; Description: "Аддон на подвязки"; Types: full custom
Name: "Hairpack"; Description: "Пак дополнительных причесок"; Types: full custom
Name: "Override"; Description: "Пак дополнительных лиц и причесок"; Types: full custom
Name: "Russification"; Description: "Русификатор"; Types: full custom
Name: "Russification\Hlimitation_yes"; Description: "Ограничение H-сцен"; Types: full custom; Flags: exclusive
Name: "Russification\Hlimitation_no"; Description: "Без ограничения"; Types: full custom; Flags: exclusive
Name: "ProgramFiles"; Description: "Дополнительные приложения"; Types: full custom
Name: "ProgramFiles\AA2Install"; Description: "AA2Install"; Types: full custom
Name: "ProgramFiles\ReiEditAA2"; Description: "ReiEditAA2"; Types: full custom
Name: "ProgramFiles\AA2Face"; Description: "AA2Face"; Types: full custom

[Files]
Source: "D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_fix.exe"; DestDir: {tmp}; Flags: deleteafterinstall

Source: "D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2\*"; DestDir: "{app}"; Components: Main; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

Source: "D:\Inno Setup\Installer\2a [AA2][Uncensor][3D MK-III][FA][v2.0][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2a1 [AA2][HEXA Clothing Collection][MK-III][v5.2][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII\clothes; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2a2 [AA2][HEXACC][Garter Belt][v1.5][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\MKIII\clothes\garter_belt; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2b [AA2][SVII Uncensor][3D Pubes][All-In-One][v1.6]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2b1 [AA2][SVII Clothing Collection][3D Pubes][v5.0]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2b1a SVII Clothing Collection - Texture Pack v5.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\texture; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2b2 [AA2][SVII Clothing Collection][Extra A][3D Pubes][v1.2.1]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_a; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2b2a SVII Clothing Collection - Extra A - Texture Pack v1.2\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_a\texture; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2b3 [AA2][SVII Clothing Collection][Extra H5][Uncensored][v1.0]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_h5; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2b3a SVII Clothing Collection - Extra H5 - Texture Pack v1.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\extra_h5\texture; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\2b4 [AA2][SVII Clothing Collection][Garter Belt][v1.5]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Anticensor\SVII\clothes\garter_belt; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\3 [AA2][HEXA Hairpack][RE][v3.0][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Hairpack; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\4 [AA2][HEXA Override Collection][v3.5][Various]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Override; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\5a [AA2][Interface][Russian user interface v.1][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\5b [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\5ba [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor\MKIII; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\5bb [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification and Anticensor\SVII; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\5bxa [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification\Hlimitation_yes and Anticensor; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly
Source: "D:\Inno Setup\Installer\5bxb [AA2][Interface][Russian user interface v.5][AVA]\Artificial Academy 2\*"; DestDir: "{app}"; Components: Russification\Hlimitation_no and Anticensor; Attribs: readonly; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak overwritereadonly

Source: "D:\Inno Setup\Installer\AA2Install v7 b3.1\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\AA2Install; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\ReiEditAA2 0.9.5.3b\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\SVII Clothing Collection - ReiEdit v5.0\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2 and Anticensor\SVII; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\HEXA Override Collection - ReiEdit\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\ReiEditAA2 and Override; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak
Source: "D:\Inno Setup\Installer\AA2Face 1.4.2\Artificial Academy 2\*"; DestDir: "{app}"; Components: ProgramFiles\AA2Face; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension solidbreak

[Run]
Filename: {cmd}; Parameters: "/c for /d %? in (jg2*) do ""{tmp}\AA2Decrypt_fix.exe"" ""%?.pp"""; WorkingDir: {app}\data; StatusMsg: "Распаковка pp-файлов"; Components: Anticensor Hairpack Override Russification; Flags: runhidden
Filename: {cmd}; Parameters: "/c for /d %? in (jg2*) do attrib -r ""%?\*"" /s"; WorkingDir: {app}\data; StatusMsg: "Снятие атрибута R c файлов"; Components: Anticensor Hairpack Override Russification; Flags: runhidden
Filename: {cmd}; Parameters: "/c for /d %? in (jg2*) do del /f /q ""%?.pp"""; WorkingDir: {app}\data; StatusMsg: "Удаление pp-файлов"; Components: Anticensor Hairpack Override Russification; Flags: runhidden
Filename: {cmd}; Parameters: "/c for /d %? in (jg2*) do ""{tmp}\AA2Decrypt_fix.exe"" ""%?"""; WorkingDir: {app}\data; StatusMsg: "Перепаковка pp-файлов"; Components: Anticensor Hairpack Override Russification; Flags: runhidden
Filename: {cmd}; Parameters: "/c for /d %? in (jg2*) do rd /s /q ""%?"""; WorkingDir: {app}\data; StatusMsg: "Удаление временных файлов"; Components: Anticensor Hairpack Override Russification; Flags: runhidden


vk_k14m@vk 04-10-2017 21:45 2768499

Цитата:

Цитата ZVSRus
[Icons]
Name: "{group}\{#MyAppName} Help"; Filename: "{app}\{#MyAppHelpName}"; IconFilename: "{app}\Help.ico"; »

А может иконкой быть *.ехе файл?

El Sanchez, а можно поподробнее что в вашем коде? Особенно секция [Run] интересует. Вы сделали тоже самое что у меня делали *.bat файлы только через консоль самого InnoSetup? Без всплывающего окна CMD? Хм. А что в этот момент будет отображаться в установщике? Просто текст Распаковка pp-файлов/Снятие атрибута R c файлов/Удаление pp-файлов/Перепаковка pp-файлов/Удаление временных файлов? Без % и прогресс бара?

Допустим *.рр файлы весят 30 гигов. Первая строчка распакует все *.рр архивы если они есть, это уже 30+30=60 гигов. В *.рр архивах файлы не то что без сжатия, они даже немного больше весить будут. Снятие атрибутов не знаю что такое. Потом удаления *.рр архивов. 60-30 снова 30 гигов. Понимаете к чему я виду? Для этой перепаковки нужно иметь на ПК в два раза больше места чем весит игра (эти *.рр файлы занимают 90% веса игры).

Мой батник распаковывает не сразу все архивы. А по очереди. Распаковал 1, удалил, распаковал второй, удалил второй. Тоесть требует для работы около 10% от общего веса игры. 30 +10% =33 гига. Плюс в самом батнике у меня отображаются % выполнения. Криво правда, % считаются не от общей проделанной работы, а от количества архивов. Например всего 100 архивов, распаковано 50, и отображается 50%. Несмотря на то что 1 архив может 20 секунд распаковываться, а другой больше минуты.

В общем я конечно благодарен за старания. Но боюсь этот вариант мне не подходит.

Iska 04-10-2017 22:01 2768508

Цитата:

Цитата vk_k14m@vk
А может иконкой быть *.ехе файл? »

Исполняемый файл «иконкой» быть не может по определению. Если же понимать вопрос как «можно ли указать в качестве значка для создаваемого ярлыка значок, содержащийся в ресурсах исполняемого файла» — то да, можно. Об этом написано там, где Вы никак не хотите читать ни на английском, ни на русском. Для этого используется два параметра — «IconFilename» и «IconIndex».

El Sanchez 05-10-2017 10:25 2768563

Цитата:

Цитата vk_k14m@vk
а можно поподробнее что в вашем коде? Особенно секция [Run] интересует. »

vk_k14m@vk, признаком того, что pp-архивы нужно перепаковать, является наличие папок с именами этих pp-архивов в data. Это выбранные компоненты (и их дочки) Anticensor, Hairpack, Override, Russification. AA2Decrypt_fix.exe при работе с pp-архивом распаковывает его содержимое в папку с именем архива, но перед распаковкой такие папки уже существуют и нужно защитить их содержимое от перезаписи. Для этого в секции [Files] компонентам, отвечающим за установку папок вида jg2* в data, добавлена директива Attribs со значением readonly. Файлы защищены, можно распаковывать pp-архивы, дальше атрибут с файлов в папках jg2* убирается, старые pp-архивы удаляются, папки пакуются в новые pp-архивы. Построчно:
1. for /d %? in (jg2*) do ""{tmp}\AA2Decrypt_fix.exe"" ""%?.pp""" - pp-архивы, если есть папка с таким же именем, что и у архива, передаются утилите AA2Decrypt_fix.exe на распаковку.
2. for /d %? in (jg2*) do attrib -r ""%?\*"" /s - в папках jg2* у файлов снимается ранее установленный атрибут readonly
3. for /d %? in (jg2*) do del /f /q ""%?.pp"" - удаляются pp-архивы, если есть папка с таким же именем, что и у архива.
4. for /d %? in (jg2*) do ""{tmp}\AA2Decrypt_fix.exe"" ""%?"" - папки jg2* пакуются, на выходе pp-архивы.
5. for /d %? in (jg2*) do rd /s /q ""%?"" - папки jg2* удаляются.
Цитата:

Цитата vk_k14m@vk
Первая строчка распакует все *.рр архивы если они есть, это уже 30+30=60 гигов. Понимаете к чему я виду? »

vk_k14m@vk, понимаю, что не все архивы, как вы говорите, а лишь некоторые, затрагиваемые компонентами, но согласен, удаление надо проводить не после обработки всех необходимых архивов. Можете Run так написать, так архивы по очереди обрабатываться будут:
Код:

[Run]
Filename: {cmd}; Parameters: "/c for /d %? in (jg2*) do ""{tmp}\AA2Decrypt_fix.exe"" ""%?.pp""&attrib -r ""%?\*"" /s&del /f /q ""%?.pp""&""{tmp}\AA2Decrypt_fix.exe"" ""%?""&rd /s /q ""%?"""; WorkingDir: {app}\data; StatusMsg: "Перепаковка pp-файлов"; Components: Anticensor Hairpack Override Russification; Flags: runhidden

Цитата:

Цитата vk_k14m@vk
Без % и прогресс бара? »

vk_k14m@vk, ага, только и консоль на экране не вариант, можно и закрыть ненароком, а ручки чешутся, когда операция долгая.

vk_k14m@vk 05-10-2017 17:58 2768650

Цитата:

Цитата El Sanchez
ага, только и консоль на экране не вариант, можно и закрыть ненароком, а ручки чешутся, когда операция долгая. »

Ну как говорится это уже не мои проблемы. Я помню когда то давно купил диск, сборник игр HL2 +1-2 епизод. Там тоже в конце установки запускалась консоль и что-то делала. Первый раз я ее закрыл. И в результате игра оказалась без звуков. Второй раз уже до конца дождался. Я же в свой батник специально добавил %, что б хоть примерно знать когда это все закончится. В резултате установка на моем компе занимала около часа.

К слову, если бы люди все те компоненты ставили вручную. То времени на установку они потратили бы гораздо больше.

vk_k14m@vk 06-10-2017 16:43 2768759

Итак народ. Еще вопросик. Нужно что б мой установщик вносил в реестр такие изменения.
Код:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\illusion]

[HKEY_CURRENT_USER\Software\illusion\AA2Edit]
"INSTALLDIR"="D:\\Inno Setup\\test\\Artificial Academy 2"

[HKEY_CURRENT_USER\Software\illusion\AA2Play]
"INSTALLDIR"="D:\\Inno Setup\\test\\Artificial Academy 2"

Где "D:\\Inno Setup\\test\\Artificial Academy 2" - путь куда устанавливается приложение.

Почитав справку я набрал это
Код:

[Registry]
Root: HKCU; Subkey: "Software\illusion";        Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\illusion\AA2Play"; ValueType: string; ValueName: "INSTALLDIR"; ValueData: "{app}"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\illusion\AA2Edit"; ValueType: string; ValueName: "INSTALLDIR"; ValueData: "{app}"; Flags: uninsdeletekey

Это правильно? Или я опять что-то напартачил?

Nordek 06-10-2017 16:54 2768761

Цитата:

Цитата vk_k14m@vk
Это правильно? »

Правильно.

vk_k14m@vk 09-10-2017 16:07 2769396

Как добавить компонентам описание, при наведении на них курсор мыши? В Inno Setup help нашел нечто подобное.

Inno Setup Faq. Как добавить описание к компонентам в ComponentsList?
Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
ComponentsListTVStyle=true

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

[CustomMessages]
russian.ComponentsName1=Моя программа™
russian.ComponentsName2=Помощь
russian.ComponentsName2_1=Документация
russian.ComponentsName2_2=Руководство пользователя
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
russian.ComponentsDescription1=Устанавливается обязательно
russian.ComponentsDescription2=Помощь
russian.ComponentsDescription3=Прочитать документацию
russian.ComponentsDescription4=Прочитать руководство пользователя

[Components]
Name: readme; Description: Справка; Types: full custom;
Name: readme\en; Description: "Английская "; Types: full custom; Flags: fixed
Name: readme\ru; Description: Русская; Types: full

Name: plugs; Description: Плагины; Types: full ; Flags: collapsed
Name: plugs\wlx; Description: Внутреннего просмотра; Types: full
Name: plugs\wcx; Description: Архиваторные; Types: full
Name: plugs\wfx; Description: Системные; Types: full
Name: plugs\wfx\CanonCam; Description: CanonCam; Types: full
Name: plugs\wfx\PluginManager; Description: PluginManager; Types: full
Name: plugs\wfx\Registry; Description: Registry; Types: full
Name: plugs\wfx\Services; Description: Services; Types: full
Name: plugs\wfx\StartupGuard; Description: StartupGuard; Types: full
Name: plugs\wdx; Description: Другие; Types: full

[Сode]
type
TComponentDesc = record Description: String; Index: Integer; end;

var
Descs: array of TComponentDesc;
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;
Indx: Integer;

procedure ShowDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var i: Integer;
begin
Indx:=-1;
for i:= 0 to GetArrayLength(Descs)-1 do begin
if (Descs[i].Index=Index) then begin Indx:=i; Break end; end;
if (Indx >=0)and(Area=iaItem) then Info.Caption:= Descs[Indx].Description else Info.Caption:= ExpandConstant('{cm:ComponentsInfoPanel2}');
end;

procedure AddDescription(AIndex: Integer; ADescription: String);
var i, k: Integer;
begin
i:= GetArrayLength(Descs); SetArrayLength(Descs, i+1);
Descs[i].Description:= ADescription; Descs[i].Index:= AIndex-1
end;

procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible:=False;
WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Width := ScaleX(417);
WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := ScaleY(190);
InfoPanel.Left := ScaleX(0);
InfoPanel.Width := ScaleX(417);
InfoPanel.Height := ScaleY(40);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(7);
InfoCaption.Top := InfoPanel.Top - ScaleY(6);
InfoCaption.Font.Color := clActiveCaption;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(403);
Info.Top := ScaleY(12);
Info.Height := ScaleY(24);
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

AddDescription(1, 'Справка'); ///первый параметр - это номер компонента, идет последовательно от начала записи компонентов
AddDescription(2, 'Английская справка'); ///Второй параметр - это собственно описание компонента
AddDescription(3, 'Русская справка');
AddDescription(4, 'Плагины');
AddDescription(5, 'Внутреннего просмотра');
AddDescription(6, 'Архиваторные');
AddDescription(7, 'Системные');
AddDescription(8, 'CanonCam');
AddDescription(9, 'PluginManager');
AddDescription(10, 'Registry');
AddDescription(11, 'Services');
AddDescription(12, 'StartupGuard');
AddDescription(13, 'Другие');
end;

Полностью, без каких либо изменений скопировал себе секции [CustomMessages], [Сode] и строчку "ComponentsListTVStyle=true" для секции [Setup]. Компилятор выдает ошибки...
Скрытый текст


Вторая ошибка выскакивает если удалить строчку ComponentsListTVStyle=true


Может ли это быть из-за того, что help написан для 5.5.9 а у меня 5.5.8?

Nordek 09-10-2017 19:17 2769427

Вложений: 1
Цитата:

Цитата vk_k14m@vk
Может ли это быть из-за того »

При таком условии вам нужна расширенная версия Inno Setup, как собрать описано в первом сообщении из соседней темы.
P.S У меня Inno Setup версии 5.5.1.

Для обычной версии Inno Setup подойдёт этот пример из справки:
Скрытый текст

Файл dll прикрепил выше.

Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program


[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
english.ComponentsName1=My program&trade;
russian.ComponentsName1=Моя программа&trade;
english.ComponentsName1_1=English version
russian.ComponentsName1_1=Английская версия
english.ComponentsName1_2=Russian version
russian.ComponentsName1_2=Русская версия
english.ComponentsName2=Help
russian.ComponentsName2=Помощь
english.ComponentsName2_1=Documentation
russian.ComponentsName2_1=Документация
english.ComponentsName2_2=User manual
russian.ComponentsName2_2=Руководство пользователя
english.ComponentsInfoPanel1=Description
russian.ComponentsInfoPanel1=Описание
english.ComponentsInfoPanel2=Direct the cursor a mouse on component to read his description.
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
english.ComponentsDescription1=Necessarily is fixed
russian.ComponentsDescription1=Устанавливается обязательно
english.ComponentsDescription2=Install english version
russian.ComponentsDescription2=Установить английскую версию
english.ComponentsDescription3=Install russian version
russian.ComponentsDescription3=Установить русскую версию
english.ComponentsDescription4=Help
russian.ComponentsDescription4=Помощь
english.ComponentsDescription5=Read documentation
russian.ComponentsDescription5=Прочитать документацию
english.ComponentsDescription6=Read user manual
russian.ComponentsDescription6=Прочитать руководство пользователя

[Components]
Name: main; Description: {cm:ComponentsName1}; Types: full custom; Flags: fixed
Name: main\english; Description: {cm:ComponentsName1_1}; Flags: exclusive
Name: main\russian; Description: {cm:ComponentsName1_2}; Flags: exclusive
Name: help; Description: {cm:ComponentsName2}; Types: full custom
Name: help\documentation; Description: {cm:ComponentsName2_1}; Types: full custom
Name: help\manual; Description: {cm:ComponentsName2_2}; Types: full custom

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: main
Source: "MyProg.chm"; DestDir: "{app}"; Components: help
Source: "descctrl.dll"; Flags: dontcopy

[Messages]
ComponentsDiskSpaceMBLabel=

[Code]
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
disabledesc();
end;

procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible:=False;
WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Width := ScaleX(417);

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := ScaleY(190);
InfoPanel.Left := ScaleX(0);
InfoPanel.Width := ScaleX(417);
InfoPanel.Height := ScaleY(38);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(7);
InfoCaption.Top := InfoPanel.Top - ScaleY(6);
InfoCaption.Font.Color := clActiveCaption;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(403);
Info.Top := ScaleY(12);
Info.Height := ScaleY(24);
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
ExpandConstant('{cm:ComponentsDescription1};')+
ExpandConstant('{cm:ComponentsDescription2};')+
ExpandConstant('{cm:ComponentsDescription3};')+
ExpandConstant('{cm:ComponentsDescription4};')+
ExpandConstant('{cm:ComponentsDescription5};')+
ExpandConstant('{cm:ComponentsDescription6};')
);
end;


vk_k14m@vk 10-10-2017 01:47 2769495

Цитата:

Цитата Nordek
Для обычной версии Inno Setup подойдёт этот пример из справки: »

Тут тоже не без ошибок
Скрытый текст

В самом коде же не надо ничего менять?

Скрытый текст
Код:

; Этот сценарий создан с помощью Мастера Inno Setup.
; ОБРАТИТЕСЬ К СПРАВОЧНОЙ ДОКУМЕНТАЦИИ, ЧТОБЫ ИСПОЛЬЗОВАТЬ ВСЕ ВОЗМОЖНОСТИ INNO SETUP!

#define MyAppName "Artificial Academy 2"
#define MyAppVersion "2.0.1.0"
#define MyAppPublisher "Illusion"
#define MyAppExeName "AA2Play.exe"

[Setup]
; Примечание: Значение AppId является уникальным идентификатором для этого приложения.
; Не используйте одно и тоже значение AppId для разных приложений.
; (Для создания нового значения GUID, выберите в меню "Инструменты" пункт "Создать GUID".)
AppId={{37EDDB6D-1F9B-474F-8FF4-57CC8277B1A7}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName=D:\Games\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=D:\Inno Setup
OutputBaseFilename=setup
DisableWelcomePage=no
SetupIconFile=D:\Inno Setup\Installer\ico.ico
WizardImageFile=D:\Inno Setup\Installer\WizardImage.bmp
WizardSmallImageFile=D:\Inno Setup\Installer\WizardSmallImage.bmp
Compression=lzma2/ultra64 
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=1536000000

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Types]
Name: "Main";    Description: "Установка чистой игры с русификатором"
Name: "MKIII";  Description: "Полная установка с антицензором MKIII"
Name: "SVII";    Description: "Полная установка с антицензором SVII";
Name: "custom";  Description: "Выборочная установка";                        Flags: iscustom

[CustomMessages]
russian.ComponentsName1=Artificial Academy 2 +русификатор v.3
russian.ComponentsName2=Антицензор
russian.ComponentsName2a=МКIII
russian.ComponentsName2a1=Пак одежды для MKIII анцензора
russian.ComponentsName2a2=Аддон на подвязки
...
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
russian.ComponentsDescription1=Чистая версия игры со всеми фиксами и ДЛС +русификатор v.3 (для чистой игры)
russian.ComponentsDescription2=Выберите один из антицензоров
russian.ComponentsDescription2a=Антицензорв MKIII - [AA2][Uncensor][3D MK-III][FA][v2.0][Various]
russian.ComponentsDescription2a1=Мод на одежду - [AA2][HEXA Clothing Collection][MK-III][v5.2][Various]
russian.ComponentsDescription2a2=
...

[Components]
Name: "Main";                                    Description: {cm:ComponentsName1};    Types: Main MKIII SVII custom;
Name: "Anticensor";                              Description: {cm:ComponentsName2};    Types: custom
Name: "Anticensor\MKIII";                        Description: {cm:ComponentsName2a};  Types: MKIII custom;          Flags: exclusive
Name: "Anticensor\MKIII\clothes";                Description: {cm:ComponentsName2a1};  Types: MKIII custom;          Flags: exclusive
Name: "Anticensor\MKIII\clothes\garter_belt";    Description: {cm:ComponentsName2a2};  Types: MKIII custom;
...         

[Files]                                                                                                   
Source: "D:\Inno Setup\Installer\0 Delete after install\AA2Decrypt_unpack.bat"; DestDir: "{app}"; BeforeInstall: ChangeCaption('Подготовка к установке (Распаковка *.рр архивов)'); AfterInstall: install_this_file_1; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak
Source: "D:\Inno Setup\Installer\1 Artificial Academy 2\Artificial Academy 2*"; DestDir: "{app}"; BeforeInstall: ChangeCaption('Установка основных файлов игры');  Components: Main; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
...
Source: "D:\Inno Setup\Installer\descctrl.dll"; Flags: dontcopy
; Примечание: Не используйте' флаги "ignoreversion" для общих системных файлов.

[Сode]
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
disabledesc();
end;

procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible:=False;
WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
WizardForm.ComponentsList.Width := ScaleX(417);

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := ScaleY(190);
InfoPanel.Left := ScaleX(0);
InfoPanel.Width := ScaleX(417);
InfoPanel.Height := ScaleY(38);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(7);
InfoCaption.Top := InfoPanel.Top - ScaleY(6);
InfoCaption.Font.Color := clActiveCaption;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(403);
Info.Top := ScaleY(12);
Info.Height := ScaleY(24);
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
ExpandConstant('{cm:ComponentsDescription1};')+
ExpandConstant('{cm:ComponentsDescription2};')+
ExpandConstant('{cm:ComponentsDescription3};')+
ExpandConstant('{cm:ComponentsDescription4};')+
ExpandConstant('{cm:ComponentsDescription5};')+
ExpandConstant('{cm:ComponentsDescription6};')
);
end;
...

[Icons]
Name: "{group}\{#MyAppName}";                      Components: Main;                              Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Components: Main;                              Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}";              Components: Main;                              Filename: "{app}\{#MyAppExeName}";            Tasks: desktopicon


nik1967 10-10-2017 05:26 2769505

Цитата:

Цитата vk_k14m@vk
Тут тоже не без ошибок »

Добавь в секцию [code] в начале

Код:

type
#ifdef UNICODE
  PChar = PAnsiChar;
#endif


vk_k14m@vk 10-10-2017 06:16 2769512

Цитата:

Цитата Nordek
Для обычной версии Inno Setup подойдёт этот пример из справки: »

Не это я себе представлял. Жертвуем выбором типа установки ради описания. А иначе никак нельзя? Что б не в специально отведенном месте текст отображался, а появлялся в облачке когда мышку наводишь. Что-то вроде этого.

Или справа от компонента знак [?] поставить, при нажатии на который высветится описание.

jdcorg 15-10-2017 11:31 2770704

Добрый день!
В зависимости от выбранного компонента, создаётся страница задач с двумя чекбоксами.
На страницу с задачами надо добавить возможность выбора папки для установки некоторых файлов, для определённой задачи.
Я пытался сделать, но всё что нашел CreateInputDirPage(wpSelectTasks,...), т.е. после страницы задач создаётся страница выбора папки.
А ведь надо эту возможность поместить именно на страницу wpSelectTasks и выровнять с учётом расположения имеющихся на ней чекбоксов.
Как это сделать?

pollipen 21-10-2017 09:47 2772142

парни помогите соединить 2 скрипта вместе
1 скрипт
Код:

function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
begin
  if not FileExists(ExpandConstant('{tmp}\1.exe')) then ExtractTemporaryFile('1.exe');
  Exec(ExpandConstant('{tmp}\1.exe'), '', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);
  result:=True;
end;


2 скрипт
Код:

procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure RunSplash();
begin
  ExtractTemporaryFile('splash.gif');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.gif',{#SplS},{#SplR},{#SplE},0,255,False,$FFFFFF,10);
end;

#define A = (Defined UNICODE) ? "W" : "A"
const
    WM_USER = $0400;
    PBM_SETPOS = (WM_USER + 2);
    GWL_WNDPROC = (-4);
    GWL_USERDATA = (-21);

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

var
    InstPercentLabel: TLabel;

///////////////////////////////
procedure CreateInstallingPage;
begin
    { InstPercentLabel }
    InstPercentLabel := TLabel.Create(WizardForm);
    with InstPercentLabel do
    begin
        Parent := WizardForm.ProgressGauge;
        Align := alClient;
        Alignment := taCenter;
        Layout := tlCenter;
        Transparent := True;
    end;
end;

///////////////////////////////////////////////////////////////////////////////////////
function ProgressGaugeWndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
begin
    case Msg of
        PBM_SETPOS:
            begin
                Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
                with WizardForm.ProgressGauge do
                    InstPercentLabel.Caption := Format('%d %%', [MulDiv(Position, 100, Max)]);
            end;
    else
        Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

///////////////////////////
procedure SubclassControls;
begin
    { ProgressGauge }
    with WizardForm.ProgressGauge do
    begin
        if GetWindowLong(Handle, GWL_USERDATA) = 0 then
            SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, CallbackAddr('ProgressGaugeWndProc')));
    end;
end;

///////////////////////////
procedure InitializeWizard3;
begin
    CreateInstallingPage;
    SubclassControls;
end;

/////////////////////////////
procedure UnSubclassControls;
begin
    { ProgressGauge }
    with WizardForm.ProgressGauge do
    begin
        if GetWindowLong(Handle, GWL_USERDATA) > 0 then
            SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));
    end;
end;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard2();
begin

WizardForm.CancelButton.BringToFront;
WizardForm.Bevel1.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then
begin
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(91);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(15);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(325);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(68);
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end;
end;
////////////////////////
var
  Label1: TLabel;

procedure btnOnClick(Sender: TObject);
var
 rcode: integer;
begin
    ShellExec('open','','', '', SW_SHOW, ewNoWait, rCode);
end;

procedure btnOnClick2(Sender: TObject);
begin
    Label1.Font.Color := clred;
end;

procedure btnOnClick3(Sender: TObject);
begin
    Label1.Font.Color := clBlue;
end;

procedure InitializeWizard4();
begin
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := WizardForm;
    Cursor := crHand;
    Caption := 'софт';
    Font.Color := clBlue;
    Font.Height := -16;
    Font.Name := 'Tahoma';
    Font.Style := [fsUnderline];
    ParentFont := False;
    Transparent := True;
    OnClick := @btnOnClick;
    OnMouseEnter := @btnOnClick2;
    OnMouseLeave := @btnOnClick3;
    Left := ScaleX(8);
    Top := ScaleY(327);
    Width := ScaleX(153);
    Height := ScaleY(19);
  end;
end;
/////////////////
const
BtnClickEventID      = 1;

type
  #ifndef UNICODE
  AnsiChar = Char;
  #endif

  TBtnEventProc = procedure(h:HWND);

var
MusicButton, mp3Handle: HWND;

function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';
function BtnGetChecked(h:HWND):boolean; external 'BtnGetChecked@{tmp}\botva2.dll stdcall delayload';
function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND;  external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@{tmp}\botva2.dll stdcall delayload';
function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEvent(h:HWND; EventID:integer; Event:Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetVisibility(h:HWND; Value:boolean); external 'BtnSetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';

Function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
Function BASS_Start: Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
Function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
Function BASS_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
Function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
Function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
Function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
Function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
Function BASS_StreamCreateFileLib(MEM: BOOL; fil: PAnsiChar; offset, length, flags: DWORD): DWORD; external 'BASS_StreamCreateFile@{tmp}\bp.dll stdcall delayload';
Function BASS_StreamCreateFile(MEM: BOOL; fil: AnsiString; offset, flags: DWORD): DWORD;

var
  Size: Longint;
  Buffer: ansistring;
begin
  if MEM then begin
    Size:= ExtractTemporaryFileSize(fil);
    SetLength(Buffer,Size);
    ExtractTemporaryFileToBuffer(fil, Cast{#defined UNICODE ? "Ansi" : ""}StringToInteger(Buffer));
    Result:= BASS_StreamCreateFileLib(MEM, Buffer, 0, Size, flags);
  end else Result:= BASS_StreamCreateFileLib(MEM, fil, offset, 0, flags);
end;

Procedure MusicButtonClick(hBtn:HWND);
begin
  if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle) else if BASS_ChannelIsActive(mp3Handle) = 3 then BASS_ChannelPlay(mp3Handle, False);
end;

function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\Bass.dll')) then ExtractTemporaryFile('Bass.dll');
  if not FileExists(ExpandConstant('{tmp}\BP.dll'))  then ExtractTemporaryFile('BP.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll'))  then ExtractTemporaryFile('botva2.dll');
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll'))  then ExtractTemporaryFile('CallbackCtrl.dll');
  if not FileExists(ExpandConstant('{tmp}\MusicButton.png'))  then ExtractTemporaryFile('MusicButton.png');
  Result:=True;
end;

Procedure InitializeWizard5();
begin
  MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(170),ScaleY(320),ScaleX(35),ScaleY(35),ExpandConstant('{tmp}\MusicButton.png'),1,True);
  BtnSetCursor(MusicButton, GetSysCursorHandle(32649));
  BtnSetEvent(MusicButton, BtnClickEventID, CallBackAddr('MusicButtonClick'));
  BtnSetVisibility(MusicButton, True);

  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle:= BASS_StreamCreateFile(TRUE, 'Music.mp3', 0, 4);
  BASS_Start;
  BASS_ChannelPlay(mp3Handle, False);
  ImgApplyChanges(WizardForm.Handle);
end;

Procedure StopMusic();
begin
  BASS_Stop;
  BASS_Free;
end;

procedure InitializeWizard();
begin
InitializeWizard2();
InitializeWizard3;
InitializeWizard4();
RunSplash();
InitializeWizard5();
end;

////////////////////////////
procedure DeinitializeSetup;
begin
    if ExpandConstant('{wizardhwnd}') = '0' then
        Exit;
    UnSubclassControls;
    StopMusic();
  gdipShutdown;
end;


Nordek 21-10-2017 15:31 2772188

pollipen, На работоспособность не проверял, лень производить входящее содержимое (из рода: файлы, каталоги).
Скрытый текст
Код:

[Code]
procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure RunSplash();
begin
 
ExtractTemporaryFile('splash.gif');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.gif',{#SplS},{#SplR},{#SplE},0,255,False,$FFFFFF,10);
end;

#define A = (Defined UNICODE) ? "W" : "A"
const
   
WM_USER = $0400;
    PBM_SETPOS = (WM_USER + 2);
    GWL_WNDPROC = (-4);
    GWL_USERDATA = (-21);

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

var
   
InstPercentLabel: TLabel;

///////////////////////////////
procedure CreateInstallingPage;
begin
   
{ InstPercentLabel }
   
InstPercentLabel := TLabel.Create(WizardForm);
    with InstPercentLabel do
    begin
       
Parent := WizardForm.ProgressGauge;
        Align := alClient;
        Alignment := taCenter;
        Layout := tlCenter;
        Transparent := True;
    end;
end;

///////////////////////////////////////////////////////////////////////////////////////
function ProgressGaugeWndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
begin
    case
Msg of
       
PBM_SETPOS:
            begin
               
Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
                with WizardForm.ProgressGauge do
                   
InstPercentLabel.Caption := Format('%d %%', [MulDiv(Position, 100, Max)]);
            end;
    else
       
Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

///////////////////////////
procedure SubclassControls;
begin
   
{ ProgressGauge }
   
with WizardForm.ProgressGauge do
    begin
        if
GetWindowLong(Handle, GWL_USERDATA) = 0 then
           
SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, CallbackAddr('ProgressGaugeWndProc')));
    end;
end;


/////////////////////////////
procedure UnSubclassControls;
begin
   
{ ProgressGauge }
   
with WizardForm.ProgressGauge do
    begin
        if
GetWindowLong(Handle, GWL_USERDATA) > 0 then
           
SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));
    end;
end;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure CurPageChanged(CurPageID: Integer);
begin
if
CurPageID=wpInstalling then
begin
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(91);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(15);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(325);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(68);
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end;
end;
////////////////////////
var
 
Label1: TLabel;

procedure btnOnClick(Sender: TObject);
var
 
rcode: integer;
begin
   
ShellExec('open','','', '', SW_SHOW, ewNoWait, rCode);
end;

procedure btnOnClick2(Sender: TObject);
begin
   
Label1.Font.Color := clred;
end;

procedure btnOnClick3(Sender: TObject);
begin
   
Label1.Font.Color := clBlue;
end;

/////////////////
const
BtnClickEventID      = 1;

type
 
#ifndef UNICODE
 
AnsiChar = Char;
  #endif

 
TBtnEventProc = procedure(h:HWND);

var
MusicButton, mp3Handle: HWND;

function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';
function BtnGetChecked(h:HWND):boolean; external 'BtnGetChecked@{tmp}\botva2.dll stdcall delayload';
function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND;  external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@{tmp}\botva2.dll stdcall delayload';
function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEvent(h:HWND; EventID:integer; Event:Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetVisibility(h:HWND; Value:boolean); external 'BtnSetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';

Function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
Function BASS_Start: Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
Function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
Function BASS_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
Function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
Function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
Function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
Function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
Function BASS_StreamCreateFileLib(MEM: BOOL; fil: PAnsiChar; offset, length, flags: DWORD): DWORD; external 'BASS_StreamCreateFile@{tmp}\bp.dll stdcall delayload';
Function BASS_StreamCreateFile(MEM: BOOL; fil: AnsiString; offset, flags: DWORD): DWORD;

var
 
Size: Longint;
  Buffer: ansistring;
begin
  if
MEM then begin
   
Size:= ExtractTemporaryFileSize(fil);
    SetLength(Buffer,Size);
    ExtractTemporaryFileToBuffer(fil, Cast{#defined UNICODE ? "Ansi" : ""}StringToInteger(Buffer));
    Result:= BASS_StreamCreateFileLib(MEM, Buffer, 0, Size, flags);
  end else Result:= BASS_StreamCreateFileLib(MEM, fil, offset, 0, flags);
end;

Procedure MusicButtonClick(hBtn:HWND);
begin
  if
BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle) else if BASS_ChannelIsActive(mp3Handle) = 3 then BASS_ChannelPlay(mp3Handle, False);
end;

function InitializeSetup(): Boolean;
var
 
ErrorCode: Integer;
begin
  if not
FileExists(ExpandConstant('{tmp}\Bass.dll')) then ExtractTemporaryFile('Bass.dll');
  if not FileExists(ExpandConstant('{tmp}\BP.dll'))  then ExtractTemporaryFile('BP.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll'))  then ExtractTemporaryFile('botva2.dll');
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll'))  then ExtractTemporaryFile('CallbackCtrl.dll');
  if not FileExists(ExpandConstant('{tmp}\MusicButton.png'))  then ExtractTemporaryFile('MusicButton.png');
  if not FileExists(ExpandConstant('{tmp}\1.exe')) then ExtractTemporaryFile('1.exe');
  Exec(ExpandConstant('{tmp}\1.exe'), '', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);
  Result:=True;
end;

Procedure StopMusic();
begin
 
BASS_Stop;
  BASS_Free;
end;

procedure InitializeWizard();
begin
 
Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
   
Parent := WizardForm;
    Cursor := crHand;
    Caption := 'ñîôò';
    Font.Color := clBlue;
    Font.Height := -16;
    Font.Name := 'Tahoma';
    Font.Style := [fsUnderline];
    ParentFont := False;
    Transparent := True;
    OnClick := @btnOnClick;
    OnMouseEnter := @btnOnClick2;
    OnMouseLeave := @btnOnClick3;
    Left := ScaleX(8);
    Top := ScaleY(327);
    Width := ScaleX(153);
    Height := ScaleY(19);
  end;
  WizardForm.CancelButton.BringToFront;
  WizardForm.Bevel1.Hide;
  MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(170),ScaleY(320),ScaleX(35),ScaleY(35),ExpandConstant('{tmp}\MusicButton.png'),1,True);
  BtnSetCursor(MusicButton, GetSysCursorHandle(32649));
  BtnSetEvent(MusicButton, BtnClickEventID, CallBackAddr('MusicButtonClick'));
  BtnSetVisibility(MusicButton, True);

  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle:= BASS_StreamCreateFile(TRUE, 'Music.mp3', 0, 4);
  BASS_Start;
  BASS_ChannelPlay(mp3Handle, False);
  ImgApplyChanges(WizardForm.Handle);

  CreateInstallingPage;
  SubclassControls;
  RunSplash();
end;

////////////////////////////
procedure DeinitializeSetup;
begin
    if
ExpandConstant('{wizardhwnd}') = '0' then
       
Exit;
    UnSubclassControls;
    StopMusic();
  gdipShutdown;
end;


Ivn78 22-10-2017 00:00 2772300

Гуру, как в секции [code] проверить язык установки? В зависимости от языка нужно выполнить либо один набор команд, либо другой. В [Languages] задано три языка.

nik1967 22-10-2017 07:19 2772337

Ivn78,
Скрытый текст
Код:

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
Name: eng; MessagesFile: compiler:Default.isl
Name: ger; MessagesFile: compiler:Languages\German.isl

[code]
procedure InitializeWizard();
begin
  case ActiveLanguage of
    'rus': MsgBox('Русский', mbInformation, MB_OK);
    'eng': MsgBox('English', mbInformation, MB_OK);
    'ger': MsgBox('German', mbInformation, MB_OK);
  end;
end;


marinaU 22-10-2017 09:59 2772359

Добрый день. Прошу помощи в решении.

Для замены файла в папке files делаю так:

[Files]
Source: "C:\1\file1.txt"; DestDir: "c:\MyProgr\files\"; Flags: ignoreversion


А как сделать так, чтобы:

- если папки files нет, то программа не выполняла никаких действий; если есть, то производила замену\добавление файла.

Благодарю всех откликнувшихся.

boss911 22-10-2017 12:55 2772395

Цитата:

Цитата marinaU
если папки files нет, то программа не выполняла никаких действий; если есть, то производила замену\добавление файла. »

Код:

[Files]
Source: "C:\1\file1.txt"; DestDir: "c:\MyProgr\files"; Flags: ignoreversion; Check: DirExists(ExpandConstant('{sd}\MyProgr\files'))

Используйте константы (переменные) для папок назначения (DestDir), в данном случае, исходя из вашего примера, я указал константу {sd}, которая означает букву системного раздела.

marinaU 22-10-2017 13:20 2772400

boss911, спасибо большое

Ivn78 22-10-2017 23:28 2772580

Еще помогите, плиз.
В инсталляторе создана пользовательская страница. Задача привязать к ней MsgBox, т.е. чтобы он появлялся сразу при переходе на кастомную страницу. Ведь вроде CurStep не видит "нарисованных" страниц?

nik1967 23-10-2017 07:52 2772615

Цитата:

Цитата Ivn78
Ведь вроде CurStep не видит "нарисованных" страниц? »

А зачем тебе CurStep?
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
 case CurPageID of
  wpWelcome: begin
  end;
  Кастомная_страница.ID: begin
  MsgBox('Hello.', mbInformation, MB_OK);
  end;
 end;
end;

Или тебе надо, что бы кастомная страница появлялась на этапе ssInstall, ssPostInstall, ssDone?

Ivn78 23-10-2017 08:10 2772616

nik1967,
Еще вопрос...
В зависимости от определенных условий кастомная страница может создаваться, а может и нет. Если создана, то выполняется еще ряд условий. Как проверить наличие кастомной страницы?

nik1967 23-10-2017 10:14 2772634

Ivn78, а не проще плясать от тех определённых условий, в зависимости от которых и создаётся/не создаётся кастомная страница?
С проверкой страницы что-то не сталкивался. Или может забыл :(

Ivn78 23-10-2017 10:43 2772646

nik1967,
Уже пляшу) просто думал, есть более кошерный способ

nik1967 24-10-2017 17:00 2773094

Ivn78, воспользоваться функцией SaveStringToFile
Из справки
Pascal Scripting: SaveStringToFile
Прототип:
function SaveStringToFile(const FileName: String; const S: AnsiString; const Append: Boolean): Boolean;

Описание:
Сохраняет указанную строку в указанный файл. Если Append является True и указанный файл уже существует, то текст будет добавлен к файлу, вместо его полной перезаписи. При успешном выполнении возвращает True, иначе False.

Комментарии:
Эта функция автоматически не записывает символ перевода строки. Если Append является True и в конце существующего файла отсутствует символ перевода строки, функция добавит содержимое переменной S к последней строке. Чтобы избежать этого, вы можете поместить символы перевода строки перед и после вашей строки:

SaveStringToFile('c:\filename.txt', #13#10 + 'the string' + #13#10, True);

Ivn78 24-10-2017 22:06 2773150

nik1967,
Да, спасибо, уже разобрался.
А не подскажете, как на этапе ssDone открыть интернет-страницу в браузере по умолчанию?

nik1967 24-10-2017 22:18 2773154

Код:

procedure CurStepChanged(CurStep: TSetupStep);
var 
  ErrorCode: Integer; 
begin 
  if CurStep = ssDone then ShellExec('open', 'http://forum.oszone.net/showthread.php?p=2773094#post2773094', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 
end;


xryst 24-10-2017 23:04 2773160

Подскажите как поправить пример
Код:

[  code]
const
  INSTALLSTATE_DEFAULT = 5;

#ifdef UNICODE
  #define A "W"
 #else
  #define A "A"
#endif

function MsiQueryProductState(szProduct: String): Integer;
external 'MsiQueryProductState{#A}@msi.dll stdcall';

function IsMsiProductInstall(ProductCode: String): Boolean;
begin
  Result := MsiQueryProductState(ProductCode) = INSTALLSTATE_DEFAULT;
end;

//к примеру определяем установлен ли Microsoft Visual C++ 2010  x86 Redistributable, ProductCode которого {196BB40D-1578-3D01-B289-BEFC77A11A1E}
procedure InitializeWizard();
begin
  if IsMsiProductInstall('{196BB40D-1578-3D01-B289-BEFC77A11A1E}') then
    MsgBox('vcredist 2010 installed for current user', mbInformation, MB_OK)
  else
    MsgBox('vcredist 2010 not installed', mbInformation, MB_OK);
end;

Нужно результатом работы получить, если Microsoft Visual C++ 2010 установлен, то продолжаем установку (можно и не показывать сообщение про это), если не установлен то отобразить сообщение что не установлен, и завершить процесс установки.
Сам пытался, но нечего путнего у меня не вышло

Iska 24-10-2017 23:35 2773165

Цитата:

Цитата xryst
то отобразить сообщение что не установлен, и завершить процесс установки. »

Почему бы не предложить его тут же, прямо сейчас, загрузить и установить?!

xryst 25-10-2017 00:00 2773171

Цитата:

Цитата Iska
Почему бы не предложить его тут же, прямо сейчас, загрузить и установить?! »

В реальном инсталере хочу использовать этот метод для установки обновления программы, которое делаю сам, если программа есть, обновляем, если нет то завершаем работу. Оригинальный инсталер программы msi, по этому и выбрал этот метод.

nik1967 25-10-2017 09:34 2773208

xryst,
Скрытый текст
Код:

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

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

[code]
const
  INSTALLSTATE_DEFAULT = 5;

#ifdef UNICODE
  #define A "W"
 #else
  #define A "A"
#endif

function MsiQueryProductState(szProduct: String): Integer;
external 'MsiQueryProductState{#A}@msi.dll stdcall';

function IsMsiProductInstall(ProductCode: String): Boolean;
begin
  Result:= MsiQueryProductState(ProductCode) = INSTALLSTATE_DEFAULT;
end;

//к примеру определяем установлен ли Microsoft Visual C++ 2010  x86 Redistributable, ProductCode которого {196BB40D-1578-3D01-B289-BEFC77A11A1E}
function InitializeSetup: Boolean;
begin
  if IsMsiProductInstall('{196BB40D-1578-3D01-B289-BEFC77A11A1E}') then begin
    MsgBox('vcredist 2010 installed for current user', mbInformation, MB_OK);
    Result:= true;
  end else begin
    MsgBox('vcredist 2010 not installed', mbInformation, MB_OK);
    Result:= false;
  end;
end;


Карась з Днiпра 25-10-2017 10:03 2773215

Здраствуйте, уважаемые знатоки!
Такая вот шняга. Скрипт Inno Setup подшаманить надо.
Надо убрать инфу для удаления, а конкретно - два файла. unins000.dat и unins000.exe с целевой папки
Может, посоветуете что?
Вариант ручного удаления - не вариант. Надо чтобы их не оставалось после установки

Iska 25-10-2017 10:06 2773216

Карась з Днiпра, зачем?

Карась з Днiпра 25-10-2017 10:09 2773218

Также задача второстепенной важности, которая мне никак не поддается. Буду благодарен, если поможете.
Видел как то русскую локализацию к игре Lost Via Domus, от пиратов. Целевой файл там на 2 ГБ, архив какой нибудь. А сам инсталл - мегабайта полтора или сколько там. Не помню. Мелочь. Подобное супер-мега-дупер-сжатие мне надо реализовать и в своем скрипте, потому как файлов там гигабайт на 15. Помогите, пожалуйста...

nik1967 25-10-2017 10:10 2773219

Карась з Днiпра,
Читаем справку!

[Setup]: Uninstallable
Возможные значения:
yes или no, или логические выражения
Значение по умолчанию:
yes

Описание:
Inno Setup определяет, создавать ли автоматический деинсталлятор. При значении yes или логического выражения True он создается. Иначе автоматическое удаление будет невозможно, так что пользователь должен будет вручную удалять программу.

Установка значения директивы в True может быть полезной, если Вы хотите установить 'переносимую' программу.

Например:
[Setup]
Uninstallable=not IsTaskSelected('portablemode')

[Tasks]
Name: portablemode; Описание: "Portable Mode"
См. также:
CreateUninstallRegKey

[Setup]: CreateUninstallRegKey
Возможные значения:
yes или no, или логическое выражение
Значение по умолчанию:
yes

Описание:
При значении no или False (логические выражения) инсталлятор не будет создавать пункта программы в диалоге Установка и удаление программ. Это может быть полезно, если программа является обновлением для уже установленного приложения и запись в этом диалоге не нужна, но надо сохранить возможность удаления обновления (Uninstallable=no). В этом случае, UpdateUninstallLogAppName обычно устанавливается в no.



Карась з Днiпра 25-10-2017 10:10 2773220

Iska, для моего инсталла деинсталяция вообще не нужна. Да и лишние файлы в целевой папке тоже.

nik1967 25-10-2017 10:11 2773221

Цитата:

Цитата Карась з Днiпра
Помогите, пожалуйста... »

Использовать внешние упаковщики, для распаковки - IsDone.

Карась з Днiпра 25-10-2017 10:13 2773223

nik1967, попробую прописать в код, спасибо.
По поводу упаковщика. Можно подробнее, пожалуйста? Я очень далек от всего этого, но сделать нужно.

nik1967 25-10-2017 10:22 2773224

Карась з Днiпра,

Карась з Днiпра 25-10-2017 10:27 2773225

nik1967, спасибо огромное!
Попробовал команду Uninstallable. В инсталле по этому поводу доп. окошко появляется, не оч. кошерно. Попробую просто
Uninstallable=not

Еще раз спасибо!

nik1967 25-10-2017 10:32 2773226

Карась з Днiпра,
Возможные значения:
yes или no
То есть
Код:

[Setup]
Uninstallable=no

А не not.

Карась з Днiпра 25-10-2017 10:35 2773227

А теперь все кошерно! Спасибо вам, люди!

nik1967, смеканул об этом до компиляции, но тем не менее спасибо)

nik1967 25-10-2017 10:52 2773232

Карась з Днiпра,
Не забудь про:

[Setup]: CreateUninstallRegKey
Возможные значения:
yes или no, или логическое выражение
Значение по умолчанию:
yes

Описание:
При значении no или False (логические выражения) инсталлятор не будет создавать пункта программы в диалоге Установка и удаление программ.
Код:

[Setup]
CreateUninstallRegKey=no


Если нужно, конечно.

xryst 25-10-2017 10:54 2773235

Цитата:

Цитата Карась з Днiпра
Целевой файл там на 2 ГБ, архив какой нибудь. »

Это можно порезать на куски вида install*.bin любого размера штатными средствами innosetup, и если при установке он не найдет какой то кусок, попросит втавить следующий диск. Все описано в хелпе

Ivn78 25-10-2017 11:40 2773245

Вопрос знатокам: как можно подавить MsgBox деинсталлятора "Программа полностью удалена с вашего компьютера" или изменить его текст в зависимости от условий?

nik1967 25-10-2017 12:02 2773252

Цитата:

Цитата Ivn78
как можно подавить MsgBox деинсталлятора "Программа полностью удалена с вашего компьютера" »

Скрытый текст
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

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

[Code]
function InitializeUninstall:boolean;
var
  rcode: Integer;
begin
  Result:= False;
        if not UninstallSilent then begin
                Exec(ExpandConstant('{uninstallexe}'), '/SILENT', '', SW_SHOW, ewNoWait, RCode);
                Exit;
        end;
        if MsgBox('Удалить программу?', mbConfirmation, MB_YESNO) = IDYES then
        Result:= True;
end;


xryst 26-10-2017 22:30 2773592

Подскажите есть ли возможность в Inno Setup отключить проверку "битости" инсталятора, требуется для упаковки файла протектором, сейчас после упаковки выдает сообщение что он поврежден, получите новую копию.

Iska 27-10-2017 03:02 2773617

xryst, простого шифрования Вам недостаточно?

xryst 27-10-2017 08:48 2773636

Цитата:

Цитата Iska
xryst, простого шифрования Вам недостаточно? »

Простое шифрование не дает возможность лицензирования, а только защита от распаковки

vk_k14m@vk 30-10-2017 17:15 2774337

Народ, а как работает параметр "Components" в секции [Files]? Если я ввожу "Components: Main Full;" то как это будет работать? Этот файл установится если выбран один из компонентов? Или когда выбрано сразу оба?

И вообще, какие логические выражения там можно использовать? and, or или not там работают? В help об этом ни слова, только в [Tasks] написано про них.

Iska 30-10-2017 17:37 2774342

Цитата:

Цитата vk_k14m@vk
В help об этом ни слова, »

Скрытый текст

Nordek 30-10-2017 18:38 2774355

Цитата:

Цитата vk_k14m@vk
Если я ввожу "Components: Main Full;" то как это будет работать? Этот файл установится если выбран один из компонентов? Или когда выбрано сразу оба? »

По умолчанию будут выбраны все те компоненты, которым в [Components] назначен тип full.
Если был назначен тип full на два компонента, например:
Код:

[Components]
Name: CMP1; Description: Component 1; Types: full
Name: CMP2; Description: Component 2; Types: full

- Будут задействованы оба.

Если к этому будет применён флаг exclusive
Код:

[Components]
Name: CMP1; Description: Component 1; Types: full; Flags: exclusive
Name: CMP2; Description: Component 2; Types: full; Flags: exclusive

- Будет задействован последний.

vk_k14m@vk 31-10-2017 04:38 2774461

Iska, вы так и не научились читать то что я пишу?

Цитата:

Цитата vk_k14m@vk
И вообще, какие логические выражения там можно использовать? and, or или not там работают? В help об этом ни слова, только в [Tasks] написано про них. »

Ты мне ровно это и показал. Логические выражения в секции [Task]. А я спрашивал о секции [Files]. Улавливаешь разницу? То что логические выражения работают в [Task] не говорит о том что они так же работают и в [Files].

Nordek, ваш ответ вообще не к месту. Я не о секции [Components] спрашивал. А про параметр "Components" в секции [Files]. Читайте внимательнее то что я пишу.


Итак повторю свой вопрос. Как работает параметр "Components" в секции [Files]? Если я ввожу

Код:

[Components]
Name: "a"; Description: a; Types: custom;
Name: "b"; Description: b; Types: custom;

[Files]                                                                                                   
Source: "D:\Inno Setup\file.txt";  DestDir: "{app}"; Components: a b;

То файл "file.txt" будет установлен если выбран один из компонентов, a или b. Или он будет установлен только если выбраны оба?

И так же, работают ли в секции [Files] логические выражения and, or или not?

Iska 31-10-2017 04:59 2774464

Цитата:

Цитата vk_k14m@vk
Iska, вы так и не научились читать то что я пишу? »

vk_k14m@vk, может быть, Вы научитесь писать так, чтобы Вас стали понимать?

2Nordek: вот это тоже сарказм.

vk_k14m@vk 31-10-2017 05:49 2774469

Iska, я написал все довольно подробно. В help ни слова о применении логических выражений в секции [Files]. Там вообще ничего о них не написано. О них сказано только в [Task], который в моем установщике вообще не применяется. И об этом я написал в самом первом посте. А вы скинули мне скриншот из help с логическими выражениями в [Task]. Вас спрашиваешь за фломастер а вы говорите за карандаш. А виноват конечно же я. Хорошо у вас все устроенно.

Куча текста а ответ на вопрос я так и не получил.. Неужели так сложно ответить вместо того что б загружать бесполезные скриншоты и писать тонны текста...

Для понимая, напишу вам кучу текста. Может это приблизит вас хоть немного к пониманию моего вопроса.

Вот скриншот - Параметры секций [Components] и [Tasks]
Скрытый текст

Видно тут хоть слово про секцию [Files]. Нет? Я тоже не вижу. Тут только [Components] и [Tasks]. Вопрос был про [Files].

А вот в секции [Files] нет вообще ничего про логические выражения. Ни слова не написано. Вообще. Там только Source, DestDir, DestName, Excludes, ExternalSize, CopyMode, Attribs, Permissions, FontInstall, StrongAssemblyName, Flags и т.д. Нет ничего о параметре "Components" или о логических выражениях. Что вам еще написать? И так по полочкам уже все разложил.

Nordek 31-10-2017 07:07 2774473

Цитата:

Цитата vk_k14m@vk
А про параметр "Components" в секции [Files]. »

Подожди, только приготовил всё для обряда.

vk_k14m@vk, Не понятно объясняешь.
Так и пиши: Мне нужно объяснение комбинирования значений.

Скрытый текст
a or b
Будет задействовано содержимое инсталлятора только в том случае, если выбран флажок a, b или a и b.
Eсли будет снят с a и b, то задействовано не будет.

a and b
Будет задействовано содержимое инсталлятора только в том случае, если выбраны a и b.
Если с a, b, a и b флажки сняты, то задействовано не будет.

not a or b
Будет задействовано содержимое инсталлятора только в том случае, если не выбран флажок a и выбран флажок b.
Если с a и b или b не выбраны, то задействовано не будет.

not (a or b)
Будет задействовано содержимое инсталлятора только в том случае, если для a и b флажки не выбраны.
Если будет выбран a, b или a и b, то задействовано не будет.

a b
Будет задействовано содержимое инсталлятора только в том случае, если для a, b, a и b выбраны флажки.
Если с a и b флажки сняты, то задействовано не будет.

Iska 31-10-2017 07:35 2774477

vk_k14m@vk, я много чего написал, затем удалил. Затем ещё написал. Затем снова убрал. Ещё написал. И опять убрал, решив, что сарказма на сегодня хватит, да и Вы его навряд ли в запальчивости поймёте.

vk_k14m@vk, возможно Вас сбил с толку кривой перевод. Смотрим оригинал:
Цитата:

Components and Tasks Parameters
There are two optional parameters that are supported by all sections whose entries are separated into parameters, except [Types], [Components] and [Tasks].
и сравниваем его с переводом:
Цитата:

Параметры секций [Components] и [Tasks]
Существуют два параметра, которые поддерживаются всеми секциями, содержащими параметры, кроме [Types], [Components] и [Tasks].
в котором в заголовке вместо параметров «Components» и «Tasks» внезапно взялись из ниоткуда разделы («секции») [Components] и [Tasks].

Данное место следует понимать как «Параметры любых разделов, принимающих общие параметры, за исключением разделов [Types], [Components] и [Tasks]». То есть [Files] входит в этот перечень «all sections whose entries are separated into parameters, except [Types], [Components] and [Tasks]», и к нему в полной мере должно относиться (по крайней мере, в теории — я не проверял специально) использование «boolean expressions» в параметрах «Components» и «Tasks».

idxvmfortuna_5@vk 31-10-2017 11:44 2774520

Ребята помогите пожалуйста . нужен скрипт или пример на uninstall созданный полностью на ботве 2 . не могу не где чет найти . за ранее всем огромное спасибо

boss911 31-10-2017 13:05 2774550

Цитата:

Цитата vk_k14m@vk
[Files]
Source: "D:\Inno Setup\file.txt"; DestDir: "{app}"; Components: a b; »

Будет установлено, если выбрано A и B, либо выбрано A или B. Данное условие равнозначно "A or B". Условия для параметра Components и принцип работы, одинаковы для всех секций, где этот параметр может применяться, в том числе и для [Files].
Если уж совсем коротко.

vk_k14m@vk 31-10-2017 15:55 2774580

Цитата:

Цитата Iska
Данное место следует понимать как «Параметры любых разделов, принимающих общие параметры, за исключением разделов [Types], [Components] и [Tasks]». То есть [Files] входит в этот перечень «all sections whose entries are separated into parameters, except [Types], [Components] and [Tasks]», и к нему в полной мере должно относиться (по крайней мере, в теории — я не проверял специально) использование «boolean expressions» в параметрах «Components» и «Tasks». »

Вот теперь все доходчиво и понятно. Спасибо

vk_k14m@vk 04-11-2017 22:38 2775437

Еще вопрос. Флаг ignoreversion. Как он работает, не совсем понял из того описания что к нему прилагается. Он же применим ко всем фалам? Или только к EXE?

Как я понял, если убрать этот флаг, то установщик будет записывать версии ВСЕХ файлов? А потом при повторной установке той же программы в ту же папку, установщик начнет сверять версии тех файлов что уже есть, с теми что устанавливает. И если они совпадают, то просто пропускать. А при несовпадении заменять. Я правильно говорю? Таким образом можно будет например восстанавливать поврежденные файлы приложения что б оно снова работало?

И как он вообще проверяет файлы? Как читает версию? Насколько файлы должны быть похожи что б он не заметил подмены? Например два текстовых файлы, в каждом по 100 символов, и во втором файле всего 1 символ отсутствует или изменен. Он увидит разницу?

Iska 04-11-2017 23:34 2775443

vk_k14m@vk, номер версии применим к исполняемым файлам, к библиотекам, к определённого вида шрифтам. Номер версии может заноситься в ресурсы исполняемого файла/библиотеки разработчиком/компилятором при его создании.

Цитата:

Цитата vk_k14m@vk
И как он вообще проверяет файлы? Как читает версию? »

Файлы — никак не проверяет. Для сравнения номеров версий может банально использовать функцию WinAPI GetFileVersionInfo function (Windows)/GetFileVersionInfoEx function (Windows).

Вообще пробежитесь по разделу Version Information (Windows), станет понятнее.

Цитата:

Цитата vk_k14m@vk
Насколько файлы должны быть похожи что б он не заметил подмены? »

Без разницы. Содержимое файлов не проверяется никак.

Цитата:

Цитата vk_k14m@vk
Например два текстовых файлы, в каждом по 100 символов, и во втором файле всего 1 символ отсутствует или изменен. Он увидит разницу? »

Текстовые файлы не содержат информации о версии. Содержимое же файлов и вовсе не имеет значения.

vk_k14m@vk 05-11-2017 01:47 2775455

Iska, ясно. Но ответ все же не полный. Если установить приложение. А потом снова запустить установщик и снова попробовать установить приложение в ту же папку. Что он сделает с файлами которые уже есть? Пропустит, заменит или спрашивать будет? С флагом ignoreversion он заменит все. А что будет без него? На это ответ я не увидел...

З.Ы. И не подсовывайте мне инглиш сайты, знаете же что я не знаю язык. А значит и читать там ничего не буду.

Iska 05-11-2017 02:37 2775456

Цитата:

Цитата vk_k14m@vk
А что будет без него? На это ответ я не увидел... »

Понял Вас. Откровенно говоря, даже не задумывался, поскольку не требовалось.

Inno Setup Knowledge Base:
Цитата:

PRB: Setup isn't replacing a particular file

Compare the version numbers on the existing file and the new file by right-clicking them in Windows Explorer and selecting Properties. By default, Inno Setup will not replace an existing file unless the existing file has no version info or has a lower version number.

If you're using a version of Windows prior to Windows 2000 and the new file appears to have a higher version number according to Windows Explorer, then it may be that the binary version number ("FILEVERSION") is not in sync with (e.g. lower than) the textual version number. The binary version numbers are what Inno Setup actually compares.

The /LOG switch available in Inno Setup 4.2.1 and later can be handy here. The log will show the binary version numbers of files and why certain files were not replaced.

If you want to force a file to be replaced regardless of its version number, add the ignoreversion flag to the [Files] section entry. This flag should only be used on files private to your application, never on shared system files.
Можете использовать Google Переводчик.

Цитата:

Цитата vk_k14m@vk
З.Ы. И не подсовывайте мне инглиш сайты, знаете же что я не знаю язык. А значит и читать там ничего не буду. »

Прошу прощения, всего не упомнишь ;).

vk_k14m@vk 05-11-2017 03:26 2775458

Iska
Цитата:

Цитата Iska
By default, Inno Setup will not replace an existing file unless the existing file has no version info or has a lower version number. »

Цитата:

Цитата Гуглоперевод
По умолчанию Inno Setup не заменит существующий файл, если существующий файл не имеет информации о версии или имеет более низкий номер версии.

Тоесть если есть файл с версией 1.0. А я устанавливаю 2.0, то первый файл заменен не будет? И это касается только тех файлов, которые имеют версию вообще. Файлы без версии заменять не будет.

Как то это глупо. Я имею ввиду про более низкий номер версии. Очевидно же что 2.0 более новый файл. Но он не будет установлен?

Iska 05-11-2017 06:41 2775459

Гуглопереводчик избрал худший вариант из невозможных:
Скрытый текст

Впрочем, и все остальные машинные переводчики «лажают» так же, пусть и с некоторыми отклонениями. И никакие «нейронные сети» тут не помогают.


Понимать «unless» следует как противопоставление, здесь — «за исключением следующих случаев». То есть, в случае отсутствия флага, получается так:
Цитата:

Цитата vk_k14m@vk
Тоесть если есть файл с версией 1.0. А я устанавливаю 2.0, то первый файл заменен не будет? »

Будет. А вот если попытаетесь наоборот — то не будет.

Цитата:

Цитата vk_k14m@vk
Файлы без версии заменять не будет. »

Будет.

Например, у нас есть два комплекта установки. В оба комплекта входят по паре одноимённых файлов, например, «docs.txt» и «app.exe», разного содержимого. Кроме того, «app.exe» имеет в первом комплекте версию, например, «1.0.0.0» и во втором — «1.5.0.0».
  • Мы производим установку первого комплекта, затем второго поверх первого. Оба файла из первоначального комплекта установки будут заменены файлами из второго комплекта: текстовый файл, как не имеющий версии, будет заменён безусловно, а версия нового, исполняемого файла из второго комплекта, более высокая.
  • Мы производим установку второго комплекта, затем первого поверх второго. Текстовый файл, как не имеющий версии, опять же, будет заменён безусловно, а исполняемый файл — нет, поскольку версия нового, исполняемого файла из первого комплекта, более низкая (а вот если задать флаг — будет заменён безусловно, без оглядки на версию).

R.i.m.s.k.y. 05-11-2017 07:44 2775460

скажите, пожалуйста, inno умеет переменные с плавающей точкой? нужно определить AR монитора и в зависимости от него выполнить некоторые действия

Iska 05-11-2017 08:50 2775464

R.i.m.s.k.y., если речь про встроенный язык Pascal Scripting — то да, там такое есть. Например:
Код:

function InitializeSetup(): Boolean;
  var MyVar: Single;
begin
  MsgBox(FloatToStr(10.0 / 3.0), mbInformation, MB_OK);

  MyVar := 9.0 / 2;
  MsgBox(FloatToStr(MyVar),      mbInformation, MB_OK);
end;


R.i.m.s.k.y. 05-11-2017 09:04 2775465

не, мне хотелось бы как-то так
Код:

var ar1, ar2 : float
ar1 := 25/98
ar2 := 3.1415926
if ar1 > ar2 then ...


Iska 05-11-2017 17:52 2775533

Цитата:

Цитата R.i.m.s.k.y.
не, мне хотелось бы как-то так »

R.i.m.s.k.y., можно «и так»:
Код:

function InitializeSetup(): Boolean;
  var ar1, ar2 :Single;
begin
  ar1:= 25.0 / 98;
  ar2:= 3.1415926;

  if ar1 > ar2 then
    MsgBox(Format('ar1=%f ar2=%f ar1 > ar2', [ar1, ar2]), mbInformation, MB_OK)
  else
    MsgBox(Format('ar1=%f ar2=%f ar1 <= ar2', [ar1, ar2]), mbInformation, MB_OK);
end;

Скрытый текст

R.i.m.s.k.y. 05-11-2017 18:28 2775542

Цитата:

Цитата Iska
Single »

вот! я то писал и float и extended
а single не додумался

Iska 05-11-2017 18:41 2775552

R.i.m.s.k.y., ну, и обратите внимание, что хотя для получения результата деления двух целых чисел в виде числа с плавающей запятой достаточно переменной данного типа, но чтобы получить правильный результат, хотя бы один из операндов деления должен быть тоже числом с плавающей запятой. Иначе сначала получается результат в виде целого, который только потом преобразуется к числу с плавающей запятой и может оказаться так:
Скрытый текст

R.i.m.s.k.y. 05-11-2017 18:48 2775555

Iska, ничоси нюансы! дзинкуе!

Iska 05-11-2017 20:07 2775573

R.i.m.s.k.y., нет, это издержки обучения широкого профиля ;). Чаще полезные, но иногда начинаешь путать, что к какому языку относится.

vk_k14m@vk 06-11-2017 04:59 2775656

Народ. Когда то давно, товарищ R.i.m.s.k.y. подкинул мне полезный код.
Код:

[Files]                                                                                                   
Source: "D:\AA2Decrypt_unpack.bat"; DestDir: "{app}"; Components: Main; AfterInstall: install_this_file_1; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall solidbreak

[Сode]
procedure install_this_file_1();
var res:integer; file, path : string;
begin
  file := ExpandConstant('{app}\AA2Decrypt_unpack.bat'); path := ExpandConstant('{app}');
  if FileExists(file) then Exec(file, 'параметры',path,SW_SHOW,ewWaitUntilTerminated,res) else MsgBox('Файл' + ' ' + file + #13#10 + 'не найден', mbInformation, MB_OK);
end;

Думаю вам то ясно что он делает. Запускает файла AA2Decrypt_unpack.bat сразу же после его установки.

А можно как то сделать его скрытый запуск? Что б не отображалось окно командной строки. В секции [Run] есть фалг runhidden. Хотелось бы что-то подобное...

Iska 06-11-2017 05:34 2775658

vk_k14m@vk, установите третий чётвёртый параметр функции Exec() равным нулю.

vk_k14m@vk 06-11-2017 05:44 2775659

Цитата:

Цитата Iska
установите третий параметр функции Exec() равным нулю. »

Покажите конкретно. На примере. Вместо
Exec(file, 'параметры',path,SW_SHOW
подставить
Exec(file, 'параметры',path,0 ?

Или не 0 а SW_HIDE?

Iska 06-11-2017 06:58 2775662

vk_k14m@vk, да, четвёртый параметр. Надо ж было мне так обсчитаться :(. Приношу Вам свои извинения.

Цитата:

Цитата vk_k14m@vk
Или не 0 а SW_HIDE? »

Если SW_HIDE равно 0, то можно :). Надо полагать, что так оно и есть. В любом случае всё сводится к функции WinAPI CreateProcess().

vk_k14m@vk 06-11-2017 07:00 2775664

Iska, что ж буду проверять)

Nordek 06-11-2017 10:07 2775686

Цитата:

Цитата vk_k14m@vk
В секции [Run] есть фалг runhidden. »

Код:

  SW_HIDE
  SW_SHOWNORMAL
  SW_SHOWMINIMIZED
  SW_SHOWMAXIMIZED
  SW_SHOW
  SW_SHOWMINNOACTIVE

Само за себя выдаёт: Вместо SW_SHOW задайте SW_HIDE.

R.i.m.s.k.y. 09-11-2017 18:30 2776441

скажите, пожалуйста, можно ли как-то научить писать инно в ini через секцию ini в UTF8?
или как-то сконвертировать потом сформированный установщиком ниншник в utf8?

nik1967 11-11-2017 07:20 2776796

R.i.m.s.k.y., а что, разве не сохраняет в UTF8?
Скрытый текст

Iska 11-11-2017 08:02 2776802

nik1967, надо сохранение в UTF-8 создаваемого разделом [INI] инсталлятора ini-файла. Но дело в том, что WritePrivateProfileString()/GetPrivateProfileString() не работают с UTF-8. Ещё не существующий файл будет создаваться посредством WritePrivateProfileStringA() в ANSI/1251. Если предварительно создать искомый пустой ini-файл в UTF-16LE/1200 — будет использоваться WritePrivateProfileStringW(). Аналогично будет работать и при удалении. Но вот путей совместить раздел [INI] и UTF-8 я не вижу.

Можно попробовать оставить создание ini-файла из раздела [INI] как есть, а на заключительном этапе после установки просто взять и кодом прочитать содержимое файла, а затем посредством SaveStringsToUTF8File() перезаписать его. Для деинсталляции проделать обратное — на предварительном этапе прочитать UTF-8 и записать содержимое в ANSI, чтобы деинсталлятор смог отработать указанными выше функциями. Это, конечно, предварительные соображения, я их даже не проверял.

P.S. По поводу скриншота с примером: если в файле нет многобайтовых символов (например, той же кириллицы), то UTF-8 без BOM ничем не отличается от ANSI/1251.

El Sanchez 11-11-2017 11:59 2776825

Цитата:

Цитата R.i.m.s.k.y.
можно ли как-то научить писать инно в ini через секцию ini в UTF8? »

R.i.m.s.k.y.,
Скрытый текст

Код:

[INI]
Filename: "{src}\test.ini"; Section: "test"; Key: "test"; String: {code:UTF8Encode|this is чёрт знает что за うんこ}

[Code]
const
 
CP_ACP = 0;
  CP_UTF8 = 65001;

// Unicode and Character Set Functions
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: Integer; lpMultiByteStr: AnsiString; cbMultiByte, lpDefaultChar: Integer; lpUsedDefaultChar: Longint): Integer; external 'WideCharToMultiByte@kernel32.dll stdcall';
function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: AnsiString; cbMultiByte: Integer; lpWideCharStr: string; cchWideChar: Integer): Integer; external 'MultiByteToWideChar@kernel32.dll stdcall';

/////////////////////////////////////////////////
function UTF8Encode(const Value: string): string;
var
 
Len: Integer;
  UTF16Buffer: string;
  UTF8Buffer: AnsiString;
begin
  if
Value = '' then Exit;
#ifndef UNICODE
 
Len := MultiByteToWideChar(CP_ACP, 0, Value, -1, '', 0);
  if Len = 0 then Exit;
  UTF16Buffer := StringOfChar(#0, Len shl 1);
  if MultiByteToWideChar(CP_ACP, 0, Value, -1, UTF16Buffer, Len) = 0 then Exit;
#else
 
UTF16Buffer := Value;
#endif
 
Len := WideCharToMultiByte(CP_UTF8, 0, UTF16Buffer, -1, '', 0, 0, 0);
  if Len = 0 then Exit;
  UTF8Buffer := StringOfChar(#0, Len - 1);
  if WideCharToMultiByte(CP_UTF8, 0, UTF16Buffer, -1, UTF8Buffer, Len, 0, 0) = 0 then Exit;
  Result := UTF8Buffer;
end;


vk_k14m@vk 13-11-2017 20:53 2777319

Как можно запускать приложение через секцию [Сode] с параметрами.

Например в секции [Run] все просто

Код:

[Run]
Filename: "{sys}\CMD.EXE";  WorkingDir: "{app}\data"; Parameters: /C RD /S /Q jg2e00_00_00

Я использую такой код
Код:

[Соde]
procedure unpack_this_file_xx();
var res:integer; file, path : string;
begin
  file := ExpandConstant('{app}\data\Decrypt.bat'); path := ExpandConstant('{app}');
  if FileExists(file) then Exec(file, 'параметры',path,SW_HIDE,ewWaitUntilTerminated,res) else MsgBox('Файл' + ' ' + file + #13#10 + 'не найден', mbInformation, MB_OK);
end;

Как я понял file в [code] то же самое что Filename в [Run]. А path в [code] как WorkingDir в [Run]. Значит к "var res:integer; file, path, " нужно написать что-то подобное для параметров?

***

И еще. Можно сделать еще одно окно с индикатором выполнения? У меня через секцию [Сode] запускается 101 приложение. И в [Run] еще 178. Хотелось бы наглядно видеть ход их выполнения...

pollipen 15-11-2017 17:00 2777763

парни, проблема я отключил папку установки , но теперь не отображается дополнительные программы Microsoft Visual C++ может кто поправит
скрипт

[Setup]
DisableWelcomePage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
Compression=none
RestartIfNeededByRun=no
AppName=vbvb
AppVersion=5
CreateAppDir=False
[Files]
Source: "C:\Users\ww\Desktop\длполнение\W.bmp"; Flags: dontcopy

[Run]
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ 2005 Redist...; Flags: skipifdoesntexist; Check: MicrosoftVisualCheck

Код:

var
BitmapImage1: TBitmapImage;
Panel1: TPanel;
Reg: TLabel;
DopSoft: TNewCheckBox;

function MicrosoftVisualCheck: Boolean;
begin
Result := DopSoft.Checked;
end;

procedure InitializeWizard();
begin
WizardForm.ClientWidth:=ScaleX(500);
WizardForm.ClientHeight:=ScaleY(120);
WizardForm.Center;
WizardForm.OuterNotebook.Hide;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel.Hide;

BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(5);
Width := ScaleX(64);
Height := ScaleY(64);
ExtractTemporaryFile('W.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\W.bmp'));
end;

Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Parent := WizardForm;
Left := ScaleX(80);
Top := ScaleY(20);
Width := ScaleX(320);
Height := ScaleY(40);
BorderStyle := bsSingle;
end;

with WizardForm.DirEdit do
begin
Top := ScaleY(8);
Left := ScaleX(5);
Parent := Panel1;
Width := ScaleX(285)
Color := clMenu;
BorderStyle := bsNone;
Font.Name := 'Times New Roman';
Font.Height := -16;
end;

Reg := TLabel.Create(WizardForm);
with Reg do
begin
Parent := WizardForm;
Caption := 'Зарегистрированная русская версия ';
Left := ScaleX(150);
Top := ScaleY(65);
Width := ScaleX(209);
Height := ScaleY(13);
end;

DopSoft := TNewCheckBox.Create(WizardForm);
with DopSoft do
begin
Parent := WizardForm;
Left := ScaleX(150);
Top := ScaleY(90);
Width := ScaleX(129);
Height := ScaleY(17);
Caption := 'Microsoft Visual C++';
Checked:=True;
end;

with WizardForm.NextButton do
begin
Left := ScaleX(405);
Top := ScaleY(20);
Width := ScaleX(90);
Height := ScaleY(40);
Font.Name := 'Times New Roman';
end;

with WizardForm.CancelButton do
begin
Left := ScaleX(405);
Top := ScaleY(20);
Width := ScaleX(90);
Height := ScaleY(40);
Font.Name := 'Times New Roman';
end;
with WizardForm.ProgressGauge do
begin
Top := ScaleY(20);
Left := ScaleX(80);
Width := ScaleX(320);
Height := ScaleY(40);
Parent := WizardForm;
end;
with WizardForm.StatusLabel do
begin
Left := ScaleX(80);
Top := ScaleY(70);
Parent := WizardForm;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.ProgressGauge.Hide;
Panel1.Hide;
Reg.Hide;
DopSoft.Hide;
WizardForm.StatusLabel.Hide;
case CurPageID of
wpSelectDir:
begin
Panel1.Show;
Reg.Show;
DopSoft.Show;
end;
wpInstalling:
begin
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
end;
end;
end;


xryst 18-11-2017 01:13 2778324

Может ли Inno Setup проверять наличие нужной папки перед установкой? и если ее нет, то завершать процесс установки.

Iska 18-11-2017 01:28 2778326

Может. Что Вы подразумеваете под «нужной папкой»?

vk_k14m@vk 18-11-2017 02:25 2778328

А меня уже принято игнорить?

R.i.m.s.k.y. 18-11-2017 09:45 2778346

Цитата:

Цитата vk_k14m@vk
Значит к "var res:integer; file, path, " нужно написать что-то подобное для параметров? »

нет, это переменные
первое - целочисленное, используется для кода ошибок, второе - строковое, задаешь пути в них
Что не работает то?

vk_k14m@vk 18-11-2017 12:09 2778372

Цитата:

Цитата R.i.m.s.k.y.
нет, это переменные
первое - целочисленное, используется для кода ошибок, второе - строковое, задаешь пути в них
Что не работает то? »

Вот опять меня буд-то не понимают. Перечитайте еще раз мое сообщение. Медленно, не спеша. Если не поняли вопрос, перечитайте еще раз.

Nordek 18-11-2017 13:50 2778397

Цитата:

Цитата vk_k14m@vk
Как можно запускать приложение через секцию [Сode] с параметрами. »

Цитата:

Цитата vk_k14m@vk
Вот опять меня буд-то не понимают. »

Пример
Код:

[Code]
var
 
IS_CP: TWizardPage;
  B_1: TNewButton;
  B_2: TNewButton;
  ResultCode: Integer;

procedure B_1Click(Sender: TObject);
begin
 
Exec(ExpandConstant('{pf}\7-Zip\7zFM.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end;

procedure B_2Click(Sender: TObject);
begin
 
Exec(ExpandConstant('{pf}\7-Zip\7zG.exe'), ExpandConstant('a -t7z -m0=LZMA2 -mmt=on -mx9 -md=64m -mfb=64 -ms=4g -mqs=on -bb0 -sccUTF-8 "-w{tmp}" "{userdesktop}\Default.7z" "{localappdata}\Google\Chrome\User Data\Default"'), '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end;

procedure app_7z;
begin
 
IS_CP := CreateCustomPage(wpWelcome, 'Caption', 'Description');

  B_1 := TNewButton.Create(WizardForm);
  with B_1 do
  begin
   
Parent := IS_CP.Surface;
    SetBounds(ScaleX(16), ScaleY(16), ScaleX(100), ScaleY(25));
    Caption := 'Run 7-Zip';
    OnClick := @B_1Click;
  end;

  B_2 := TNewButton.Create(WizardForm);
  with B_2 do
  begin
   
Parent := IS_CP.Surface;
    SetBounds(ScaleX(16), ScaleY(48), ScaleX(100), ScaleY(25));
    Caption := 'Create Backup';
    OnClick := @B_2Click;
  end;
end;

procedure InitializeWizard();
begin
 
app_7z;
end;



Цитата:

Цитата vk_k14m@vk
Вот опять меня буд-то не понимают. »

Прикинь, в справке можно найти!?

ENERGES 26-11-2017 16:39 2780284

как сделать такое окно https://s8.hostingkartinok.com/uploa...531f517572.png
сам скрипт http://rgho.st/6HNm67hXF

TheLeon 29-11-2017 19:04 2781058

Здравствуйте ещё раз, уважаемые администрация и пользователи OSZone.net. У меня появился опять вопрос, но так вот: как при установке заменить в файле(формата .img) какие-либо файлы(формата .txd и .dff), а файлы, которые заменяют, перенести в, созданную установщиком, папку-бэкап?

El Sanchez 30-11-2017 10:29 2781171

Цитата:

Цитата web_form
как сделать такое окно »

web_form, GetOpenFileName
Цитата:

Цитата TheLeon
как при установке заменить в файле(формата .img) какие-либо файлы(формата .txd и .dff), а файлы, которые заменяют, перенести в, созданную установщиком, папку-бэкап? »

TheLeon, для начала нужно найти консольную утилиту для работы с img-файлами.

ENERGES 30-11-2017 11:45 2781184

El Sanchez, а как это прописать в скрипте?

El Sanchez 30-11-2017 15:33 2781226

Цитата:

Цитата web_form
а как это прописать в скрипте? »

web_form, место в скрипте найдете по комментарию
Скрытый текст

Код:

// далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
FileName := ExpandConstant('{src}\data1.bin');
if not FileExists(FileName) then
 
GetOpenFileName('Открытие', FileName, ExpandConstant('{src}'), 'Arc files (data*.bin)|*.bin|All Files|*.*', 'bin');
if not ISARCExtract(0, 100, FileName, ExpandConstant('{app}'), '', False, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then Break;


ENERGES 30-11-2017 16:01 2781238

El Sanchez, выдает ошибки при компиляций https://s8.hostingkartinok.com/uploa...9d605eb966.png

Iska 30-11-2017 16:13 2781245

web_form, ошибка приведена непосредственно в тексте сообщения. Опишите указанную переменную в коде.

ENERGES 30-11-2017 16:33 2781253

Iska, как?

Iska 30-11-2017 17:06 2781259

web_form, так, как это сделано в примере по ссылке, приведённой коллегой El Sanchez выше: в области описаний переменных — имя переменной и её тип.

ENERGES 30-11-2017 17:12 2781260

Iska, и что мне делать,из за чего ошибка?

El Sanchez 30-11-2017 17:30 2781263

Цитата:

Цитата web_form
и что мне делать,из за чего ошибка? »

web_form, необъявленная переменная FileName, после объявления процедуры procedure CurStepChanged(CurStep: TSetupStep); идет блок объявления локальных переменных (начинается с var), в блоке допишите FileName: string;

Iska 30-11-2017 17:50 2781268

Цитата:

Цитата web_form
из за чего ошибка? »

Перечитать написанное мною ранее. Там всё сказано.

Цитата:

Цитата web_form
Iska, и что мне делать, »

Начать изучение языка.

ENERGES 30-11-2017 18:28 2781276

Del

Iska 30-11-2017 18:59 2781285

Цитата:

Цитата web_form
как в скрипте прописать Удалить и Играть »

Перестать задавать глупые вопросы и начать изучение базовых основ InnoSetup.

web_form, на кой ляд Вы взялись за создание инсталляторов, если не стремитесь ни пальцем шевельнуть, ни мозгами?

ENERGES 30-11-2017 19:56 2781300

Iska, я уже половину скрипта исправил,осталось толь ка маленькие детали

TheLeon 04-12-2017 16:10 2782262

Нужна помощь, отображаются только первые четыре картинки.
Components

Код:

Name: AKM; Description: AKM(AK-47):; Types: full; Flags: fixed;
Name: AKM\OPTION1; Description: "Вариант №1"; Types: full; Flags: exclusive;
Name: AKM\OPTION2; Description: "Вариант №2"; Types: custom; Flags: exclusive;
Name: AKM\OPTION3; Description: "Вариант №3"; Types: custom; Flags: exclusive;
Name: AKM\OPTION4; Description: "Вариант №4"; Types: custom; Flags: exclusive;

Name: COLT45; Description: Colt.45(Pistol):; Types: full; Flags: fixed;
Name: COLT45\OPTION1; Description: "Вариант №1"; Types: full; Flags: exclusive;
Name: COLT45\OPTION2; Description: "Вариант №2"; Types: custom; Flags: exclusive;
Name: COLT45\OPTION3; Description: "Вариант №3"; Types: custom; Flags: exclusive;
Name: COLT45\OPTION4; Description: "Вариант №4"; Types: custom; Flags: exclusive;

Name: KAR98K; Description: Kar98k(Rifle):; Types: full; Flags: fixed;
Name: KAR98K\OPTION1; Description: "Вариант №1"; Types: full; Flags: exclusive;
Name: KAR98K\OPTION2; Description: "Вариант №2"; Types: custom; Flags: exclusive;
Name: KAR98K\OPTION3; Description: "Вариант №3"; Types: custom; Flags: exclusive;

Name: M16A4; Description: M16A4(M4):; Types: full; Flags: fixed;
Name: M16A4\OPTION1; Description: "Вариант №1"; Types: full; Flags: exclusive;
Name: M16A4\OPTION2; Description: "Вариант №2"; Types: custom; Flags: exclusive;
Name: M16A4\OPTION3; Description: "Вариант №3"; Types: custom; Flags: exclusive;
Name: M16A4\OPTION4; Description: "Вариант №4"; Types: custom; Flags: exclusive;

Name: UMP9; Description: UMP9(MP5):; Types: full; Flags: fixed;
Name: UMP9\OPTION1; Description: "Вариант №1"; Types: full; Flags: exclusive;
Name: UMP9\OPTION2; Description: "Вариант №2"; Types: custom; Flags: exclusive;

Name: S1897; Description: S1897(ShotGun):; Types: full; Flags: fixed;
Name: S1897\OPTION1; Description: "Вариант №1"; Types: full; Flags: exclusive;
Name: S1897\OPTION2; Description: "Вариант №2"; Types: custom; Flags: exclusive;

Name: UZI; Description: UZI(Micro SMG):; Types: full; Flags: fixed;
Name: UZI\OPTION1; Description: "Вариант №1"; Types: full; Flags: exclusive;
Name: UZI\OPTION2; Description: "Вариант №2"; Types: custom; Flags: exclusive;
Name: UZI\OPTION3; Description: "Вариант №3"; Types: custom; Flags: exclusive;
Name: UZI\OPTION4; Description: "Вариант №4"; Types: custom; Flags: exclusive; 

[Files]
Source: "files\other\tool.bat"; DestDir: "{app}"; Flags: ignoreversion
Source: "files\other\temp.bat"; DestDir: "{app}"; Flags: ignoreversion
Source: "files\other\tool.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "files\other\img.exe"; DestDir: "{app}"; Flags: ignoreversion
 
Source: "files\textures\akm\option 1\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: AKM\OPTION1;
Source: "files\textures\akm\option 2\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: AKM\OPTION2;
Source: "files\textures\akm\option 3\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: AKM\OPTION3;
Source: "files\textures\akm\option 4\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: AKM\OPTION4;

Source: "files\textures\colt45\option 1\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: COLT45\OPTION1;
Source: "files\textures\colt45\option 2\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: COLT45\OPTION2;
Source: "files\textures\colt45\option 3\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: COLT45\OPTION3;
Source: "files\textures\colt45\option 4\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: COLT45\OPTION4;

Source: "files\textures\kar98k\option 1\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: KAR98K\OPTION1;
Source: "files\textures\kar98k\option 2\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: KAR98K\OPTION2;
Source: "files\textures\kar98k\option 3\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: KAR98K\OPTION3;

Source: "files\textures\m16a4\option 1\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: M16A4\OPTION1;
Source: "files\textures\m16a4\option 2\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: M16A4\OPTION2;
Source: "files\textures\m16a4\option 3\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: M16A4\OPTION3;
Source: "files\textures\m16a4\option 4\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: M16A4\OPTION4;

Source: "files\textures\ump9\option 1\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: UMP9\OPTION1;
Source: "files\textures\ump9\option 2\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: UMP9\OPTION2;

Source: "files\textures\s1897\option 1\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: S1897\OPTION1;
Source: "files\textures\s1897\option 2\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: S1897\OPTION2;

Source: "files\textures\uzi\option 1\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: UZI\OPTION1;
Source: "files\textures\uzi\option 2\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: UZI\OPTION2;
Source: "files\textures\uzi\OPTION 3\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: UZI\OPTION3;
Source: "files\textures\uzi\OPTION 4\*"; DestDir: "{app}\Textures"; Flags: ignoreversion; Components: UZI\OPTION4;

Source: "images\textures\*"; DestDir: {tmp}; Flags: dontcopy;


Code

Код:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  case CurPageID of
    wpSelectDir:
      if not FileExists(ExpandConstant('{app}\gta_sa.exe')) then begin
        MsgBox('Ошибка! Вы должны указать путь к папке Grand Theft Auto - San Andreas(к файлу gta_sa.exe).', mbError, MB_OK);
        Result := False;
      end;
  end;
end;
procedure SomeProc;
begin
end;
var
DelTmp: TNewCheckBox;
function DelTmpCheck(): boolean;
begin
  result := DelTmp.Checked;
end;

var
  ImagePanel: TPanel;
  ComponentsInfoImage: TBitmapImage;

procedure ComponentsListClickCheck(Sender: TObject);
begin
  If IsComponentSelected('AKM\OPTION1') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\akm_1.bmp')) else
  If IsComponentSelected('AKM\OPTION2') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\akm_2.bmp')) else
  If IsComponentSelected('AKM\OPTION3') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\akm_3.bmp')) else
  If IsComponentSelected('AKM\OPTION4') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\akm_4.bmp')) else
  If IsComponentSelected('COLT45\OPTION1') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\colt45_1.bmp')) else
  If IsComponentSelected('COLT45\OPTION2') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\colt45_2.bmp')) else
  If IsComponentSelected('COLT45\OPTION3') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\colt45_3.bmp')) else
  If IsComponentSelected('COLT45\OPTION4') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\colt45_4.bmp')) else
  If IsComponentSelected('KAR98K\OPTION1') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\kar98k_1.bmp')) else
  If IsComponentSelected('KAR98K\OPTION2') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\kar98k_2.bmp')) else
  If IsComponentSelected('KAR98K\OPTION3') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\kar98k_3.bmp')) else
  If IsComponentSelected('M16A4\OPTION1') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\m4a16_1.bmp')) else
  If IsComponentSelected('M16A4\OPTION2') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\m4a16_2.bmp')) else
  If IsComponentSelected('M16A4\OPTION3') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\m4a16_3.bmp')) else
  If IsComponentSelected('M16A4\OPTION4') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\m4a16_4.bmp')) else
  If IsComponentSelected('UMP9\OPTION1') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\ump9_1.bmp')) else
  If IsComponentSelected('UMP9\OPTION2') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\ump9_2.bmp')) else
  If IsComponentSelected('S1897\OPTION1') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\s1897_1.bmp')) else
  If IsComponentSelected('S1897\OPTION2') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\s1897_2.bmp')) else
  If IsComponentSelected('S1897\OPTION3') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\uzi_1.bmp')) else
  If IsComponentSelected('UZI\OPTION2') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\uzi_2.bmp')) else
  If IsComponentSelected('UZI\OPTION3') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\uzi_3.bmp')) else
  If IsComponentSelected('UZI\OPTION4') then
    ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\uzi_4.bmp'));
end;


procedure InitializeWizard();
begin
  WizardForm.TYPESCOMBO.Visible:= false;
  WizardForm.ComponentsList.Visible := True;
  WizardForm.ComponentsList.Height := ScaleX(150);
  WizardForm.ComponentsList.Top := ScaleX(47);
  WizardForm.ComponentsList.Width := ScaleX(232);
  WizardForm.ComponentsDiskSpaceLabel.Visible := True;

  ImagePanel := TPanel.Create(WizardForm);
  ImagePanel.Parent := WizardForm.SelectComponentsPage;
  ImagePanel.Caption := '';
  ImagePanel.Top := ScaleX(47);
  ImagePanel.Left := ScaleX(240);
  ImagePanel.Width := ScaleX(177);
  ImagePanel.Height := ScaleX(151);
  ImagePanel.BevelInner := bvRaised;
  ImagePanel.BevelOuter := bvLowered;

  ExtractTemporaryFile('akm_1.bmp');
  ExtractTemporaryFile('akm_2.bmp');
  ExtractTemporaryFile('akm_3.bmp');
  ExtractTemporaryFile('akm_4.bmp');
  ExtractTemporaryFile('colt45_1.bmp');
  ExtractTemporaryFile('colt45_2.bmp');
  ExtractTemporaryFile('colt45_3.bmp');
  ExtractTemporaryFile('colt45_4.bmp');
  ExtractTemporaryFile('kar98k_1.bmp');
  ExtractTemporaryFile('kar98k_2.bmp');
  ExtractTemporaryFile('kar98k_3.bmp');
  ExtractTemporaryFile('m4a16_1.bmp');
  ExtractTemporaryFile('m4a16_2.bmp');
  ExtractTemporaryFile('m4a16_3.bmp');
  ExtractTemporaryFile('m4a16_4.bmp');
  ExtractTemporaryFile('ump9_1.bmp');
  ExtractTemporaryFile('ump9_2.bmp');
  ExtractTemporaryFile('s1897_1.bmp');
  ExtractTemporaryFile('s1897_2.bmp');
  ExtractTemporaryFile('uzi_1.bmp');
  ExtractTemporaryFile('uzi_2.bmp');
  ExtractTemporaryFile('uzi_3.bmp');
  ExtractTemporaryFile('uzi_4.bmp');

  WizardForm.ComponentsList.OnClickCheck:= @ComponentsListClickCheck;
  ComponentsInfoImage:= TBitmapImage.Create(WizardForm);
  ComponentsInfoImage.Parent:= ImagePanel;
  ComponentsInfoImage.Top:= ScaleY(4);
  ComponentsInfoImage.Left:= ScaleX(4);
  ComponentsInfoImage.Width:= ScaleX(168);
  ComponentsInfoImage.Height:= ScaleY(142);
  ComponentsInfoImage.Stretch:= True;
  ComponentsInfoImage.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectComponents: ComponentsListClickCheck(nil);
  end;
end;


El Sanchez 05-12-2017 09:07 2782412

Цитата:

Цитата TheLeon
Нужна помощь, отображаются только первые четыре картинки. »

TheLeon, в ComponentsListClickCheck после выбора одного из компонентов AKM\OPTION* будет выход из условия, все остальные компоненты не проверятся никогда. В этих строках вместо else поставьте ;, вместо S1897\OPTION3 должно быть UZI\OPTION1 (опечатка?)
Код:

ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\akm_4.bmp'));
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\colt45_4.bmp'));
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\kar98k_3.bmp'));
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\m4a16_4.bmp'));
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\ump9_2.bmp'));
ComponentsInfoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\s1897_2.bmp'));


TheLeon 05-12-2017 13:05 2782465

El Sanchez, также вопрос, как во вкладке выбора компонентов убрать размерность для следующих пунктов?
Components

Код:

Name: MAIN; Description: Основное оружие:; Types: full; Flags: fixed; <----- убрать размерность
Name: MAIN\AKM; Description: AKM(AK-47):; Types: full; Flags: fixed;  <----- убрать размерность
Name: MAIN\AKM\OPTION1; Description: "Вариант №1"; Flags: exclusive;
Name: MAIN\AKM\OPTION2; Description: "Вариант №2"; Flags: exclusive;
Name: MAIN\AKM\OPTION3; Description: "Вариант №3"; Flags: exclusive;
Name: MAIN\AKM\OPTION4; Description: "Вариант №4"; Flags: exclusive;

Name: MAIN\KAR98K; Description: Kar98k(Rifle):; Types: full; Flags: fixed; <----- убрать размерность
Name: MAIN\KAR98K\OPTION1; Description: "Вариант №1"; Flags: exclusive;
Name: MAIN\KAR98K\OPTION2; Description: "Вариант №2"; Flags: exclusive;
Name: MAIN\KAR98K\OPTION3; Description: "Вариант №3"; Flags: exclusive;

Name: MAIN\M16A4; Description: M16A4(M4):; Types: full; Flags: fixed; <----- убрать размерность
Name: MAIN\M16A4\OPTION1; Description: "Вариант №1";Flags: exclusive;
Name: MAIN\M16A4\OPTION2; Description: "Вариант №2";Flags: exclusive;
Name: MAIN\M16A4\OPTION3; Description: "Вариант №3";Flags: exclusive;
Name: MAIN\M16A4\OPTION4; Description: "Вариант №4";Flags: exclusive;

Name: MAIN\UMP9; Description: UMP9(MP5):; Types: full; Flags: fixed; <----- убрать размерность
Name: MAIN\UMP9\OPTION1; Description: "Вариант №1";Flags: exclusive;
Name: MAIN\UMP9\OPTION2; Description: "Вариант №2";Flags: exclusive;

Name: MAIN\S1897; Description: S1897(ShotGun):; Types: full; Flags: fixed; <----- убрать размерность
Name: MAIN\S1897\OPTION1; Description: "Вариант №1";Flags: exclusive;
Name: MAIN\S1897\OPTION2; Description: "Вариант №2";Flags: exclusive;

Name: MAIN\UZI; Description: UZI(Micro SMG):; Types: full; Flags: fixed; <----- убрать размерность
Name: MAIN\UZI\OPTION1; Description: "Вариант №1";Flags: exclusive;
Name: MAIN\UZI\OPTION2; Description: "Вариант №2";Flags: exclusive;
Name: MAIN\UZI\OPTION3; Description: "Вариант №3";Flags: exclusive;
Name: MAIN\UZI\OPTION4; Description: "Вариант №4";Flags: exclusive;

Name: ADD; Description: Дополнительное оружие:; Types: full; Flags: fixed; <----- убрать размерность
Name: ADD\COLT45; Description: Colt.45(Pistol):; Types: full; Flags: fixed; <----- убрать размерность
Name: ADD\COLT45\OPTION1; Description: "Вариант №1";Flags: exclusive;
Name: ADD\COLT45\OPTION2; Description: "Вариант №2";Flags: exclusive;
Name: ADD\COLT45\OPTION3; Description: "Вариант №3";Flags: exclusive;
Name: ADD\COLT45\OPTION4; Description: "Вариант №4";Flags: exclusive;



El Sanchez, действительно, была опечатка с UZI, за это спасибо. Проблема опять с отображением, показывает только COLT45 из компонентов. Я тебя понял неправильно.

kreotodr 05-12-2017 13:53 2782485

Добрый день всем!
Подскажите, как решается подобное?

kreotodr 05-12-2017 14:45 2782497

Речь идет про повышение привилегий до уровня Администратора..
установка PrivilegesRequired=admin
эффекта не дает...
То есть, если инсталятор запущен без прав админа, восполнение инструкций требующих права Администратора закончатся сбоем. Даже при наличии PrivilegesRequired=admin

El Sanchez 06-12-2017 10:23 2782677

Цитата:

Цитата TheLeon
Я тебя понял неправильно. »

TheLeon, да я тоже неправильно подсказал. Вот так можно:
Скрытый текст

Код:

[Components]
Name: MAIN; Description: {code:CompHelper|Основное оружие:}; Types: full; Flags: fixed
Name: MAIN\AKM; Description: {code:CompHelper|AKM(AK-47):}; Types: full; Flags: fixed
Name: MAIN\AKM\OPTION1; Description: {code:CompHelper|Вариант №1|akm_1.bmp}; Flags: exclusive
Name: MAIN\AKM\OPTION2; Description: {code:CompHelper|Вариант №2|akm_2.bmp}; Flags: exclusive
Name: MAIN\AKM\OPTION3; Description: {code:CompHelper|Вариант №3|akm_3.bmp}; Flags: exclusive
Name: MAIN\AKM\OPTION4; Description: {code:CompHelper|Вариант №4|akm_4.bmp}; Flags: exclusive

Name: MAIN\KAR98K; Description: {code:CompHelper|Kar98k(Rifle):}; Types: full; Flags: fixed
Name: MAIN\KAR98K\OPTION1; Description: {code:CompHelper|Вариант №1|kar98k_1.bmp}; Flags: exclusive
Name: MAIN\KAR98K\OPTION2; Description: {code:CompHelper|Вариант №2|kar98k_2.bmp}; Flags: exclusive
Name: MAIN\KAR98K\OPTION3; Description: {code:CompHelper|Вариант №3|kar98k_3.bmp}; Flags: exclusive

Name: MAIN\M16A4; Description: {code:CompHelper|M16A4(M4):}; Types: full; Flags: fixed
Name: MAIN\M16A4\OPTION1; Description: {code:CompHelper|Вариант №1|m4a16_1.bmp}; Flags: exclusive
Name: MAIN\M16A4\OPTION2; Description: {code:CompHelper|Вариант №2|m4a16_2.bmp}; Flags: exclusive
Name: MAIN\M16A4\OPTION3; Description: {code:CompHelper|Вариант №3|m4a16_3.bmp}; Flags: exclusive
Name: MAIN\M16A4\OPTION4; Description: {code:CompHelper|Вариант №4|m4a16_4.bmp}; Flags: exclusive

Name: MAIN\UMP9; Description: {code:CompHelper|UMP9(MP5):}; Types: full; Flags: fixed
Name: MAIN\UMP9\OPTION1; Description: {code:CompHelper|Вариант №1|ump9_1.bmp}; Flags: exclusive
Name: MAIN\UMP9\OPTION2; Description: {code:CompHelper|Вариант №2|ump9_2.bmp}; Flags: exclusive

Name: MAIN\S1897; Description: {code:CompHelper|S1897(ShotGun):}; Types: full; Flags: fixed
Name: MAIN\S1897\OPTION1; Description: {code:CompHelper|Вариант №1|s1897_1.bmp}; Flags: exclusive
Name: MAIN\S1897\OPTION2; Description: {code:CompHelper|Вариант №2|s1897_2.bmp}; Flags: exclusive

Name: MAIN\UZI; Description: {code:CompHelper|UZI(Micro SMG):}; Types: full; Flags: fixed
Name: MAIN\UZI\OPTION1; Description: {code:CompHelper|Вариант №1|uzi_1.bmp}; Flags: exclusive
Name: MAIN\UZI\OPTION2; Description: {code:CompHelper|Вариант №2|uzi_2.bmp}; Flags: exclusive
Name: MAIN\UZI\OPTION3; Description: {code:CompHelper|Вариант №3|uzi_3.bmp}; Flags: exclusive
Name: MAIN\UZI\OPTION4; Description: {code:CompHelper|Вариант №4|uzi_4.bmp}; Flags: exclusive

Name: ADD; Description: {code:CompHelper|Дополнительное оружие:}; Types: full; Flags: fixed
Name: ADD\COLT45; Description: {code:CompHelper|Colt.45(Pistol):}; Types: full; Flags: fixed
Name: ADD\COLT45\OPTION1; Description: {code:CompHelper|Вариант №1|colt45_1.bmp}; Flags: exclusive
Name: ADD\COLT45\OPTION2; Description: {code:CompHelper|Вариант №2|colt45_2.bmp}; Flags: exclusive
Name: ADD\COLT45\OPTION3; Description: {code:CompHelper|Вариант №3|colt45_3.bmp}; Flags: exclusive
Name: ADD\COLT45\OPTION4; Description: {code:CompHelper|Вариант №4|colt45_4.bmp}; Flags: exclusive

[Code]
var
 
ImagePanel: TPanel;
  ComponentsInfoImage: TBitmapImage;
  ComponentHelper: TStringList;

function CompHelper(Param: string): string;
var
 
Image: TBitmap;
  Index: Integer;
begin
 
Result := '';
  with TStringList.Create do
  try
   
StringChangeEx(Param, '|', #13#10, True);
    Text := Param;
    if Count = 0 then Exit;
    if Count > 0 then // description
     
Index := ComponentHelper.Add(Strings[0]);
    if Count > 1 then // image
   
begin
      if not
FileExists(ExpandConstant('{tmp}\') + Strings[1]) then
       
ExtractTemporaryFile(Strings[1]);
      Image := TBitmap.Create;
      Image.LoadFromFile(ExpandConstant('{tmp}\') + Strings[1]);
      ComponentHelper.Objects[Index] := Image;
    end;
    Result := ComponentHelper[Index];
  finally
   
Free;
  end;
end;

procedure ComponentsListClickCheck(Sender: TObject);
begin
  if not
Assigned(Sender) or (TNewCheckListBox(Sender).ItemIndex = -1) then Exit;
  ComponentsInfoImage.Bitmap.Assign(TBitmap(ComponentHelper.Objects[TNewCheckListBox(Sender).ItemIndex]));
end;

function InitializeSetup(): Boolean;
begin
 
Result := True;
  ComponentHelper := TStringList.Create;
  ComponentHelper.Duplicates := dupIgnore;
end;


Цитата:

Цитата TheLeon
также вопрос, как во вкладке выбора компонентов убрать размерность для следующих пунктов? »

TheLeon, где-нибудь в InitializeWizard:
Скрытый текст

Код:

for i := 0 to WizardForm.ComponentsList.ItemCount - 1 do
  if not
WizardForm.ComponentsList.ItemEnabled[i] then
   
WizardForm.ComponentsList.ItemSubItem[i] := '';


El Sanchez 06-12-2017 11:31 2782698

Цитата:

Цитата TheLeon
Поставил в конец InitializeWizard. Пишет, что "Неизвестный идентификатор i" »

TheLeon, ну и объявите ее в начале InitializeWizard.

TheLeon 06-12-2017 13:18 2782727

El Sanchez, извините, но все равно не получается запихнуть ваши строки, вечно на что-то жалуется.(
Code

Код:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  case CurPageID of
    wpSelectDir:
      if not FileExists(ExpandConstant('{app}\gta_sa.exe')) then begin
        MsgBox('Ошибка! Вы должны указать путь к папке Grand Theft Auto - San Andreas', mbError, MB_OK);
        Result := False;
      end;
  end;
end;

var
  ImagePanel: TPanel;
  ComponentsInfoImage: TBitmapImage;
  ComponentHelper: TStringList;
function CompHelper(Param: string): string;
var
  Image: TBitmap;
  Index: Integer;
begin
  Result := '';
  with TStringList.Create do
  try
    StringChangeEx(Param, '|', #13#10, True);
    Text := Param;
    if Count = 0 then Exit;
    if Count > 0 then // description
      Index := ComponentHelper.Add(Strings[0]);
    if Count > 1 then // image
    begin
      if not FileExists(ExpandConstant('{tmp}\') + Strings[1]) then
        ExtractTemporaryFile(Strings[1]);
      Image := TBitmap.Create;
      Image.LoadFromFile(ExpandConstant('{tmp}\') + Strings[1]);
      ComponentHelper.Objects[Index] := Image;
    end;
    Result := ComponentHelper[Index];
  finally
    Free;
  end;
end;

procedure ComponentsListClickCheck(Sender: TObject);
begin
  if not Assigned(Sender) or (TNewCheckListBox(Sender).ItemIndex = -1) then Exit;
  ComponentsInfoImage.Bitmap.Assign(TBitmap(ComponentHelper.Objects[TNewCheckListBox(Sender).ItemIndex]));
end;

function InitializeSetup(): Boolean;
begin
  Result := True;
  ComponentHelper := TStringList.Create;
  ComponentHelper.Duplicates := dupIgnore;
end;

procedure InitializeWizard();
begin
  WizardForm.TYPESCOMBO.Visible:= false;
  WizardForm.ComponentsList.Visible := True;
  WizardForm.ComponentsList.Height := ScaleX(150);
  WizardForm.ComponentsList.Top := ScaleX(47);
  WizardForm.ComponentsList.Width := ScaleX(232);
  WizardForm.ComponentsDiskSpaceLabel.Visible := True;

  ImagePanel := TPanel.Create(WizardForm);
  ImagePanel.Parent := WizardForm.SelectComponentsPage;
  ImagePanel.Caption := '';
  ImagePanel.Top := ScaleX(47);
  ImagePanel.Left := ScaleX(240);
  ImagePanel.Width := ScaleX(177);
  ImagePanel.Height := ScaleX(151);
  ImagePanel.BevelInner := bvRaised;
  ImagePanel.BevelOuter := bvLowered;

  ExtractTemporaryFile('akm_1.bmp');
  ExtractTemporaryFile('akm_2.bmp');
  ExtractTemporaryFile('akm_3.bmp');
  ExtractTemporaryFile('akm_4.bmp');
  ExtractTemporaryFile('kar98k_1.bmp');
  ExtractTemporaryFile('kar98k_2.bmp');
  ExtractTemporaryFile('kar98k_3.bmp');
  ExtractTemporaryFile('ump9_1.bmp');
  ExtractTemporaryFile('ump9_2.bmp');
  ExtractTemporaryFile('s1897_1.bmp');
  ExtractTemporaryFile('s1897_2.bmp');
  ExtractTemporaryFile('uzi_1.bmp');
  ExtractTemporaryFile('uzi_2.bmp');
  ExtractTemporaryFile('uzi_3.bmp');
  ExtractTemporaryFile('uzi_4.bmp');
  ExtractTemporaryFile('colt45_1.bmp');
  ExtractTemporaryFile('colt45_2.bmp');
  ExtractTemporaryFile('colt45_3.bmp');
  ExtractTemporaryFile('colt45_4.bmp');
  ExtractTemporaryFile('molotov_1.bmp');
  ExtractTemporaryFile('molotov_2.bmp');
  ExtractTemporaryFile('molotov_3.bmp');
  ExtractTemporaryFile('grenade_1.bmp');
  ExtractTemporaryFile('grenade_2.bmp');

  WizardForm.ComponentsList.OnClickCheck:= @ComponentsListClickCheck;
  ComponentsInfoImage:= TBitmapImage.Create(WizardForm);
  ComponentsInfoImage.Parent:= ImagePanel;
  ComponentsInfoImage.Top:= ScaleY(4);
  ComponentsInfoImage.Left:= ScaleX(4);
  ComponentsInfoImage.Width:= ScaleX(168);
  ComponentsInfoImage.Height:= ScaleY(142);
  ComponentsInfoImage.Stretch:= True;
  ComponentsInfoImage.BringToFront;
end;


Iska 06-12-2017 13:57 2782742

Цитата:

Цитата TheLeon
Iska, поможете правильно запихнуть следующий код: »

TheLeon, нет, не помогу запихнуть.

El Sanchez 06-12-2017 14:45 2782753

Цитата:

Цитата TheLeon
но все равно не получается запихнуть ваши строки, вечно на что-то жалуется.( »

TheLeon, копировать-вставить:
Скрытый текст

Код:

[Code]
var
 
ImagePanel: TPanel;
  ComponentsInfoImage: TBitmapImage;
  ComponentHelper: TStringList;

function CompHelper(Param: string): string;
var
 
Image: TBitmap;
  Index: Integer;
begin
 
Result := '';
  with TStringList.Create do
  try
   
StringChangeEx(Param, '|', #13#10, True);
    Text := Param;
    if Count = 0 then Exit;
    if Count > 0 then // description
     
Index := ComponentHelper.Add(Strings[0]);
    if Count > 1 then // image
   
begin
      if not
FileExists(ExpandConstant('{tmp}\') + Strings[1]) then
       
ExtractTemporaryFile(Strings[1]);
      Image := TBitmap.Create;
      Image.LoadFromFile(ExpandConstant('{tmp}\') + Strings[1]);
      ComponentHelper.Objects[Index] := Image;
    end;
    Result := ComponentHelper[Index];
  finally
   
Free;
  end;
end;

procedure ComponentsListClickCheck(Sender: TObject);
begin
  if not
Assigned(Sender) or (TNewCheckListBox(Sender).ItemIndex = -1) then Exit;
  ComponentsInfoImage.Bitmap.Assign(TBitmap(ComponentHelper.Objects[TNewCheckListBox(Sender).ItemIndex]));
end;

function InitializeSetup(): Boolean;
begin
 
Result := True;
  ComponentHelper := TStringList.Create;
  ComponentHelper.Duplicates := dupIgnore;
end;

procedure InitializeWizard();
var
 
i: Integer;
begin
 
WizardForm.TypesCombo.Visible := False;
  WizardForm.ComponentsList.Visible := True;
  WizardForm.ComponentsList.Height := ScaleX(150);
  WizardForm.ComponentsList.Top := ScaleX(47);
  WizardForm.ComponentsList.Width := ScaleX(232);
  for i := 0 to WizardForm.ComponentsList.ItemCount - 1 do
    if not
WizardForm.ComponentsList.ItemEnabled[i] then
     
WizardForm.ComponentsList.ItemSubItem[i] := '';
  WizardForm.ComponentsDiskSpaceLabel.Visible := True;

  ImagePanel := TPanel.Create(WizardForm);
  ImagePanel.Parent := WizardForm.SelectComponentsPage;
  ImagePanel.Caption := '';
  ImagePanel.Top := ScaleX(47);
  ImagePanel.Left := ScaleX(240);
  ImagePanel.Width := ScaleX(177);
  ImagePanel.Height := ScaleX(151);
  ImagePanel.BevelInner := bvRaised;
  ImagePanel.BevelOuter := bvLowered;

  WizardForm.ComponentsList.OnClickCheck:= @ComponentsListClickCheck;
  ComponentsInfoImage:= TBitmapImage.Create(WizardForm);
  ComponentsInfoImage.Parent:= ImagePanel;
  ComponentsInfoImage.Top:= ScaleY(4);
  ComponentsInfoImage.Left:= ScaleX(4);
  ComponentsInfoImage.Width:= ScaleX(168);
  ComponentsInfoImage.Height:= ScaleY(142);
  ComponentsInfoImage.Stretch:= True;
  ComponentsInfoImage.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case
CurPageID of
   
wpSelectComponents: ComponentsListClickCheck(nil);
  end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
 
Result := True;
  case CurPageID of
   
wpSelectDir:
      if not FileExists(ExpandConstant('{app}\gta_sa.exe')) then begin
       
MsgBox('Ошибка! Вы должны указать путь к папке Grand Theft Auto - San Andreas', mbError, MB_OK);
        Result := False;
      end;
  end;
end;


pollipen 06-12-2017 14:47 2782754

Друзья может кто подскажет как сделать что бы при обновлении программы не выскакивала вот эта зараза

TheLeon 06-12-2017 14:58 2782758

Вложений: 1
El Sanchez, можете сказать версию программы, которая стоит у вас(именно эта ошибка мне портила тогда всю картину)?
Файл 149911

Iska 06-12-2017 15:06 2782762

Цитата:

Цитата pollipen
как сделать что бы при обновлении программы не выскакивала вот эта зараза »

Для начала — определиться, чем именно «эта зараза» обусловлена: нет прав, файл в данный момент используется, нужна ли дерегистрация библиотеки и т.д.

pollipen 06-12-2017 15:19 2782764

файл в данный момент используется

Iska 06-12-2017 15:58 2782774

Цитата:

Цитата pollipen
файл в данный момент используется »

Копайте дальше — чем именно используется. Process Explorer и Process Monitor в помощь. Если Проводник — как именно им используется, «отпустит» ли после дерегистрации библиотеки.

El Sanchez 06-12-2017 17:00 2782782

Цитата:

Цитата TheLeon
именно эта ошибка мне портила тогда всю картину »

TheLeon, вместо ItemCount напишите Items.Count

TheLeon 06-12-2017 17:11 2782785

El Sanchez, огромное спасибо.

pollipen 07-12-2017 08:29 2782894

проблема решена, сделал папку с программой системной теперь при обновлении программы ошибки не выдаёт :yahoo:

vvVVvv VV vvVVvv 10-12-2017 10:33 2783433

Здравствуйте.
Подскажите пожалуйста,как сделать выбор папки пуск на странице выбора папки установки и там же расположить создание ярлыка на рабочий стол и папки пуск?

ZVSRus 10-12-2017 20:19 2783525

vvVVvv VV vvVVvv, из Справки
Скрытый текст

Код:

#define MyAppName "My Program"
 #define MyAppVerName "My Program 1.5"
 #define MyAppPublisher "My Company, Inc."
 #define MyAppURL "http://www.example.com/"
 #define MyAppExeName "MyProg.exe"

[Setup]
AppId={{295875A7-8789-4313-8438-D809C261C4A7}
 AppName={#MyAppName}
 
AppVerName={#MyAppVerName}
 
AppPublisher={#MyAppPublisher}
 
DefaultDirName={pf}\{#MyAppName}
 
DefaultGroupName={#MyAppName}
 
OutputBaseFilename=setup
 OutputDir=.
 DisableProgramGroupPage=true

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

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: MakeStartMenuIcon
 Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: MakeDesktopIcon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent

[Code__]
var StartMenuIcon,DesktopIcon: TCheckBox;

 function MakeDesktopIcon: Boolean; begin Result:=DesktopIcon.Checked; end;
 function MakeStartMenuIcon: Boolean; begin Result:=StartMenuIcon.Checked; end;

 procedure NoStartMenuIcon(Sender: TObject);
 begin
 if
StartMenuIcon.Checked = false then
 begin
 
wizardform.GroupEdit.enabled:= false;
 wizardform.GroupBrowseButton.enabled:= false;
 end
 else
 begin
 
wizardform.GroupEdit.enabled:= true;
 wizardform.GroupBrowseButton.enabled:= true;
 end;
 end;

 procedure InitializeWizard ();
 begin
 
wizardform.SelectDirBitmapImage.free;

 wizardform.GroupEdit.parent:= wizardform.SelectDirPage;
 wizardform.GroupEdit.top:= wizardform.GroupEdit.top + ScaleY(60);

 wizardform.GroupBrowseButton.parent:= wizardform.SelectDirPage;
 wizardform.GroupBrowseButton.top:= wizardform.GroupBrowseButton.top + ScaleY(60);

 wizardform.SelectDirLabel.left:= wizardform.GroupEdit.left;

 wizardform.SelectStartMenuFolderLabel.parent:= wizardform.SelectDirPage;
 wizardform.SelectStartMenuFolderLabel.left:= wizardform.GroupEdit.left;
 wizardform.SelectStartMenuFolderLabel.top:= wizardform.GroupEdit.top - ScaleY(25);

 DesktopIcon := TCheckBox.Create(WizardForm);
 DesktopIcon.Parent := WizardForm.SelectDirPage;
 DesktopIcon.Caption := 'Добавить ярлык на Рабочий стол';
 DesktopIcon.SetBounds(ScaleX(0),WizardForm.DirEdit.Top+ScaleY(90),ScaleX(400),ScaleY(25));
 DesktopIcon.TabOrder := 0;
 DesktopIcon.Checked:= true;

 StartMenuIcon := TCheckBox.Create(WizardForm);
 StartMenuIcon.Parent := WizardForm.SelectDirPage;
 StartMenuIcon.Caption := 'Создать папку в меню Пуск';
 StartMenuIcon.SetBounds(ScaleX(220),WizardForm.DirEdit.Top+ScaleY(90),ScaleX(400),ScaleY(25));
 StartMenuIcon.TabOrder := 0;
 StartMenuIcon.Checked:= true;
 StartMenuIcon.OnClick:= @NoStartMenuIcon;
 end;


vvVVvv VV vvVVvv 10-12-2017 23:47 2783563

Цитата:

Цитата ZVSRus
vvVVvv VV vvVVvv, из Справки
Скрытый текст »

Отлично,то что искал,спасибо большое.

ENERGES 11-12-2017 13:19 2783640

Нужна помощь,как указать оставшееся время https://s8.hostingkartinok.com/uploa...b5b039e874.png
вот скрипт с файлами http://rgho.st/8TsjZx2Y6

Nordek 11-12-2017 22:31 2783782

Цитата:

Цитата web_form
Нужна помощь,как указать оставшееся время https://s8.hostingkartinok.com/uploa...b5b039e874.png»

Что вы показываете?
Однажды, давно это было, мне также было не понятно почему у меня "Тестовый прогон" до тех пор, пока не прочитал справку.


web_form, Вам также дам хороший совет: Прочтите справку.

Т.е у вас два варианта:
  1. Прочитать справку (Если действительно нужно).
  2. Не использовать ISDone (Если лень читать справку).

Цитата:

Цитата Работа с бибилиотекой
Описание режимов работы библиотеки
Для осуществения работоспособности библиотеки существует 2 вида определения процентных соотношений между операциями на всем прогрессбаре:
  • Автоматическая расстановка процентных соотношений в операциях.
При автоматической расстановке необходим тестовый проход для определения времени выполнения каждой операции относительно других.
Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов нулями.

Краткая инструкция:
а) первым делом убедитесь, что в начале скрипта закомментирована строка
Код:

#define records
т.е. необходимо поставить точку с запятой в начале этой строки);

б) компилим проект и запускаем на установку. Это и будет нашим тестовым проходом. Все операции должны дойти до конца и завершиться удачно. Прогрессбар будет зашкаливать и все компоненты будут извлечены вне зависимости от того выбраны они, или нет. Все так и должно быть!

в) после тестового прогона в указанной папке создастся файл records.inf (имя и путь назначается в процедуре инициализации. О ней см. "подробное описание функций" ниже), его необходимо добавить в проект, раскомметировав, или добавив в начале скрипта строку:

Код:

#Define records
Так же стоит отметить, что если сам скрипт находится в папке отличной от той, в которую компилится проект (например в скрипте NFS:Undercover откомпиленный файл сохраняется в Output\setup.exe), то records.inf создастся в папке с setup.exe и его необходимо будет перенести непосредственно к скрипту, или же подправить в секции [Files] его истинное расположение, например:
Код:

#ifdef records
Source: Output\records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

г) снова откомпилить проект.
После этого инсталлер готов к работе.
При запуске процесс выполнения операций будет равномерно и корректно отображаться на прогрессбаре.


  • Ручная расстановка процентов на каждую операцию.
При ручной расстановке если в проекте множество операций, все расчеты необходимо производить вручную. Т.е. сумма процентов всех выполненных операций должна равняться 100%, иначе корректного отображения на прогрессбаре не будет.
Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов значениями процентов, отличными от 0 (числа могут быть дробными).
При групповой распаковке архивов по маске (типа *.pcf) для операции задается общий процент на все распаковываемые файлы данной командой, а уж каждый из найденных файлов будет разбивать указанный кусок прогрессбара еще на части пропорциональные размерам файлов. Например строка:
Код:

if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), false, '', '', '') then break;
...

распакует все *.arc архивы из {src} в {app}, при чем весь прогрессбар будет поделен на кусочки пропрорциональные размерам архивов. В общем тут все так же как в скрипте распаковки FreeArc.iss и ему подобным. Таким образом при распаковке нескольких архивов одного типа проще пользоваться ручной расстановкой, т.к. отличие расперделения процентов от автоматической будет совсем небольшим, но за то не требуется тестовый проход.

Вот некоторые правила, которые неоходимо выполнять при ручной расстановке:
а) сумма процентов учитывая ветвления (использование компонентов, условий) в скрипте должна составлять 100;
б) у компонентов, для которых возможен выбор только одного из нескольких, должны быть одинаковые значения процентов;
в) НЕЛЬЗЯ использовать компоненты, которые можно выбирать одновременно с другими в одной группе (например несколько рядом стоящих компонент без флага exclusive), потому что сумма процентов при различном выборе пользователя может отличаться от 100.

  • Примечание
Стоит упомянуть функцию ISExec, в которой третьим параметром задается время выполнения текущей операции. При автоматической расстановке время на операцию расчитывается приближенное к реальному (при условии, что данная операция не первая, иначе время выполнения берется равное тому, которое было в тестовом проходе). При ручной же расстановке: если машина пользователя быстрее обработает данную операцию, чем расчитано автором инсталла, то прогресс будет немного скачкообразным в моменты переходов между функциями распаковки; если машина пользователя медленнее - прогресс наоборот будет задерживаться между операциями.


ENERGES 12-12-2017 06:24 2783824

Nordek, спасибо,а как сделать сделать две полоски с вершу и снизу начальной установки приветствия https://s8.hostingkartinok.com/uploa...7d235b5b15.png

ZVSRus 12-12-2017 14:13 2783898

web_form,
Чтобы полосы сверху и снизу отображались на странице приветствия, зайди в папку modules открой page.iss, найди такие строки

if CurPageID=wpWelcome then begin
HideComponents;

это будут 22 и 23 строки
и вставь после них

Bevel2.show;
Bevel3.show;


и все отобразится

ENERGES 12-12-2017 14:21 2783900

ZVSRus, спасибо а как подключить Проверка MD5

ZVSRus 12-12-2017 15:21 2783918

web_form
Цитата:

как подключить Проверка MD5
Сам никогда этим не занимался, но по данному адресу найдёшь все что интересует.

PS.
Цитата:

Нужна помощь, как указать оставшееся время
В справке много примеров про проценты и про время.

ENERGES 12-12-2017 15:34 2783919

ZVSRus, он уже прописано в скрипте но не знаю как подключится

Alloc 13-12-2017 16:19 2784147

Вложений: 1
Друзья, подскажите пожалуйста как убрать флажок с компонентов по умолчанию?

Вот скриншот. По умолчанию компонент "HD HUD" выбран, как убрать?

http://forum.oszone.net/attachment.p...1&d=1513171034

вот кусочек кода:

Код:

[Types]
Name: Full; Description: {cm:full}; Flags: iscustom

[Components]
Name: Text; Description: {cm:GameText}; Types: Full; Flags: fixed
Name: Text\Eng; Description: {cm:eng}; Flags: exclusive; ExtraDiskSpaceRequired: 98362
Name: Text\Rus; Description: {cm:rus}; Flags: exclusive; ExtraDiskSpaceRequired: 7104361
Name: Voice; Description: {cm:GameVoice}; Types: Full; Flags: fixed
Name: Voice\Eng; Description: {cm:eng}; Flags: exclusive; ExtraDiskSpaceRequired: 659897918
Name: Voice\Rus; Description: {cm:rus}; Flags: exclusive; ExtraDiskSpaceRequired: 664216745
Name: Patch; Description: {cm:Patch}; Types: Full; Flags: fixed collapsed
Name: Patch\WS; Description: {cm:PatchWS}; ExtraDiskSpaceRequired: 1329304
Name: Patch\HUD; Description: {cm:HUD}; Types: Full; Flags: collapsed
Name: Patch\HUD\Eng; Description: {cm:eng}; Flags: exclusive; ExtraDiskSpaceRequired: 79449474
Name: Patch\HUD\Rus; Description: {cm:rus}; Flags: exclusive; ExtraDiskSpaceRequired: 79482234


nik1967 13-12-2017 17:13 2784156

Alloc,
Код:

Name: Patch\HUD; Description: {cm:HUD}; Flags: collapsed

Alloc 13-12-2017 17:24 2784161

nik1967, спасибо, все настолько просто) я уже думал программным путём менять через - WizardForm.ComponentsList.Checked[8] := False;
но это не вариант в моем случае :Beer:

ENERGES 15-12-2017 11:37 2784457

как закоментировать эти строки https://s8.hostingkartinok.com/uploa...1bb0ed9794.png чтобы при установке исходила "russian" "english"
скрип с файломи http://rgho.st/8JMZGmxMY

ZVSRus 15-12-2017 15:45 2784510

web_form
Вам нужно чтобы при выборе языка Русский что подчёркнуто читалось на русском, а при выборе языка английский читалось на английской? Правильно понял?

ENERGES 15-12-2017 15:57 2784513

ZVSRus, да

ZVSRus 15-12-2017 16:16 2784519

web_form
У вас в скрипте есть секция [CustomMessages], и многие названия уже переделаны под выбор языка, отображение надписей на русском или английском.

Вобщем должно быть так:

Код:

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
 Name: "english"; MessagesFile: "compiler:Languages\English.isl"

[CustomMessages]
russian.exit=Выход
 english.exit=Exit

[Code___]

MyCancelButton:=TButton.Create(WizardForm);
 with MyCancelButton do begin
 
Parent:=WizardForm;
  Width:=ScaleX(0);
//  Caption:=ExpandConstant('Выход');
 
Caption:=ExpandConstant('{cm:exit}'); // должно быть так
 
OnClick:=@CancelButtonOnClick;
end;

Остальные записи переделывай также, переводи в онлайн переводчике, редактируй, прописывай в секции [CustomMessages]

russian.здесь название свое=слово на русском
english.здесь название свое=перевод на английский

ENERGES 15-12-2017 18:00 2784543

ZVSRus, выдает ошибку при компелятции https://s8.hostingkartinok.com/uploa...8a146863a5.png

ZVSRus 15-12-2017 18:36 2784549

web_form
На какой строке ошибка. Сделай скриншот.

ZVSRus 15-12-2017 18:57 2784553

web_form

Я же описал как делать, будь более внимательней:

Код:


[CustomMessages]
russian.InstallationCompleted=Установка завершена успешно. Запуск можно произвести при помощи соответствующей иконки в меню Пуск или на рабочем столе.
 english.InstallationCompleted=The installation completed successfully. A start can be made by using the corresponding icon in the start menu or on the desktop.

[Code__]

procedure Finish;
begin
 
Wizard16:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\SDWImage12.png'),3,220,594,62,True,True);
  Wizard17:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\SDWImage5.png'),3,215,594,72,True,True);

 LabelFinish := TLabel.Create(WizardForm);
 with LabelFinish do begin
 
Left:= 30;
  Top:= 230;
  Width:= 550;
  Height:= 58;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Caption:= ExpandConstant('{cm:InstallationCompleted}');
  Parent:= WizardForm;
 end;
end;


Nordek 15-12-2017 18:59 2784555

Цитата:

Цитата web_form
выдает ошибку при компелятции https://s8.hostingkartinok.com/uploa...8a146863a5.png»

Здесь:
Код:

  Caption:=ExpandConstant('{Установка завершена успешно. Запуск можно произвести при помощи соответствующей иконки в меню Пуск или на Рабочем столе.}');
фигурные скобки удалите.

т.е
Код:

  Caption:=ExpandConstant('Установка завершена успешно. Запуск можно произвести при помощи соответствующей иконки в меню Пуск или на Рабочем столе.');
Или замените это:
Код:

    Caption := 'Установка завершена успешно. Запуск можно произвести при помощи соответствующей иконки в меню Пуск или на Рабочем столе.';
вместо первого.


Если для CustomMessages, то так:
Код:

[CustomMessages]
russian.captionmesscomp=Установка завершена успешно. Запуск можно произвести при помощи соответствующей иконки в меню Пуск или на Рабочем столе.

[Code]
...
  Caption:=ExpandConstant('{cm:captionmesscomp}');


ENERGES 15-12-2017 19:11 2784557

ZVSRus,
на всех остальных строк выдает ошибки который закоментировал https://s8.hostingkartinok.com/uploa...1bb0ed9794.png
мне и остальных строк добавить ('{cm:InstallationCompleted}'); или ('{cm:captionmesscomp}');

ZVSRus 15-12-2017 19:27 2784562

web_form
Попробую объяснить по другому:

Код:

[CustomMessages]
 russian.001=Русский текст
 english.001=Английский текст

 russian.002=Завершение установки
 english.002=Installation complete

 russian.003=Ошибка при установке.
 english.003=Error installation.


Procedure Error(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and ISDoneError then
begin
    ImgSetVisibility(Wizard16, True);
    ImgSetVisibility(Wizard17, False);
    ImgApplyChanges(WizardForm.Handle);
    WizardForm.Caption:= ExpandConstant('{cm:002}');
    LabelFinish.Top:= 239;
    LabelFinish.Caption:= ExpandConstant('{cm:003}');
  end;
end;


ENERGES 15-12-2017 19:31 2784563

ZVSRus,
ошибка https://s8.hostingkartinok.com/uploa...f0a067f2af.png

ZVSRus 15-12-2017 19:48 2784566

web_form

Цифрами написал для примера, что бы было более понятней, нужно писать текстом.
Замени 002, 003 на свои имена, ну скажем:

[CustomMessages]
russian.name1=Русский текст
english.name1=Английский текст

russian.name2=Завершение установки
english.name2=Installation complete

russian.name3=Ошибка при установке.
english.name3=Error installation.


Procedure Error(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and ISDoneError then
begin
ImgSetVisibility(Wizard16, True);
ImgSetVisibility(Wizard17, False);
ImgApplyChanges(WizardForm.Handle);
WizardForm.Caption:= ExpandConstant('{cm:name2}');
LabelFinish.Top:= 239;
LabelFinish.Caption:= ExpandConstant('{cm:name3}');
end;
end;

ENERGES 15-12-2017 20:07 2784569

а как сделать чтобы при установке игры отобразилось время руский на руском а англиский на англиском https://s8.hostingkartinok.com/uploa...bd87207a40.png

vvVVvv VV vvVVvv 15-12-2017 21:31 2784583

Цитата:

Цитата ZVSRus
vvVVvv VV vvVVvv, из Справки
Скрытый текст »

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

ZVSRus 15-12-2017 21:49 2784589

Цитата:

Цитата vvVVvv VV vvVVvv
У меня стоит выбор между стим и взломанной версией, пожалуйста подскажите, как при выборе взломанной версии сделать так, что бы копировался и кряк который рядом в папке приложен.

Что то припоминаю данный скрипт, где переключение между стим и взломанной версией. Кряк это взломанный исполняемый файл или что то другое?

vvVVvv VV vvVVvv 15-12-2017 22:15 2784591

Цитата:

Цитата ZVSRus
Что то припоминаю данный скрипт, где переключение между стим и взломанной версией. Кряк это взломанный исполняемый файл или что то другое? »

Да,есть и с исполняемым файлом,а есть где и без него,например как у 3DM к игре FS17 там один файл ini и один dll,).

ZVSRus 15-12-2017 22:52 2784605

Цитата:

Цитата vvVVvv VV vvVVvv
Да, есть и с исполняемым файлом, а есть где и без него, например как у 3DM к игре FS17 там один файл ini и один dll,).

vvVVvv VV vvVVvv я никогда не занимался играми, и не знаю как там у 3DM к игре FS17, я хочу понять что такое у вас кряк, зарегистрированный исполняемый .exe файл, .dll ка для регистрации или .ini файл с данными регистрации.
Как я понимаю, если вы выбрали стим тогда устанавливается не зарегистрированная версия, когда выбрали взломанная устанавливается зарегистрированная. Если так тогда все что вы называете кряком (все файлы что у вас в отдельной папке) также как и все файлы прописываем в секции [Files] через переключатель который соответствует взломанной версии.

Как то так:
[Files]
Source: "{app}\amazingaudioplayer,1.exe"; DestDir: "{app}"; DestName: "amazingaudioplayer.exe"; Check: StimCheck; Flags: ignoreversion
Source: "{app}\amazingaudioplayer,2.exe"; DestDir: "{app}"; DestName: "amazingaudioplayer.exe"; Check: VzlomCheck; Flags: ignoreversion

vvVVvv VV vvVVvv 15-12-2017 23:43 2784615

Цитата:

Цитата ZVSRus
vvVVvv VV vvVVvv я никогда не занимался играми, и не знаю как там у 3DM к игре FS17, я хочу понять что такое у вас кряк, зарегистрированный исполняемый .exe файл, .dll ка для регистрации или .ini файл с данными регистрации.
Как я понимаю, если вы выбрали стим тогда устанавливается не зарегистрированная версия, когда выбрали взломанная устанавливается зарегистрированная. Если так тогда все что вы называете кряком (все файлы что у вас в отдельной папке) также как и все файлы прописываем в секции [Files] через переключатель который соответствует взломанной версии.
Как то так:
[Files]
Source: "{app}\amazingaudioplayer,1.exe"; DestDir: "{app}"; DestName: "amazingaudioplayer.exe"; Check: StimCheck; Flags: ignoreversion
Source: "{app}\amazingaudioplayer,2.exe"; DestDir: "{app}"; DestName: "amazingaudioplayer.exe"; Check: VzlomCheck; Flags: ignoreversion »

Не много не так поняли, когда идёт установка в стим, то она полностью устанавливает зарегистрированную версию,то есть в установщике все файлы есть, все прописи в реестре прописываются,то есть если у пользователя эта игра куплена,то ему достаточно выбрать стим версию,дождаться установки и всё можно зайти в стим и нажать кнопку играть и всё играть без проблем.
Я вас понял,объясняю.Там идёт файл config.ini в котором прописаны всякие настройки,смена языка,включение длс,так же еще присутствует dll файл который отвязывает от стима игру,а точнее steam_api64.dll.
Но бывает так же что в месте с ini и dll так же присутствует exe файл игры.

ZVSRus 16-12-2017 08:47 2784645

vvVVvv VV vvVVvv
Поймите, корректно поставленный вопрос, залог быстрого и исчерпывающего ответа.
Цитата:

Но бывает так же что в месте с ini и dll так же присутствует exe файл игры.
Source: "{app}\config.ini"; DestDir: "{app}"; Check: StimCheck; Flags: ignoreversion
Source: "{app}\steam_api64.dll"; DestDir: "{app}"; Check: StimCheck; Flags: ignoreversion
Source: "{app}\steam.exe"; DestDir: "{app}"; Check: StimCheck; Flags: ignoreversion

Папка {app} (синий цвет) это папка где лежат ваши файлы, путь может быть любой, например: D:\ПАПКА\ПОДПАПКА
Папка {app} (красный цвет) это папка куда вы их должны скопировать, например: {pf}\Название игры.
StimCheck это внутреннее название переключателя, как он у вас называется я не знаю, нужно в скрипте смотреть.

Если у вас есть переключение между взломанной и стим, значит есть и эти переключатели.
Выбрали стим, данные файлы не установились, выбрали взломанную, файлы установились в нужное место, куда укажете путь.

Ничего сложного.

vvVVvv VV vvVVvv 16-12-2017 10:05 2784655

Цитата:

Цитата ZVSRus
StimCheck это внутреннее название переключателя, как он у вас называется я не знаю, нужно в скрипте смотреть.
Если у вас есть переключение между взломанной и стим, значит есть и эти переключатели.
Выбрали стим, данные файлы не установились, выбрали взломанную, файлы установились в нужное место, куда укажете путь.
Ничего сложного. »

Я вас понял,написал вам в лс.

ZVSRus 16-12-2017 11:56 2784666

vvVVvv VV vvVVvv Отправил.

vvVVvv VV vvVVvv 16-12-2017 14:12 2784673

Цитата:

Цитата ZVSRus
Отправил. »

Спасибо,всё работает.

ENERGES 17-12-2017 15:23 2784919

как кнопку Обзор.... передвинуть чуть чуть верх, https://s8.hostingkartinok.com/uploa...a1911e7bc8.png
http://rgho.st/8TsjZx2Y6

Ivn78 17-12-2017 15:32 2784923

Все привет.
В инсталляторе при определенных условиях создается кастомная страница. Как в дальнейшем коде проверить, существует она или нет?


Или, если проще, можно создавать страницу в любом случае, но при определенных условиях как ее пропустить?

ZVSRus 17-12-2017 16:20 2784937

Цитата:

Цитата Ivn78
В инсталляторе при определенных условиях создается кастомная страница.

Костомная страница автоматом не создаётся, её нужно самому создавать, и уже потом при определённых условиях показывать её или нет.


Цитата:

Цитата rainur88
как кнопку Обзор.... передвинуть чуть чуть верх

Зайди в папку modules, открой form.iss найди строку 356 with WizardForm.DirBrowseButton do

Замени Top := ScaleY(115); на Top := ScaleY(112); это координаты отступа сверху.

Как поднять или опустить не вопрос, вопрос в том пойди найди нужный компонент в этих джунглях!

ENERGES 17-12-2017 16:34 2784940

ZVSRus,
как указать свой размер игры в скрипте?
https://s8.hostingkartinok.com/uploa...963a131aea.png

Ivn78 17-12-2017 16:41 2784946

Цитата:

Цитата ZVSRus
Костомная страница автоматом не создаётся, её нужно самому создавать, и уже потом при определённых условиях показывать её или нет. »

эмм... ровно это и написано.
Цитата:

Цитата Ivn78
В инсталляторе при определенных условиях создается кастомная страница »

я сам ее создаю при определенных условиях. Вопрос в том, чтобы в дальнейшем коде проверять не все условия, при которых она была (или не была) создана, а проверить само ее существование. Типа
Код:

if CustomPade then begin

ZVSRus 17-12-2017 16:53 2784951

Цитата:

Цитата web_form
как указать свой размер игры в скрипте?

Если имеется ввиду на той же странице где и кнопка, объём игры и требуется для установки
тогда это в скрипте в самом верху что красным шрифтом

//===== [Need Size] =====\\:
#define NeedSize "10240" = это объём игры
//===== [Game Size] =====\\:
#define TotalNeedSize "10240" = требуется для установки

10240 = запись в мегабайтах

ZVSRus 17-12-2017 17:27 2784961

Цитата:

Цитата Ivn78
я сам ее создаю при определенных условиях.

Это как? Я в свои рукоделиях костомную страницу создаю не при каких определенных условиях, а просто ручками в нужном месте, ну например после страницы приветствия, а на стр. приветствия создаю те определенные условия как вы выражаетесь, при которых показывать эту страницу или нет. Пропускать страницы это выражение для стандартных страниц, для костомной страницы более правильное выражение скрывать или показывать. То что вы привели if CustomPade then begin и далее какие то действия, то это более подойдёт к самой костомной странице, то есть какие то компоненты на данной странице скрывать или показывать.

PS. Ну а вообще я не до конца понял суть вопроса.

Ivn78 17-12-2017 17:43 2784973

ZVSRus,
Страница создается скажем при наличии ключа в реестре. Если ключа нет, она не создается. Далее в коде (уже совсем в другом месте, скажем, на ssDone при нажатом чекбоксе на той самой странице происходит еще что-то. Проблема возникает, если на ssDone идет обращение к чекбоксу страницы, которая ввиду условий не была создана. Это все упрощенно, условий для создания страницы больше

Повторюсь, может проще ее создавать изначально, но при тех же условиях ее просто не показывать ( пропускать)

ZVSRus 17-12-2017 18:22 2784990

Цитата:

Цитата Ivn78
Страница создается скажем при наличии ключа в реестре. Если ключа нет, она не создается.

Первый раз слышу чтобы Если ключа нет, она не создается если ключ есть то она создается.
Костомная страница при наличии ключа сама не создастся, её нужно изначально ручками создавать. А уже потом написать функцию для ключа в реестре, в функции прописать если ключ в реестре есть страницу показывать, ключа в реестре нет страницу не показывать.

Цитата:

Это все упрощенно, условий для создания страницы больше
Условий для создания костомной страницы автоматом я не знаю и нигде не встречал, ввиду того что создания страниц как вы описываете не существует. Пример, создалась у вас при наличии ключа в реестре страница автоматом, что и на ней уже существуют чекбоксы, лейблы, все те компоненты какие вы желаете видеть? Ну да ладно!!!

Ivn78 17-12-2017 23:31 2785064

ZVSRus,
немного мы не понимаем друг друга, ну да ладно
Код:

procedure CreatePageUPnP();
begin
    UPnPPage := CreateCustomPage(PgID, ExpandConstant('{cm:UPnPDlgCaption}'), ExpandConstant('{cm:UPnPDlgDescription}'));
    Header := TNewStaticText.Create(UPnPPage);
    Header.Parent := UPnPPage.Surface;
    Header.SetBounds(0, 0, WizardForm.InnerNotebook.Width, ScaleY(110));
    Header.Autosize := False;
    Header.WordWrap := True;
    Header.Caption := ExpandConstant('{cm:UPnPDlgExplanation}');
    UPnPCheck := TCheckBox.Create(WizardForm);
    with UPnPCheck do begin
        Parent := UPnPPage.Surface;
        Left := ScaleX(0);
        Top := ScaleY(212);
        Caption := ExpandConstant('{cm:UPnPDlgConfigure}');
        Width := ScaleX(300);
        Checked := True;
    End;
    if UPnPConfigure then UPnPCheck.State := cbUnChecked else UPnPCheck.State := cbChecked;
end;

procedure InitializeWizard();
begin
    if AskedUPnPConfigure then CreatePageUPnP();
end;

Я не писал, что страница создается автоматом. Я писал, что команда на ее создание отправляется только при определенных условиях.
Цитата:

Цитата ZVSRus
если ключ в реестре есть страницу показывать, ключа в реестре нет страницу не показывать »

Это как можно сделать?

El Sanchez 18-12-2017 09:32 2785119

Цитата:

Цитата Ivn78
Я не писал, что страница создается автоматом. Я писал, что команда на ее создание отправляется только при определенных условиях. »

Ivn78, создавайте страницу в любом случае, ее показ регулируйте в ShouldSkipPage:
Скрытый текст

Код:

procedure InitializeWizard;
begin
 
CreatePageUPnP();
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
 
Result := False;
  case PageID of
   
UPnPPage.ID:
      Result := not AskedUPnPConfigure;
  end;
end;


Ivn78 19-12-2017 13:13 2785463

Прошу помощи. Нужно организовать проверку установленной версии IE.
Код:

HKLM, 'SOFTWARE\Microsoft\Internet Explorer', 'Version'
значение вида 7.0.5730.13. Как сделать, чтобы если первая цифра (число до первой точки) этого значения меньше 8, то выполнять действия?

nik1967 19-12-2017 21:45 2785665

Ivn78,
Пример
Код:

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[code]
var
  NVersion: String;
       
function InitializeSetup: Boolean;
begin
  RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Internet Explorer', 'Version', NVersion);
  Delete(NVersion, 2, Length(NVersion));
  if StrToInt(NVersion) < 8 then begin
    MsgBox('Пора бы обновить', mbInformation, MB_OK);
    Result:= false;
  end else begin
    MsgBox('IE в норме', mbInformation, MB_OK);
    Result:= true;
  end;
end;


Ivn78 19-12-2017 22:35 2785674

nik1967,
а как быть, если первое число двухзначное? сейчас получается, что 10<8

nik1967 19-12-2017 23:24 2785682

Ivn78,
Тогда так
Код:

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[code]
var
  NVersion: String;
  Tochka: Integer;
       
function InitializeSetup: Boolean;
begin
  RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Internet Explorer', 'Version', NVersion);
  Tochka:= Pos('.', NVersion);
  Delete(NVersion, Tochka, Length(NVersion));
  if StrToInt(NVersion) < 8 then begin
    MsgBox('Пора бы обновить', mbInformation, MB_OK);
    Result:= false;
  end else begin
    MsgBox('IE в норме', mbInformation, MB_OK);
    Result:= true;
  end;
end;


ENERGES 20-12-2017 08:37 2785734

подскажите пожалуйста как удалить название игры в этом пункте https://s8.hostingkartinok.com/uploa...f32e281622.png
http://rgho.st/8TsjZx2Y6

Nordek 20-12-2017 12:28 2785759

Цитата:

Цитата web_form
подскажите пожалуйста как удалить название игры в этом пункте »

Если: "SelectDirLabel3=Программа установит [name] в следующую папку." - То соответственно:

Код:

[Languages]
Name: en; MessagesFile: compiler:Default.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[Messages]
ru.SelectDirLabel3=Программа установит в следующую папку.
en.SelectDirLabel3=Setup will install into the following folder.

- Всё просто.

ENERGES 20-12-2017 13:54 2785777

Nordek, не убирается удалил « %1 » не помогло

Nordek 20-12-2017 14:15 2785789

Цитата:

Цитата web_form
не убирается удалил « %1 » не помогло »

Наоборот, добавьте:
Код:

[Messages]
SelectDirLabel3=Программа установит в следующую папку.


ZVSRus 20-12-2017 14:18 2785791

Цитата:

Цитата web_form
не убирается удалил « %1 » не помогло

Данная запись берётся из языковых файлов English.isl и Russian.isl что в папке modules

SelectDirLabel3=Программа установит [name] в следующую папку.
SelectDirLabel3=Setup will install [name] into the following folder.

Помести запись, что вам привёл Nordek

ru.SelectDirLabel3=Программа установит в следующую папку.
en.SelectDirLabel3=Setup will install into the following folder.

в секцию [Messages] что находится в messages.iss в самом низу, к ru подпиши s, к en подпиши g.
Так как в самом верху в секции [Languages] выглядет так

Name: rus; MessagesFile: modules\Russian.isl
Name: eng; MessagesFile: modules\english.isl

Nordek 20-12-2017 14:29 2785793

Цитата:

Цитата ZVSRus
Данная запись берётся из языковых файлов English.isl и Russian.isl что в папке modules »

web_form, В дополнение выше написанного, могу предложить скопировать файлы Russian.isl и english.isl в каталог со скриптом.
Отредактировать файлы по своему усмотрению (Наверняка вам вздумается что-то ещё удалить/изменить или добавить).

Включить в инсталлятор, например:
Код:

[Languages]
Name: ru; MessagesFile: Russian.isl

В таком случае вам ненужно добавлять секцию [Messages] и включать изменённые стандартные сообщения.

ENERGES 20-12-2017 15:03 2785801

подскажите пожалуйста как изменить размер в обоих языках https://s8.hostingkartinok.com/uploa...cf477d88cb.png
а то конец немного великоват

Nordek 20-12-2017 16:09 2785819

Цитата:

Цитата web_form
а то конец немного великоват »

Смею предположить, вас это интересует:
Код:

WizardForm.FinishedHeadingLabel.Font.Height := -13;

vvVVvv VV vvVVvv 20-12-2017 16:15 2785823

Здравствуйте.Как сделать что бы в реестре прописывался путь к игре?
Вот пример ветки реестра,нужно что бы при установке,прописывался тот путь который выбрал пользователь.
И такой же пример нужен для x64 систем.
Код:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Blizzard Entertainment]

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft II Map Editor]

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft II Map Editor\Recent File List]

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft II Map Editor\Settings]
"WindowPlacement"="242,242,1202,970,1"

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III]
"InstallPath"="C:\\Games\\Warcraft III_TFT"
"Program"="c:\\Games\\Warcraft III_TFT\\Warcraft III.exe"
"War3CD"="z:\\"
"Battle.net gateways"=hex(7):31,00,30,00,30,00,31,00,00,00,30,00,30,00,00,00,\
  31,00,39,00,35,00,2e,00,35,00,38,00,2e,00,36,00,2e,00,31,00,30,00,00,00,30,\
  00,00,00,50,00,55,00,52,00,47,00,41,00,00,00,00,00

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\DelOpt0]
"Path0"="d:\\Games\\Warcraft III\\save"
"File0"="w3z"
"Path1"="d:\\Games\\Warcraft III\\save"
"File1"="w3v"
"Path2"="d:\\Games\\Warcraft III\\save"
"File2"="w3p"

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\DelOpt1]
"Path0"="d:\\Games\\Warcraft III\\replay"
"File0"="w3g"

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\DelOpt2]
"Path0"="d:\\Games\\Warcraft III\\Logs"
"File0"="log"
"Path1"="d:\\Games\\Warcraft III\\Logs"
"File1"="txt"
"Path2"="d:\\Games\\Warcraft III\\Logs"
"File2"="w3g"
"Path3"="d:\\Games\\Warcraft III\\Logs"
"File3"="j"

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\DelOpt3]
"Path0"="d:\\Games\\Warcraft III\\Errors"
"File0"="txt"

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Gameplay]
"gamespeed"=dword:00000003
"mousescroll"=dword:00000032
"mousescrolldisable"=dword:00000000
"keyscroll"=dword:00000032
"tooltips"=dword:00000001
"formations"=dword:00000001
"herobar"=dword:00000001
"netgameport"=dword:000017e0
"inputsprocket"=dword:00000000
"ammtype"=dword:00000000
"ammstyles"="0;0;0;0;"
"ammmapprefs"="FFFFFFFF;FFFFFFFF;FFFFFFFF;FFFFFFFF;FFFFFFFF;FFFFFFFF;FFFFFFFF;FFFFFFFF;FFFFFFFF;"
"ammmaphashes"=""
"ammrace"=dword:00000020
"customfilter"=dword:00000000
"custommask"=dword:00000000
"allyFilter"=dword:00000001
"creepFilter"=dword:00000001
"terrainFilter"=dword:00000001
"subgrouporder"=dword:00000000
"multiboardon"=dword:00000001
"customkeys"=dword:00000000
"schedrace"=dword:00000020
"ammversion"=dword:00000002
"ammgateway"="195"
"formationtoggle"=dword:00000001

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Map]
"skirmish_V0"="Maps\\(4)LostTemple.w3m"
"skirmish_V1"="Maps\\(4)LostTemple.w3m"
"lan_V0"="Maps\\NEW\\komanda.w3m"
"lan_V1"=""
"battlenet_V0"=""
"battlenet_V1"=""

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Misc]
"seenintromovie"=dword:00000001
"campaignprofile"=""
"clickedtourn"=dword:00000000
"clickedclan"=dword:00000000
"clickedladder"=dword:00000000
"clickedad"=dword:00000000
"chatsupport"=dword:00000000

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Sound]
"provider"=dword:00000001
"positional"=dword:00000001
"environmental"=dword:00000001
"music"=dword:00000001
"musicvolume"=dword:00000064
"sfx"=dword:00000001
"sfxvolume"=dword:00000064
"ambient"=dword:00000001
"movement"=dword:00000001
"unit"=dword:00000001
"subtitles"=dword:00000000
"nomidi"=dword:00000000
"softwaremidi"=dword:00000001
"nosoundwarn"=dword:00000001
"donotusewaveout"=dword:00000000

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\String]
"userbnet"=""
"userlocal"=""

[HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\Video]
"reswidth"=dword:00000400
"resheight"=dword:00000300
"colordepth"=dword:00000010
"adapter"=dword:00000000
"refreshrate"=dword:0000004b
"gamma"=dword:0000001e
"modeldetail"=dword:00000002
"animquality"=dword:00000002
"texquality"=dword:00000002
"miplevel"=dword:00000000
"texcolordepth"=dword:00000020
"particles"=dword:00000002
"lights"=dword:00000002
"lockfb"=dword:00000001
"unitshadows"=dword:00000001
"occlusion"=dword:00000001
"cinematicoverrides"=dword:00000000
"cinematicrefresh"=dword:0000004b
"cinematicbpp"=dword:00000020
"cinematicwidth"=dword:00000320
"cinematicheight"=dword:00000258
"spellfilter"=dword:00000002


Ivn78 20-12-2017 17:18 2785841

vvVVvv VV vvVVvv,
Код:

Root: HKCU32; Subkey: "Software\Blizzard Entertainment\Warcraft III"; ValueType: String; ValueName: "InstallPath"; ValueData: "{app}";
Root: HKCU64; Subkey: "Software\Blizzard Entertainment\Warcraft III"; ValueType: String; ValueName: "InstallPath"; ValueData: "{app}"; Check: IsWin64;


ENERGES 20-12-2017 17:54 2785858

Nordek, где мне его искать,в скрипте или папке modules?

ZVSRus 20-12-2017 18:01 2785862

Цитата:

Цитата vvVVvv VV vvVVvv
Как сделать что бы в реестре прописывался путь к игре?

В шапке темы, под спойлером Дополнительные программы для Inno Setup: найдете ковертер, скачайте и установите, пкм по рег файлу, в контекстном меню выбираете конвертировать в iss, получаете готовую секцию [Registry], копируете её и вставляете себе в скрипт.

Цитата:

И такой же пример нужен для x64 систем.
Пример от Ivn78 решение правильное, только в ветке реестра HKEY_CURRENT_USER (HKCU) нет разделения на 32 и 64 версии программ, есть только в одной HKEY_LOCAL_MACHINE (HKLM)

Код:

Root: HKLM; SubKey: SOFTWARE\DVDFab; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\DVDFab\RegInfo; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\DVDFab\RegInfo\Password; Flags: uninsdeletekeyifempty

Root: HKLM; SubKey: SOFTWARE\Wow6432Node\DVDFab; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\DVDFab\RegInfo; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\DVDFab\RegInfo\Password; Flags: uninsdeletekeyifempty

Цитата:

Цитата web_form
Nordek, где мне его искать,в скрипте или папке modules?

В form.iss

TextLabel[10]:= TLabel.Create(WizardForm);
Font.Height := -13;

Правда в данном блоке всё это продублировано аж 3 раза.
А зачем вам этот размер уменьшать, на всех страницах данный лейбл одинаков -13

ENERGES 20-12-2017 18:35 2785875

ZVSRus, в конце размер шрифта немного вили к

ZVSRus 20-12-2017 18:48 2785879

web_form

Я не пойму, в каком конце, на последней странице шрифт больше чем на предыдущих?

ENERGES 20-12-2017 18:56 2785880

ZVSRus, да,всё получилось,изменить надо было font.Size:=13; на font.Size:=11;
спасибо огромное

Iska 20-12-2017 19:25 2785891

Цитата:

Цитата ZVSRus
только в ветке реестра HKEY_CURRENT_USER (HKCU) нет разделения на 32 и 64 версии программ, есть только в одной HKEY_LOCAL_MACHINE (HKLM) »

Да ну :)

ZVSRus 20-12-2017 19:43 2785896

Iska
То что вы показываете, я видел, у меня тоже самое есть. Есть ещё Гугл. Не думаю что у вас в данной ветке наберетя десяток программ.

[Registry]
Root: HKCU; SubKey: Software\Wow6432Node\Google; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Wow6432Node\Google\Chrome; Flags: uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Wow6432Node\Google\Chrome\Extensions; Flags: uninsdeletekeyifempty

Я просто не стал писать кроме редких исключений, даже может редчайших.

Iska 20-12-2017 19:59 2785902

Цитата:

Цитата ZVSRus
То что вы показываете, я видел, у меня тоже самое есть. »

ZVSRus, тогда, значит, я не понял посыла Вашей фразы про:
Цитата:

Цитата ZVSRus
только в ветке реестра HKEY_CURRENT_USER (HKCU) нет разделения на 32 и 64 версии программ, есть только в одной HKEY_LOCAL_MACHINE (HKLM) »


Цитата:

Цитата ZVSRus
Есть ещё Гугл. Не думаю что у вас в данной ветке наберетя десяток программ.

Я просто не стал писать кроме редких исключений, даже может редчайших. »

У меня — точно не наберётся, поскольку я стараюсь использовать native x64 приложения и устанавливаю как их, так и x86 в режиме «На машину». Если бы я предпочитал обратное — x86 в режиме «На пользователя» — набралась бы куча мала.

ZVSRus 20-12-2017 20:35 2785921

Iska

Просто наверное не правильно сформулировал предложение, нужно было что типа такого:

Хотя в ветке реестра HKEY_CURRENT_USER (HKCU) и есть Wow6432Node но обычные программы туда не летят, записи 64 битных программ находятся в ветке Root: HKLM; SubKey: SOFTWARE\; Flags: uninsdeletekeyifempty

записи 32 битных программ на 64 битной системе находятся в ветке Root: HKLM; SubKey: SOFTWARE\Wow6432Node\; Flags: uninsdeletekeyifempty

Себя не причисляю к продвинутым пользователям, и мне без разницы native x64 приложения или какие то другие, но ежемесячно, ради своих экспериментов ставлю и затем удаляю не одну сотню программ, но в данной ветке не встречал более того что есть.

vvVVvv VV vvVVvv 20-12-2017 21:05 2785930

Цитата:

Цитата ZVSRus
В шапке темы, под спойлером Дополнительные программы для Inno Setup: найдете ковертер, скачайте и установите, пкм по рег файлу, в контекстном меню выбираете конвертировать в iss, получаете готовую секцию [Registry], копируете её и вставляете себе в скрипт. »

Какую из этих?
Converter или RegExporter

Ivn78 20-12-2017 21:45 2785936

Цитата:

Цитата vvVVvv VV vvVVvv
Какую из этих? »

Без разницы. Converter умеет только в iss и не требует установки, RegExporter кроме iss поддерживает форматы NSIS и WiX и требует инсталляции. Для Inno годятся оба

El Sanchez 21-12-2017 09:53 2785997

Цитата:

Цитата ZVSRus
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\DVDFab; Flags: uninsdeletekeyifempty
Я просто не стал писать кроме редких исключений, даже может редчайших.
»

ZVSRus, нельзя явно писать Wow6432Node, никаких исключений.
Вот тут когда-то расписывал (слово "куст" читать как "раздел", да, знаю, путал термины :)).

ENERGES 21-12-2017 13:36 2786037

Подскажите пожалуйста как убрать локализацию языка https://s8.hostingkartinok.com/uploa...a8ddb8b5a1.png
http://rgho.st/8TsjZx2Y6

ZVSRus 21-12-2017 14:59 2786056

web_form,

Код:

[Components]
Name: Icons; Description:Дополнительные задачи:; Types: custom; Flags: fixed
 
Name: Icons\CreateDesktopIcon; Description:Создать ярлык на рабочем столе; Types: custom;
 Name: Icons\StartMenuIcon; Description:Создать ярлык в меню Пуск; Types: custom;
//#ifdef Components
// Name: Lang; Description: Локализация:; Types: custom; Flags: fixed
// Name: Lang/rus; Description: Русский; Flags: exclusive;
// Name: Lang/eng; Description: Английский; Flags: exclusive;
//#endif
 
Name: Redist; Description:Дополнительное программное обеспечение:; Types: custom; Flags: fixed
 
Name: Redist\Redist1; Description:Установить\Обновить Microsoft DirectX (требуеться соединение с интернетом); Types: custom;
 Name: Redist\Redist2; Description:Установить\Обновить Microsoft Visual С++; Types: custom;


ENERGES 21-12-2017 15:06 2786059

ZVSRus, когда запускаешь отдельно Setup.exe оно всё равно отображается и при нажатие рус енг выдает ошибку https://s8.hostingkartinok.com/uploa...a3ef8d1955.png

Iska 21-12-2017 15:41 2786068

Цитата:

Цитата ZVSRus
Iska
Просто наверное не правильно сформулировал предложение, нужно было что типа такого:
»

ZVSRus, спасибо, ясно.

Нет. Тут дело не в том, «обычные программы» или не «обычные». Дело в том, в каком режиме устанавливается приложение. Если оно устанавливается в режиме «На машину» — используется HKLM, Program Files для файлов и общий профиль для общих настроек/ярлыков, если в режиме «На пользователя» — используется HKCU и профиль пользователя для файлов, настроек и ярлыков (я излагаю очень упрощённо, в реальности там куча тонкостей). Ну, по крайней мере, теоретически должна использоваться, поскольку сие оговорено требованиями.

И независимо от изложенного выше, есть отдельная история — для x86 приложений (в том числе и для инсталляций) под x64 ОС используется виртуализация некоторых разделов реестра и путей файловой системы. Краткие обзорные сведения и отношение к технологии со стороны разных производителей страждущие (Вам оно, скорее всего, не требуется) могут почерпнуть по запросу per-user per-machine installation - Поиск в Google.

ZVSRus 21-12-2017 16:47 2786084

web_form
Код:

//===== [Components] =====\\:
;#Define Components
;#Define ComponentsNo


ENERGES 21-12-2017 18:00 2786099

подскажите пожалуйста как изменить жирность шрифта https://s8.hostingkartinok.com/uploa...6e245b9895.png

nik1967 23-12-2017 10:03 2786334

Бедный мой инсталлятор. Что с ним пытаются сделать? (Не начинка, конечно же, а дизайн, содранный с моего инсталла).

ENERGES 23-12-2017 10:29 2786337

nik1967, пытаюсь создать ваш оригинальный скрипт ,не подскажите как подключить md5?

ENERGES 23-12-2017 19:16 2786421

подскажите пожалуйста как убрать это синий окно https://s8.hostingkartinok.com/uploa...66701ac6c8.png
хочу чтобы выглядела так https://s8.hostingkartinok.com/uploa...7ef025fdde.png
http://rgho.st/8TsjZx2Y6

vvVVvv VV vvVVvv 24-12-2017 19:19 2786604

Каждый из вас по разному написал и я не пойму,так всё таки, как правильно прописать , что бы установка в реестре прописывалась туда ,куда установил пользователь и можно такой же пример для установки в x86 битную систему,вот по этим примерам реестров.
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\Command and Conquer Generals Zero Hour]
"Uninstall Program"="\"C:\\Program Files (x86)\\Common Files\\EAInstaller\\Command and Conquer Generals Zero Hour\\Cleanup.exe\""
"Uninstall Arguments"="uninstall_game -autologging -keepMaintenanceLog"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EA Core]
"ClientVersion"="7.0.0.1"
"ClientPath"="D:\\Games\\Origin\\legacyPM\\OriginLegacyCLI.exe"
"ClientAccessDLLPath"="D:\\Games\\Origin\\legacyPM\\CmdPortalClient.dll"
"EADM6Version"="7.0.0.1"
"EADM6InstallDir"="D:\\Games\\Origin"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EA Games]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Command and Conquer Generals Zero Hour]
"Language"="english"
"MapPackVersion"=dword:00010000
"Version"=dword:00010004

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Command and Conquer Generals Zero Hour\ergc]
@="bnfgnfgnfgnfgnfgnfg"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Generals]
"MapPackVersion"=dword:00010000
"Version"=dword:00010008
"InstallPath"="D:\\Games\\Command and Conquer Generals Zero Hour\\Command and Conquer Generals\\"
"Language"="english"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EA Games\Generals\ergc]
@="asfdsfsdfsdfasasasfwsf"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EADM]
"ClientVersion"="10.5.8.17910"
"ClientPath"="D:\\Games\\Origin\\Origin.exe"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\EA Games]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\EA Games\Command and Conquer Generals Zero Hour]
"GDFBinary"="D:\\Games\\Command and Conquer Generals Zero Hour\\GDFBinary_en_US.dll"
"GameExplorer"="{фффффффф-фффф-фффф-фффф-ффффффффф}"
"DisplayName"="Command & Conquer™: Generals and Zero Hour"
"Locale"="en_US"
"Product GUID"="{фффффф-фффф-фффф-фффф-фффффффффффф}"
"Install Dir"="D:\\Games\\Command and Conquer Generals Zero Hour\\"


ENERGES 25-12-2017 15:18 2786847

del

ZVSRus 25-12-2017 18:27 2786902

web_form
Ну вы вообще!
То что обведено в рамочку, и называете окнами, может вы можете это все перетащить куда нибудь?

ENERGES 25-12-2017 18:31 2786904

ZVSRus, я часть файлов и текстов удалил осталось только последние

boss911 25-12-2017 18:37 2786905

Цитата:

Цитата vvVVvv VV vvVVvv
что бы установка в реестре прописывалась туда ,куда установил пользователь и можно такой же пример для установки в x86 битную систему »

Скрытый текст
Код:

[Setup]
DefaultDirName={pf}\Command and Conquer Generals Zero Hour

[Registry]
Root: HKLM; SubKey: SOFTWARE\EA Games; ValueType: none; Flags: uninsdeletekeyifempty dontcreatekey
Root: HKLM; SubKey: SOFTWARE\EA Games\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: GDFBinary; ValueData: {app}\GDFBinary_en_US.dll; Flags: uninsdeletekeyifempty uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\EA Games\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: GameExplorer; ValueData: {{фффффффф-фффф-фффф-фффф-ффффффффф}; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\EA Games\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: DisplayName; ValueData: Command & Conquer™: Generals and Zero Hour; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\EA Games\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: Locale; ValueData: en_US; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\EA Games\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: Product GUID; ValueData: {{фффффф-фффф-фффф-фффф-фффффффффффф}; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\EA Games\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: Install Dir; ValueData: {app}\; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts; ValueType: none; Flags: uninsdeletekeyifempty dontcreatekey
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: Uninstall Program; ValueData: """{cf}\EAInstaller\Command and Conquer Generals Zero Hour\Cleanup.exe"""; Flags: uninsdeletekeyifempty uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: Uninstall Arguments; ValueData: uninstall_game -autologging -keepMaintenanceLog; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core; ValueType: none; Flags: uninsdeletekeyifempty dontcreatekey
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core; ValueType: string; ValueName: ClientVersion; ValueData: 7.0.0.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core; ValueType: string; ValueName: ClientPath; ValueData: D:\Games\Origin\legacyPM\OriginLegacyCLI.exe; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core; ValueType: string; ValueName: ClientAccessDLLPath; ValueData: D:\Games\Origin\legacyPM\CmdPortalClient.dll; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core; ValueType: string; ValueName: EADM6Version; ValueData: 7.0.0.1; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core; ValueType: string; ValueName: EADM6InstallDir; ValueData: D:\Games\Origin; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games; ValueType: none; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Command and Conquer Generals Zero Hour; ValueType: string; ValueName: Language; ValueData: english; Flags: uninsdeletekeyifempty uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Command and Conquer Generals Zero Hour; ValueType: dword; ValueName: MapPackVersion; ValueData: $00010000; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Command and Conquer Generals Zero Hour; ValueType: dword; ValueName: Version; ValueData: $00010004; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Command and Conquer Generals Zero Hour\ergc; ValueType: string; ValueData: bnfgnfgnfgnfgnfgnfg; Flags: uninsdeletekeyifempty uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Generals; ValueType: dword; ValueName: MapPackVersion; ValueData: $00010000; Flags: uninsdeletekeyifempty uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Generals; ValueType: dword; ValueName: Version; ValueData: $00010008; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Generals; ValueType: string; ValueName: InstallPath; ValueData: {app}\Command and Conquer Generals\; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Generals; ValueType: string; ValueName: Language; ValueData: english; Flags: uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Generals\ergc; ValueType: string; ValueData: asfdsfsdfsdfasasasfwsf; Flags: uninsdeletekeyifempty uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EADM; ValueType: string; ValueName: ClientVersion; ValueData: 10.5.8.17910; Flags: uninsdeletekeyifempty uninsdeletevalue
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EADM; ValueType: string; ValueName: ClientPath; ValueData: D:\Games\Origin\Origin.exe; Flags: uninsdeletevalue


В скрипте используйте константу {app}, она будет равна значению, которое указано в DefaultDirName или тому, что пользователь укажет в окне выбора папки установки. Только вот я не знаю, что с "Origin", судя по реестру, оно ставится не в папку с основным приложением (игрой), тут вам виднее, как быть. Ключи реестра тут прописаны под 32-битную ОС, так как игра тоже 32-битная, судя из вашего REG примера.

ZVSRus 25-12-2017 19:05 2786908

Цитата:

Цитата web_form
я часть файлов и текстов удалил осталось только последние

Большая часть текстов, которые вы видите на той или иной странице находятся в модуле messages.iss
У каждого текста в начале строки есть, как бы правильно сказать идентификатор

engwpFinished21=An error occurred during installation! Please correct the problem and run Setup again.
ruswpFinished21=Во время установки произошла ошибка! Пожалуйста, устраните проблему и запустите установку снова.

Caption := CustomMessage(lang+'wpFinished21') - Когда найдёте то что выделено, это будет сам лейбл со всеми координатами и размерами текста. Где искать не говорю, даю возможность найти самому, и научится ориентироваться.

ENERGES 25-12-2017 20:29 2786930

ZVSRus, нашло а как убрать жирность текста

ZVSRus 25-12-2017 20:48 2786933

Цитата:

Цитата web_form
а как убрать жирность текста

Код:

TextLabel[4]:= TLabel.Create(WizardForm);
with TextLabel[4] do
begin
AutoSize:= false;
Parent := WizardForm;
Font.Color := clWindowText; закомментируй строку
Font.Height := -11;                закомментируй строку
Font.Name := 'Tahoma';
WordWrap:= true;
Transparent := True;
Left := ScaleX(40);
Top := ScaleY(28);
Height := ScaleY(15);
Width := ScaleX(620);
font.color:=clred;      // цвет шрифта
Font.Style:=[fsBold]; // стить шрифта
font.Size:=7;            //  размер шрифта
Caption := CustomMessage(lang+'wpFinished21')
end;


ENERGES 25-12-2017 20:56 2786934

подскажите пожалуйста как сделать такое окно http://www.picshare.ru/uploads/171226/UX9WP71bwy.jpg
http://rgho.st/8TsjZx2Y6
в этом скрипте есть http://rgho.st/6lp6vVmrZ но не знаю как распределить к ординаты

pollipen 26-12-2017 20:23 2787217

парни подскажите в чём проблема, поправте.
скрипт
[code]
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=C:\Users\ww\Desktop
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Dll Pack\ISSkin.dll"; DestDir: "{app}"; Flags: ignoreversion dontcopy
Source: "C:\Program Files (x86)\Inno Setup 5\IS_Skin\Styles\Chromium.cjstyles"; DestDir: "{tmp}"; Flags: ignoreversion dontcopy
Source: "..\skf.exe"; DestDir: "{tmp}"; Flags: ignoreversion


Код:

function InitializeSetup2(): Boolean;
var
  ErrorCode: Integer;
begin
  if not FileExists(ExpandConstant('{tmp}\skf.exe')) then ExtractTemporaryFile('skf.exe');
  Exec(ExpandConstant('{tmp}\skf.exe'), '', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);
  result:=True;
end;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup1(): Boolean;
begin
  ExtractTemporaryFile('Chromium.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Chromium.cjstyles'), '');
  Result := True;
end;

procedure DeinitializeSetup();
begin
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  Sleep(110);
  UnloadSkin();
end;

function InitializeSetup(): Boolean;
begin
InitializeSetup2(): Boolean;
InitializeSetup1(): Boolean;
end;


vvVVvv VV vvVVvv 27-12-2017 03:37 2787293

Цитата:

Цитата boss911
В скрипте используйте константу {app}, она будет равна значению, которое указано в DefaultDirName или тому, что пользователь укажет в окне выбора папки установки. Только вот я не знаю, что с "Origin", судя по реестру, оно ставится не в папку с основным приложением (игрой), тут вам виднее, как быть. Ключи реестра тут прописаны под 32-битную ОС, так как игра тоже 32-битная, судя из вашего REG примера. »

Ну нет же,мой пример под x64,вот же путь [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EA Games]

Nordek 27-12-2017 11:42 2787326

Цитата:

Цитата pollipen
поправте. »

Поправил:
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=C:\Users\ww\Desktop
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Dll Pack\ISSkin.dll"; DestDir: "{app}"; Flags: ignoreversion dontcopy
Source: "C:\Program Files (x86)\Inno Setup 5\IS_Skin\Styles\Chromium.cjstyles"; DestDir: "{tmp}"; Flags: ignoreversion dontcopy
Source: "..\skf.exe"; DestDir: "{tmp}"; Flags: ignoreversion

[Code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;

begin
  if not
FileExists(ExpandConstant('{tmp}\skf.exe')) then ExtractTemporaryFile('skf.exe');
  Exec(ExpandConstant('{tmp}\skf.exe'), '', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);
  result:=True;

  ExtractTemporaryFile('Chromium.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Chromium.cjstyles'), '');
  Result := True;
end;

procedure DeinitializeSetup();
begin
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  Sleep(110);
  UnloadSkin();
end;



P.S pollipen, Также это прочтите.

boss911 27-12-2017 14:27 2787357

Цитата:

Цитата vvVVvv VV vvVVvv
Ну нет же »

Вы, прежде чем так категорично отвечать, сначала бы проверили скрипт, почитали, что такое Wow6432Node, а так отбивает всякое желание вам помогать. HKLM\SOFTWARE\Wow6432Node в вашем REG примере свидетельствует о том, что 32-bit приложение (игра) было установлено в OS 64-bit. При установке 32-bit приложения в OS 64-bit, WOW64 автоматически перенаправляет реестр и файлы в соответствующие ветки и папки. Мой пример скрипта написан для 32-bit приложения, и он корректно отработает, как в OS 32-bit, так и в OS 64-bit. И еще раз: сначала проверяем и только потом отписываемся, что что-то не так.

Nordek 27-12-2017 16:29 2787403

Цитата:

Цитата vvVVvv VV vvVVvv
Ну нет же,мой пример под x64,вот же путь [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Electronic Arts\EA Games] »

Я надеялся вы пошутили - оказывается вы правда не понимаете.
Для начала изучите реестр.
Затем изучите Inno.
После этого что-то будете утверждать если получится.

У вас по умолчанию содержимое будет извлечено в "C:\Program Files (x86)", а данные реестра внесены в "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node" - Поскольку сам исполняемый файл является как x32 приложение.

Чтоб по умолчанию устанавливалось в "C:\Program Files" а данные реестра вносились в "HKEY_LOCAL_MACHINE\SOFTWARE" необходимо приложение пометить как явное x64 - Для этого нужно в секции [Setup] установить директиву ArchitecturesInstallIn64BitMode со значением x64:
Код:

[Setup]
ArchitecturesInstallIn64BitMode=x64


Если хотите чтоб приложение x32 устанавливало программу в системе x64 как для x64 - нужно в секции [Setup], в директиве DefaultDirName, заменить константу {pf} на {pf64}
Код:

DefaultDirName={pf64}\Example

Равно как и для реестра в секции [Registry] - В корне вместо HKLM указать HKLM64
Код:

[Registry]
Root: "HKLM64"; Subkey: "SOFTWARE\Test"; ValueType: string; ValueName: "UninstProg"; ValueData: """{cf64}\Installer"""; Flags: uninsdeletekeyifempty uninsdeletevalue


По этому давайте не будете писать нелепицу, я уже начинаю путаться от подобной чуши которую вы представляете.

Iska 27-12-2017 17:16 2787418

Тут надо не реестр изучать, а MSDN и TechNet: принципы функционирования x86-приложений под x64 ОС, что такое перенаправление, как оно работает, к каким объектам файловой системы и к каким разделам реестра оно применяется, как и в каких случаях может быть отключено, и т.д, и т.п. И это — помимо общих принципов, по которым должны работать инсталляторы в «родной среде». В общем, учиться, учиться и учиться читать, читать и читать. Потом пробовать, пробовать и пробовать, раз за разом набивая собственные шишки на собственных ошибках. Иначе («ну ничё не получается, памажите люди добрые, сделайте всё за меня») толку не будет. Никакого.

ENERGES 28-12-2017 06:06 2787587

подскажите пожалуйста,где путь лежит к этим шрифтам https://s8.hostingkartinok.com/uploa...ced42b2a72.png

Nordek 28-12-2017 07:13 2787592

Цитата:

Цитата web_form
подскажите пожалуйста,где путь лежит к этим шрифтам »

%WinDir%\Fonts

Если шрифт изменить хотите, то:
Код:

[Code]
procedure InitializeWizard();
begin
  WizardForm.PageDescriptionLabel.Font.Name := 'Times New Roman';
  WizardForm.PageNameLabel.Font.Name := 'Times New Roman';
end;

Первое сообщение темы:
Цитата:

Цитата El Sanchez
»


ENERGES 28-12-2017 09:35 2787615

Nordek, нет,хочу переименовать,всё не могу найти

ZVSRus 28-12-2017 14:56 2787712

Цитата:

Цитата web_form
нет,хочу переименовать,всё не могу найти

Чтобы что то найти, нужно сначала сообразить как это окно (в данном случае) называется (на что вы нажали, что появилось именно это окно, а не какое то другое).
Я думал что вы хоть немного начали ориентироваться где что находиться, а вы все там же!

ENERGES 28-12-2017 15:00 2787713

ZVSRus, я новичок в этом деле

Nordek 28-12-2017 15:03 2787714

Цитата:

Цитата web_form
хочу переименовать,всё не могу найти »

Смотрите по знакомым словам в основном скрипте или подключаемых, например "Cancel unpacking"
Скрытый текст
Клавиши CTRL+F и F3 - Работают.

ENERGES 28-12-2017 15:06 2787715

всё нашёл спасибо

ZVSRus 28-12-2017 15:22 2787717

Цитата:

Цитата web_form
искал везде но не нашло

Ну во первых наверное, не нашло, а, не нашёл!
Я вам уже говорил, что все в данном проекте разбросано по подключаемым модулям. Окно что вы показываете, это форма вызванная нажатием кнопки отмена. Открываем папку modules и видим cancel form.iss. Все что там находится относится к данной форме отмены. И уже по названиям лейблов ищем все компоненты.

ENERGES 28-12-2017 15:26 2787718

ZVSRus, нашёл change lang прописоноКлавиши CTRL+F помог спасибо
там "Нажмите «Да», чтобы выйти из программы установки"недописанный "«Нет», чтобы продолжить." если прописать то сежает куда то если в центр то английский из центро пропадает
всё в одном кординате вздвиге прописон ,как бы отдельно можно приписать?

ZVSRus 28-12-2017 15:46 2787720

Цитата:

Цитата web_form
всё в одном кординате вздвиге прописон ,как бы отдельно можно приписать?

Ничего не понял, ещё раз, поподробней, и по понятней!

ENERGES 28-12-2017 15:52 2787721

Цитата:

Цитата ZVSRus
Я вам уже говорил, что все в данном проекте разбросано по подключаемым модулям. »

в этом скрипте не так http://rgho.st/8kK9cYq6r всё в одном,потом автор скрипте выложил всё по полочкам там и md5 есть и это окно http://www.picshare.ru/uploads/171226/UX9WP71bwy.jpg
можно ли как не будь выковыривоть эту окну http://www.picshare.ru/uploads/171226/UX9WP71bwy.jpg

Цитата:

Цитата ZVSRus
Ничего не понял, ещё раз, поподробней, и по понятней! »

если передвинуть в центр https://s8.hostingkartinok.com/uploa...ccfec06ccf.png https://s8.hostingkartinok.com/uploa...73c8c8ebfa.png
и надпись с английского передвигаедся https://s8.hostingkartinok.com/uploa...7066caec23.png ,можноли всё это отдельно сделать чтобы отдельно передвигалось

ZVSRus 28-12-2017 16:42 2787732

Цитата:

Цитата web_form
в этом скрипте не так http://rgho.st/8kK9cYq6r всё в одном,потом автор скрипте выложил всё по полочкам там и md5 есть и это окно http://www.picshare.ru/uploads/171226/UX9WP71bwy.jpg

Ну по первых, что вы показываете, это не окно а стандартная страница ReadyPage, страница готовности, которая никого ни к чему не обязывает (некоторые товарищи плюются на данную страницу, лишний раз нужно нажимать на кнопку далее) в данном скрипте она включена, в скрипте что вы переделываете она отключена (пропущена). Ничего выковыривать, ни откуда не нужно.
В скрипте что вы переделываете, нужно внимательно пошариться, и включить данную страницу (для каких целей не понятно), но как она будет выглядеть, это уже большой вопрос, потому что данный скрипт написан с нуля (от Inno Setup там осталось одно название), все родные компоненты скрыты.
На счет второго вопроса, я уже честно запутался, то вы с одного скрипта покажете скриншот, то от другого, из двух скриптов собирать один (какой вы хотите) вам никто не будет, сделайте за меня, это уже вопрос для другой темы.

ENERGES 28-12-2017 18:06 2787761

подскажите пожалуйста как включить такое окно http://www.picshare.ru/uploads/171226/UX9WP71bwy.jpg
вот скрип с файлами http://rgho.st/8TsjZx2Y6

boss911 29-12-2017 02:12 2787869

Цитата:

Цитата web_form
подскажите пожалуйста как включить такое окно http://www.picshare.ru/uploads/171226/UX9WP71bwy.jpg »

Код:

[Setup]
DisableReadyPage=no

По умолчанию страница включена (DisableReadyPage=no), так что либо укажите no, либо вообще уберите эту дерективу.

ENERGES 29-12-2017 12:26 2787908

boss911, убрал но всё равно не показывается это страничка

ZVSRus 29-12-2017 14:31 2787926

Цитата:

Цитата web_form
убрал но всё равно не показывается это страничка

Если вы сделали как вам подсказал boss911, то страничка показывается, только она имеет вид предыдущей страницы
(Компоненты, Дополнительные задачи и Ярлыки), обрати внимание, когда на странице Компоненты, Дополнительные задачи и Ярлыки вы нажимаете на кнопку установить, то у вас ощущение что как бы ничего не произошло, никуда вас не перекинуло, на самом деле вы уже находитесь на странице ReadyPage ту что включили, то есть по внешнему виду вам показывается страница Компоненты, Дополнительные задачи и Ярлыки как бы два раза. Я же вам написал выше (но как она будет выглядеть, это уже большой вопрос). Это потому что OuterNotebook скорее всего скрыт (сам по скрипту и модулям не выискивал), так как у всех компонентов на всех страницах родитель WizardForm. Каждая страница отрисовывалась по отдельности. В папке modules есть hides.iss где все компоненты что задумал автор скрипта скрыты, а уже в моделе page.iss на разных страницах показываются соответствующие компоненты.
Но так как для страницы ReadyPage нет никаких компонентов, да и в скрипте нет ничего для данной страницы, вот по этому на ней отображается все что на предыдущей странице. Выхода два, перенести что связано с данной страницей из другого скрипта, или отрисовывать данную страницу вновь.
Но это как говорится, уже другая история.

ENERGES 29-12-2017 14:45 2787929

Цитата:

Цитата ZVSRus
Выхода два, перенести что связано с данной страницей из другого скрипта, или отрисовывать данную страницу вновь.
Но это как говорится, уже другая история. »

не могли бы вы помочь в этом?

ZVSRus 29-12-2017 14:55 2787934

Цитата:

Цитата web_form
не могли бы вы помочь в этом?

Извиняюсь, но в данный момент, ни времени, ни желания нет.

ENERGES 30-12-2017 18:13 2788131

подскажите пожалуйста как включить такую страничку https://s8.hostingkartinok.com/uploa...40a81c5a9e.png
вот скрип с файлами http://rgho.st/8TsjZx2Y6

pollipen 04-01-2018 18:07 2788918

http://rgho.st/6t4LxzN8V забирай web form

ENERGES 05-01-2018 10:10 2789042

pollipen, это тот же скрипт который я выложим, в нём нет ничего изменённого

pollipen 11-01-2018 15:01 2790549

парни как можно сделать перед установкой основной программы сделать тихую установку другой программы
скрипт

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=C:\Users\ww\Desktop
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Dll Pack\ISSkin.dll"; DestDir: "{app}"; Flags: ignoreversion dontcopy
Source: "C:\Program Files (x86)\Inno Setup 5\IS_Skin\Styles\Chromium.cjstyles"; DestDir: "{tmp}"; Flags: ignoreversion dontcopy

[code]
Код:

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
begin
  if not FileExists(ExpandConstant('{tmp}\skf.exe')) then ExtractTemporaryFile('skf.exe');
  Exec(ExpandConstant('{tmp}\skf.exe'), '', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);
  ExtractTemporaryFile('Chromium.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Chromium.cjstyles'), '');
  result:=True;
end;

procedure DeinitializeSetup();
begin
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  Sleep(110);
  UnloadSkin();
end;


Dodakaedr 18-01-2018 18:36 2792337

Как выровнять текст по середине в TNewEdit?

JIeT4uK 18-01-2018 23:39 2792402

прошу легкой помощи.
понадобилось собрать инсталлятор.
нужно прочитать из реестра ключ. в ключе путь куда нужно распаковать файлы

вот и все .

подскажите как это сделать

habib2302 19-01-2018 00:50 2792419

JIeT4uK, самый простой вариант
для определенного файла
Код:

[Files]
Source: Fonts.7z; DestDir: {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CommonFilesDir|{pf}\My Programm}; Flags: IgnoreVersion;

для всех файлов
Код:

[Setup]
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CommonFilesDir|{pf}\My Programm}


JIeT4uK 19-01-2018 09:53 2792452

Оно! Спасибо

еще вопросик.
как достучаться до HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{3B97C9A2-56CE-480B-AD59-9B320479A5CE}_is1

пишет Invalid Registry constant

habib2302 19-01-2018 11:12 2792458

JIeT4uK, пробуйте
Код:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\%7B{3B97C9A2-56CE-480B-AD59-9B320479A5CE}_is1

JIeT4uK 19-01-2018 13:48 2792496

вернулось дефолтное значение. значит не прочитало
как в процессе увидеть что возвращает функция

boss911 19-01-2018 15:51 2792542

Цитата:

Цитата JIeT4uK
как достучаться до HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{3B97C9A2-56CE-480B-AD59-9B320479A5CE}_is1 »

Используйте двойные (фигурные) открывающие скобки:
Код:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{3B97C9A2-56CE-480B-AD59-9B320479A5CE}_is1

Прошу прощения, я не прав. Использование двойных фигурных скобок внутри константы не работает, как в других случаях, я не знал об этом нюансе.

И никогда не используйте в путях WOW6432Node. Если инсталлятор работает в 32-битном режиме (ArchitecturesInstallIn64BitMode=x86 или не задано), то Windows x64 (WOW64) автоматически перенаправит путь в WOW6432Node.

JIeT4uK 19-01-2018 17:26 2792570

Код:

[Files]
 
 Source: "e:\Cloud\Lector\Demo3\*"; DestDir: {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%7b{3B97C9A2-56CE-480B-AD59-9B320479A5CE%7d_is1},InstallLocation}; Flags: ignoreversion recursesubdirs createallsubdirs  ; Check: IsWin64

путь возвращается пустой. в чем проблема ??

boss911 19-01-2018 21:24 2792606

Цитата:

Цитата JIeT4uK
в чем проблема ?? »

В упорном не чтении того, что вам пишут (мой пост выше). И уберите Check: IsWin64, в вашем случае оно только навредит.

JIeT4uK 20-01-2018 10:30 2792654

эксперименты показали что не читает из HKLM даже при запуске от имени админа.
а из HKCU все норм читается и работает

есть выход из этой проблемы??

habib2302 20-01-2018 11:25 2792661

JIeT4uK, во-первых очистите свою личку т.к. нет возможности отправить вам сообщение
во-вторых дайте полностью весь скрипт, а не кусок

JIeT4uK 20-01-2018 12:19 2792667

Код:

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{63E1B097-28B1-4F98-ADED-D57966A4ABAC}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup_VL_Soc
Compression=lzma
SolidCompression=yes
;WizardImageFile="D:\Dropbox\Детсад\logo.bmp"   
DisableDirPage=yes
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x86 x64

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"



[Files]

Source: "e:\Cloud\Lector\Demo3\*"; DestDir: "{reg:HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%7b{3B97C9A2-56CE-480B-AD59-9B320479A5CE}_is1,InstallLocation}\Demo3"; Flags: ignoreversion recursesubdirs createallsubdirs


habib2302 20-01-2018 12:32 2792673

JIeT4uK, Вы хоть ветку реестра правильно указали? Большую часть (около 99,9%) всех программ хранятся в ветке HKEY_LOCAL_MACHINE

JIeT4uK 20-01-2018 13:21 2792687

Да. Извините. Забыл исправить после экспериментов. Нужно в HKLM искать

boss911 20-01-2018 18:40 2792733

JIeT4uK

У меня работает:
Код:

#define MyAppName "My Program"

[Setup]
DefaultDirName={pf}\{#MyAppName}

[Files]
Source: MyProg.exe; DestDir: {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%7b{3B97C9A2-56CE-480B-AD59-9B320479A5CE}_is1,InstallLocation|{pf}\{#MyAppName}}

И настоятельно рекомендую дописывать дефолтный путь (выделено красным), на тот случай, если раздела/параметра реестра не существует или не сможет прочитать.

Вы используете директиву ArchitecturesInstallIn64BitMode=x64, которая означает, что инсталлятор будет работать в 64-разрядном режиме, имеет смысл использовать в том случае, если ваше приложение так же 64-разрядное. Имейте это в виду! Если ваше приложение, которое вы компилируете, 32-битное, то не используйте данную директиву, иначе будут проблемы при установке на ОС x64, например, путь, указанный в константе {reg:} не обнаружиться.

Прошу прощения, я был не прав. Использование двойных фигурных скобок внутри константы не работает, как в других случаях, я не знал об этом нюансе.

Nordek 21-01-2018 04:54 2792788

Цитата:

Цитата boss911
Использование двойных фигурных скобок внутри константы не работает, как в других случаях, я не знал об этом нюансе. »

Constants
Константы
Главную роль в скрипте играют константы. Константы всегда заключаются в фигурные скобки { }. Инсталлятор (или деинсталлятор) присваивает константам значения, котроые определяются пользователем, либо опираясь на конфигурацию системы. Например, {win} будет воспринята компилятором как "C:\WINDOWS", если ОС установлена в эту папку.

Символ "{" рассматривается как начало константы. Если требуется ввести "{", наберите ее два раза. (You do not need to double "}" characters.)

Если за константой следует обратный слеш ("\"), инсталлятор его автоматически удалит, если константа уже оканчивается на обратный слеш. Например, если константа {const} имеет значение "C:\", а мы введем {constantname}\filename, в конечном счете получится "C:\filename", а не "C:\\filename", как должно быть по логике. Если требуется вывести именно "C:\\filename", обратный слеш придется заключить в фигурные скобки: {const}{\}\filename.

Список поддерживаемых констант.


Константы папок

{app}
Папка, куда устанавливается приложение. Она выбирается пользователем в окне Выбор папки назначения при установке.
Например: если Вы ввели {app}\MYPROG.EXE в значение параметра Source и пользователь пожелал установить Вашу программу в "C:\MYPROG", на выходе получится "C:\MYPROG\MYPROG.EXE".


{win}
Папка, где установлена Windows.
Например: ввели {win}\MYPROG.INI , папка Windows "C:\WINDOWS", на выходе "C:\WINDOWS\MYPROG.INI".


{sys}
Системная папка Windows.
Например: ввели {sys}\CTL3D32.DLL системная папка Windows "C:\WINDOWS\SYSTEM", на выходе "C:\WINDOWS\SYSTEM\CTL3D32.DLL".

На 64-разрядном Windows, по умолчанию, путь System32, возвращаемый этой константой указывает к папке, содержащий 32-разрядные системные файлы, точно так же как в 32-разрядном Windows. (Константа может быть переопределена включением 64-разрядного режима.)


{syswow64}
На 64-разрядном Windows системная папка SysWOW64, обычно "C:\WINDOWS\SysWOW64". Это каталог, в котором находятся 32-разрядные системные файлы.

Не используйте эту константу, если нет необходимости получить имя каталога, в котором находятся 32-разрядные системные файлы. Многократное использование {syswow64} в местах, где {sys} будет достаточен, может вызвать проблемы. (Для примера см. документацию флага sharedfile секции [Files].)


{src}
Папка, в которой находится инсталлятор.
Например: ввели {src}\MYPROG.EXE, инсталлятор запущен из "S:\", на выходе "S:\MYPROG.EXE".


{sd}
Системный диск, на котором установлен Windows. Обычно это "C:". Эта константа эквивалентна переменной среды SystemDrive.


{pf}
Путь к папке Program Files. {pf} эквивалентна {pf32}, если инсталлятор не работает в 64-разрядном режиме, иначе эквивалентна {pf64}.


{pf32}
Путь к 32-разрядной системной папке Program Files, обычно "C:\Program Files" в 32-разрядном Windows и "C:\Program Files (x86)" в 64-разрядном Windows.


{pf64}
Только для 64-разрядного Windows: 64-разрядные программные файлы. Путь к 64-разрядной системной папке Program Files, обычно "C:\Program Files". Будет исключение, если предпринять попытку использования этой константы в 32-разрядном Windows.


{cf}
Общие файлы - Common Files. {cf} эквивалентна {cf32}, если инсталлятор не работает в 64-разрядном режиме, иначе эквивалентна {cf64}.


{cf32}
32-разрядные общие файлы. Путь к 32-разрядной системной папке Common Files, обычно "C:\Program Files\Common Files" в 32-разрядном Windows и "C:\Program Files (x86)\Common Files" в 64-разрядном Windows.


{cf64}
Только для 64-разрядного Windows: 64-разрядные общие файлы. Путь к 64-разрядной системной папке Common Files, обычно "C:\Program Files\Common Files". Будет исключение, если предпринять попытку использования этой константы в 32-разрядном Windows.


{tmp}
Временная папка. Это не значение переменной среды TEMP пользователя. Это папка, где создаются временные файлы инсталлятора ("C:\WINDOWS\TEMP\IS-xxxxx.tmp"). Все файлы и папки удаляются из папки Temp после завершения установки приложения. Эта константа используется в случае, если в секции [Run] указаны файлы, необходимые при инсталляции, но не нужные для дальнейшей работы приложения.


{fonts}
Папка шрифтов. Обычно именуется FONTS и находится в папке Windows.


{dao}
Папка DAO. Эквивалентна {cf}\Microsoft Shared\DAO.


{dotnet11}
32-разрядная корневая папка .NET Framework версии 1.1.

Будет исключение, если предпринять попытку использования этой константы в системе, где не установлена .NET Framework версии 1.1.


{dotnet20}
Корневая папка .NET Framework версии 2. {dotnet20} эквивалентна {dotnet2032}, если инсталлятор не работает в 64-разрядном режиме, иначе эквивалентна {dotnet2064}.

Будет исключение, если предпринять попытку использования этой константы в системе, где не установлена .NET Framework версии 2.


{dotnet2032}
32-разрядная корневая папка .NET Framework версии 2.

Будет исключение, если предпринять попытку использования этой константы в системе, где не установлена .NET Framework версии 2.


{dotnet2064}
Только для 64-разрядного Windows: 64-разрядная корневая папка .NET Framework версии 2.

Будет исключение, если предпринять попытку использования этой константы в системе, где не установлена .NET Framework версии 2.


{dotnet40}
Корневая папка .NET Framework версии 4. {dotnet40} эквивалентна {dotnet4032}, если инсталлятор не работает в 64-разрядном режиме, иначе эквивалентна {dotnet4064}.

Будет исключение, если предпринять попытку использования этой константы в системе, где не установлена .NET Framework версии 4.


{dotnet4032}
32-разрядная корневая папка .NET Framework версии 4.

Будет исключение, если предпринять попытку использования этой константы в системе, где не установлена .NET Framework версии 4.


{dotne4064}
Только для 64-разрядного Windows: 64-разрядная корневая папка .NET Framework версии 4.

Будет исключение, если предпринять попытку использования этой константы в системе, где не установлена .NET Framework версии 4.



Константы специальных папок

В Inno Setup используются и другие константы, именуемые константами специальных папок. Используются они так же, как и константы папок.

Константы "common" являются общими для всех профилей пользователей.

Константы "user" берутся из профиля текущего пользователя, от имени которого выполняется инсталлятор. А пользователь часто не тот, который находится в системе, так что используйте константы "user" с осторожностью.

Как уже говорилось, константы специальных папок применимы ко всем версиям Windows, поддерживающих Inno Setup.

* = константа "common" равна константе "user", если пользователь, устанавливающий приложение, является администратором или PrivilegesRequired=lowest


{group}
Путь к группе меню Пуск, который пользователь может изменить на странице Выберите папку в меню «Пуск». Эта папка всегда создается для всех профилей пользователей, если только пользователь, устанавливающий приложение, не имеет прав администратора, иначе путь задается только для профиля текущего пользователя.


{localappdata}
Путь к локальной папке приложения (не Roaming).


{sendto}
Путь к папке Send To пользователя (общей Send To папки нет).


{userappdata} & {commonappdata}
Путь к папке с данными приложения (Application Data).


{usercf}
Путь к папке Common Files текущего пользователя. Константа поддерживается только в Windows 7 и более поздних версиях. При использовании в предыдущих версиях Windows значение константы будет заменено на {localappdata}\Programs\Common.


{userdesktop} & {commondesktop} *
Путь к папке рабочего стола.


{userdocs} & {commondocs}
Путь к папке Мои документы.


{userfavorites} & {commonfavorites} *
Путь к папке Избранное.


{userpf}
Путь к папке Program Files текущего пользователя. Константа поддерживается только в Windows 7 и более поздних версиях. При использовании в предыдущих версиях Windows значение константы будет заменено на {localappdata}\Programs.


{userprograms} & {commonprograms} *
Путь к папке Программы в меню Пуск.


{userstartmenu} & {commonstartmenu} *
Путь к "корню" меню Пуск.


{userstartup} & {commonstartup} *
Путь к папке Автозагрузка в меню Пуск.


{usertemplates} & {commontemplates} *
Путь к папке шаблонов.



Прочие константы

{\}
Обратный слеш. Прочитайте в начале этой страницы о правилах использования {\} и \.


{%NAME|DefaultValue}
Вставляет значение переменной среды.
  • NAME - имя переменной среды
  • DefaultValue - определяет текст, который будет вставлен в случае, если константа не существует
  • Для вставки запятой, вертикальной черты ("|"), или закрывающей фигурной скобки ("}") запишите нужный символ в виде "%-код символа.". Замените символ символом "%" и его двухразрядным шестнадцатеричным кодом. Запятая - "%2c", вертикальная черта - "%7c", и закрывающая фигурная скобка - "%7d". Если Вы хотите включить символ "%", используйте "%25".
  • NAME и DefaultValue могут содержать константы. Обратите внимание, что описанным выше способом закрывающая фигурная скобка задается только в случае, когда она используется сама по себе. Если же она обозначает константу, подобные изощрения не нужны.
Например:
Код:

{%COMSPEC}
{%PROMPT|$P$G}


{cmd}
Полный путь к стандартному системному интерпретатору. Это обычно Windows\System32\cmd.exe. При этом переменная среды COMSPEC не используется.


{computername}
Имя компьютера, на котором запущен инсталлятор или деинсталлятор (результат функции GetComputerName).


{drive:Path}
Возвращает букву диска и двоеточие из указанного пути (например, "C:"). В случае установки через сеть возвращает имя сервера и имя общего документа (например, "\\SERVER\SHARE").
  • Path - определяет путь.
  • Для вставки запятой, "|", или "}" запишите нужный символ в виде"%-код символа.". Например, запятая - это "%2c", вертикальная черта - "%7c", "}" - "%7d". "%" = "%25".
  • Path может содержать константы. Обратите внимание, что описанным выше способом закрывающая фигурная скобка задается только в случае, когда она используется сама по себе. Если же она обозначает константу, подобные изощрения не нужны.
Примеры:
Код:

{drive:{src}}
{drive:c:\path\file}
{drive:\\server\share\path\file}


{groupname}
Имя папки, которую пользователь выбрал на странице Выберите папку в меню «Пуск». В отличие от константы {group} эта константа равна имени папки «Пуск», а не полному пути к ней.


{hwnd}
(Специального назначения) Дескриптор фонового окна инсталлятора.


{wizardhwnd}
(Специального назначения) Дескриптор окна мастера инсталлятора. Равен '0', если на момент обращения окно не существует.


{ini:Filename,Section,Key|DefaultValue}
Берет значение из .INI файла.
  • Filename - имя ini-файла, из которого производится чтение
  • Section - имя секции
  • Key - имя ключа
  • DefaultValue - значение, возвращаемое, если параметр не существует
  • Для вставки запятой, "|", или "}" запишите нужный символ в виде"%-код символа.". Например, запятая - это "%2c", вертикальная черта - "%7c", "}" - "%7d". "%" = "%25".
  • Filename, Section, и Key могут содержать константы. Обратите внимание, что описанным выше способом закрывающая фигурная скобка задается только в случае, когда она используется сама по себе. Если же она обозначает константу, подобные изощрения не нужны.
Например:
Код:

{ini:{win}\MyProg.ini,Settings,Path|{pf}\My Program}

{language}
Встроенное имя выбранного языка. Для справки обратитесь к секции [Languages].


{cm:MessageName}
{cm:MessageName,Arguments}

Возвращает стандартное сообщение на заданном языке.
  • MessageName - имя стандартного сообщения, из которого производится считывание. Для справки обратитесь к секции [CustomMessages] .
  • Arguments - аргументы сообщения, разделенные запятыми
  • Для вставки запятой, "|", или "}" запишите нужный символ в виде"%-код символа.". Например, запятая - это "%2c", вертикальная черта - "%7c", "}" - "%7d". "%" = "%25".
  • Каждый аргумент в Arguments может содержать константы. Обратите внимание, что описанным выше способом закрывающая фигурная скобка задается только в случае, когда она используется сама по себе. Если же она обозначает константу, подобные изощрения не нужны.
Например:
Код:

{cm:LaunchProgram,Inno Setup}
Пример выдает "Launch Inno Setup", если выбран английский язык.


{reg:HKxx\SubkeyName,ValueName|DefaultValue}
Возвращает значение реестра.
  • HKxx - определяет корневой ключ. Для справки обратитесь к секции [Registry]
  • SubkeyName - имя раздела
  • ValueName - имя параметра. Пустой параметр = "По умолчанию".
  • DefaultValue - значение, возвращаемое, если параметр не существует или не строкового типа (REG_SZ или REG_EXPAND_SZ)
  • Для вставки запятой, "|", или "}" запишите нужный символ в виде"%-код символа.". Например, запятая - это "%2c", вертикальная черта - "%7c", "}" - "%7d". "%" = "%25".
  • SubkeyName, ValueName, и DefaultValue могут содержать константы. Обратите внимание, что описанным выше способом закрывающая фигурная скобка задается только в случае, когда она используется сама по себе. Если же она обозначает константу, подобные изощрения не нужны.
Например:
Код:

{reg:HKLM\Software\My Program,Path|{pf}\My Program}


{param:ParamName|DefaultValue}
Возвращает параметры командной строки.
  • ParamName - имя параметра
  • DefaultValue - значение, возвращаемое, если запрашиваемое значение не существует или не может быть определено.
  • Для вставки запятой, "|", или "}" запишите нужный символ в виде"%-код символа.". Например, запятая - это "%2c", вертикальная черта - "%7c", "}" - "%7d". "%" = "%25".
  • ParamName и могут содержать константы. Обратите внимание, что описанным выше способом закрывающая фигурная скобка задается только в случае, когда она используется сама по себе. Если же она обозначает константу, подобные изощрения не нужны.
Например:
Код:

{param:Path|{pf}\My Program}
Возвращает c:\My Program, если в командной строке введен /Path="c:\My Program".



{srcexe}
Полный путь инсталлятора, например "C:\SETUP.EXE".


{uninstallexe}
Полный путь деинсталлятора, например "C:\Program Files\My Program\unins000.exe". Эта константа чаще всего используется в секции [Icons] для задания иконки деинсталлятора. Действует только если директиве Uninstallable секции [Setup] присвоено значение yes (по умолчанию).


{sysuserinfoname}
{sysuserinfoorg}

Имя и организация, соответственно, к которым зарегистрирован Windows. Эта информация берется из реестра.


{userinfoname}
{userinfoorg}
{userinfoserial}

Имя, организация и серийный номер, которые пользователь указал на странице Информация о пользователе (эту страницу можно активировать директивой UserInfoPage). Обычно эти константы используются в секциях [INI] и [Registry], чтобы сохранить их значения для дальнейшего использования.


{username}
Имя пользователя, запустившего инсталлятор или деинсталлятор (результат функции GetUserName).


{log}
Имя файла системного журнала, или пустая строка, если журналирование не включено.

boss911 21-01-2018 16:22 2792875

Nordek, спасибо, но русифицированный ISetup.chm имеется, только заглядываю я туда по случаю, как раз такой случай был несколькими часами тому назад.

ENERGES 22-01-2018 15:02 2793065

подскажите пожалуйста как прописать 4 exe файла в скрипте
вот скрип с файлами http://rgho.st/8TsjZx2Y6

ZVSRus 22-01-2018 18:35 2793109

web_form

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: "MyProg-1.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "MyProg-2.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "MyProg-3.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "MyProg-4.exe"; DestDir: "{app}"; Flags: ignoreversion

ENERGES 22-01-2018 18:54 2793113

ZVSRus, выдает ошибку https://s8.hostingkartinok.com/uploa...81328d7ca2.png
я прописал и так не получилось
//===== [Game exe 1] =====\\:
#define LinkName "Начать сетевую игру Call of Duty"
#define ExeName "CoDMP.exe"
#define ExeIco "CoDMP.exe"
////===== [Game exe 2] =====\\:
#define LinkName2 "Начать одиночную игру Call of Duty"
#define ExeName2 "codsp.exe"
////===== [Game exe 3] =====\\:
#define LinkName2 "Call of Duty - United Offensive Сетевая игра"
#define ExeName2 "CoDUOMP.exe"
////===== [Game exe 4] =====\\:
#define LinkName2 "Call of Duty - United Offensive Одиночная игра"
#define ExeName2 "CoDUOSP.exe"

Iska 22-01-2018 18:59 2793115

web_form, написано, что исходный файл не найден по указанному пути.

ENERGES 22-01-2018 19:02 2793117

Iska, но я указал правильно путь к файлу

ZVSRus 22-01-2018 19:04 2793118

web_form
Проверь правильность пути, на вашем скрине и на примере что выше файлы должны лежать рядом со скриптом, если файлы лежат где то в папке, пропиши путь.

Nordek 22-01-2018 19:05 2793119

Цитата:

Цитата web_form

Говорит о том, что, файл CoDMP.exe не существует - Проверьте правильность расположения файла или корректность указанного пути в скрипте.
Также убедитетесь, что: У вас CoDMP.exe а не СoDMP.exe.

ENERGES 22-01-2018 19:06 2793120

ZVSRus, как это сделать?

ZVSRus 22-01-2018 19:10 2793124

web_form
Где у вас лежит CoDMP.exe (в папке или ещё в подпапке)

ENERGES 22-01-2018 19:12 2793125

ZVSRus, может через TeamViewer поможете ,я вам личику пароль и логин скинул ,дело на 5 минут
https://s8.hostingkartinok.com/uploa...6dae035165.png

Nordek 22-01-2018 19:20 2793128

Цитата:

Цитата web_form
https://s8.hostingkartinok.com/uploads/images/2018/01/39bf4585745faf5ac2b8ca6dae035165.png »

Для наглядности:

Код:

Source: "CoDMP.exe"; DestDir: "{app}"; Flags: ignoreversion
Код:

Source: "New Folder\CoDMP.exe"; DestDir: "{app}"; Flags: ignoreversion

ZVSRus 22-01-2018 19:20 2793129

web_form
Зайдите в папку где лежат у вас файлы для установки, далее скопируйте адрес из адрессной строки и покажи.

Например так:

D:\!!!_РАЗДАЧА-3_!!!\YTD Video Downloader PRO 5.9.2 RePack (& Portable) by ZVSRus

В этой папке у меня лежат 4 файла.

ENERGES 22-01-2018 19:25 2793130

ZVSRus, может через TeamViewer поможете я так нечего не понимаю так быстрее будет и по понятнее
430 691 576
518btj

ZVSRus 22-01-2018 19:28 2793132

web_form
То что вы показываете, я в этом круглый 0

PS: Что вы хотите сделать игру или программу?

ENERGES 22-01-2018 19:32 2793133

ZVSRus, игру
там нечего сложного видёте мой ID и пароль и подключаетесь мой компьютер у вас рабочем столе открывается мой рабочи стол там как бы вы управляете моим компоп

Iska 22-01-2018 19:46 2793138

web_form, что непонятного-то? Файла по указанному пути нет. Коллега Nordek по Вашему скриншоту показал, где он на самом деле есть:
Цитата:

Цитата Nordek
Код:

Source: "New Folder\CoDMP.exe"; DestDir: "{app}"; Flags: ignoreversion
»


ENERGES 22-01-2018 19:50 2793140

Iska, пробовал и так выдает ту же ошибку

ZVSRus 22-01-2018 19:58 2793141

web_form
Не рановато браться за такой скрипт, если вы не знаете где у вас лежат файлы, здесь экстрасенсов нет.

Nordek 22-01-2018 20:02 2793142

Цитата:

Цитата web_form
поможете я так нечего не понимаю так быстрее будет и по понятнее »

Напирмер у вас скрипт Main.iss расположен рядом с каталогом MyGame, а в каталоге MyGame содержатся файлы вида FileX.exe, т.е:
Main.iss
MyGame\File1.exe
MyGame\File2.exe
MyGame\File3.exe
MyGame\File4.exe
MyGame\File5.exe

В этом случае, в секции [Files] будет выглядеть так:
Код:

[Files]
Source: MyGame\File1.exe; DestDir: {app}; Flags: ignoreversion
Source: MyGame\File2.exe; DestDir: {app}; Flags: ignoreversion
Source: MyGame\File3.exe; DestDir: {app}; Flags: ignoreversion
Source: MyGame\File4.exe; DestDir: {app}; Flags: ignoreversion
Source: MyGame\File5.exe; DestDir: {app}; Flags: ignoreversion



Если у вас файлы расположены рядом со скриптом Main.iss:
Main.iss
File1.exe
File2.exe
File3.exe
File4.exe
File5.exe

то в секции [Files] будет выглядеть так:
Код:

[Files]
Source: File1.exe; DestDir: {app}; Flags: ignoreversion
Source: File2.exe; DestDir: {app}; Flags: ignoreversion
Source: File3.exe; DestDir: {app}; Flags: ignoreversion
Source: File4.exe; DestDir: {app}; Flags: ignoreversion
Source: File5.exe; DestDir: {app}; Flags: ignoreversion


ENERGES 22-01-2018 20:12 2793146

на рабочем столе не отображается 4 ярлыка толька один

ZVSRus 22-01-2018 20:18 2793147

web_form

[Icons]
Name: "{commondesktop}\MyProg-1"; Filename: "{app}\MyProg-1.exe";
Name: "{commondesktop}\MyProg-2"; Filename: "{app}\MyProg-2.exe";
Name: "{commondesktop}\MyProg-3"; Filename: "{app}\MyProg-3.exe";
Name: "{commondesktop}\MyProg-4"; Filename: "{app}\MyProg-4.exe";



ENERGES 22-01-2018 20:34 2793149

Nordek, ZVSRus, спасибо вам получилось

pollipen 22-01-2018 20:55 2793153

ребята как убрать

Nordek 22-01-2018 21:09 2793156

Цитата:

Цитата pollipen
ребята как убрать »

Код:

[Messages]
SetupWindowTitle=%1


pollipen 23-01-2018 18:29 2793333

спасибо

pollipen 08-02-2018 13:23 2796707

парни как сделать если программа устанавливается скрытно,
что бы на это время вышла рамка (идёт установка) и после установки рамка исчезла.

boss911 08-02-2018 14:59 2796740

Цитата:

Цитата pollipen
что бы на это время вышла рамка (идёт установка) »

Лучше используйте параметр StatusMsg.
Код:

[Run]
Filename: {tmp}\vc_redist.exe; Parameters: /quiet; StatusMsg: Устанавливается Microsoft Visual C++ 2017...


pollipen 09-02-2018 08:19 2796904

да как вариант пойдёт , но у меня немного другое
скрипт

[Setup]
DisableWelcomePage=True
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True
AppName=Patcher
AppVersion=1
AppCopyright=Dilan
RestartIfNeededByRun=False
CreateAppDir=False
UsePreviousGroup=False
DisableProgramGroupPage=yes
Uninstallable=no
VersionInfoVersion=1
VersionInfoTextVersion=1
VersionInfoProductVersion=1
OutputBaseFilename=Patcher
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
CompressionThreads=2
AllowCancelDuringInstall=False
TimeStampsInUTC=True

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Dll Pack\ISSkin.dll"; DestDir: "{app}"; Flags: ignoreversion dontcopy
Source: "C:\Program Files (x86)\Inno Setup 5\IS_Skin\Styles\Chromium.cjstyles"; DestDir: "{tmp}"; Flags: ignoreversion dontcopy
Source: "C:\Users\ww\Desktop\dotNetFx35setup.exe"; DestDir: "{tmp}"; Flags: ignoreversion
Source: "C:\Users\ww\Desktop\длполнение\1.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\Mo.exe"; DestDir: "{tmp}"; Flags: ignoreversion

[Messages]
SetupWindowTitle=%1

[Run]
Filename: "{app}\1.exe"

Код:

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
begin
  if not FileExists(ExpandConstant('{tmp}\dotNetFx35setup.exe')) then ExtractTemporaryFile('dotNetFx35setup.exe');
  Exec(ExpandConstant('{tmp}\dotNetFx35setup.exe'), '', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);
  if not FileExists(ExpandConstant('{tmp}\Mo.exe')) then ExtractTemporaryFile('Mo.exe');
  Exec(ExpandConstant('{tmp}\Mo.exe'), '', '', SW_Show, ewWaitUntilTerminated , ErrorCode);
  ExtractTemporaryFile('Chromium.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Chromium.cjstyles'), '');
  result:=True;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result:=true;
end;

procedure WizardFormShow(Sender: TObject);
begin
  WizardForm.NextButton.OnClick(nil);
end;

procedure InitializeWizard();
begin
  WizardForm.ClientWidth:=ScaleX(500);
  WizardForm.ClientHeight:=ScaleY(60);
  WizardForm.Center;
  WizardForm.OuterNotebook.Hide;
  WizardForm.InnerNotebook.Hide;
  WizardForm.Bevel.Hide;

  with WizardForm.ProgressGauge do
  begin
    Top := ScaleY(20);
    Left := ScaleX(5);
    Height := ScaleY(20);
    Width := ScaleX(490);
    Parent := WizardForm;
  end;
  with WizardForm do
  begin
  Show;
    OnShow := @WizardFormShow;
  end;
end;

procedure DeinitializeSetup();
begin
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  Sleep(110);
  UnloadSkin();
end;


boss911 09-02-2018 17:34 2797016

Цитата:

Цитата pollipen
но у меня немного другое »

А что мешает запускать/устанавливать через секцию Run? Или зачем через секцию Code это делать?

pollipen 09-02-2018 21:02 2797056

А что мешает запускать/устанавливать через секцию Run? Или зачем через секцию Code это делать?

вносятся изменения в программу так как скрытый инстал оригинальный

boss911 10-02-2018 14:39 2797138

Цитата:

Цитата pollipen
вносятся изменения в программу так как скрытый инстал оригинальный »

Не понял, по подробнее и зачем. Все что я вижу, это первый запуск "dotNetFx35setup.exe" без ключей, но со скрытым окном, второй запуск "Mo.exe" (что это?), а вот что такое LoadSkin('Chromium.cjstyles') и для оно надо, мне совсем не ясно. Вам вот это все в секции Code нужно лишь для того, чтобы тихо установить .NET3.5?

pollipen 12-02-2018 19:16 2797580


Всё до пилил (Если долго мучиться, что ни-будь получиться) Золотые слова.

pollipen 19-02-2018 22:37 2799025


sergey3695 20-02-2018 11:39 2799095

pollipen,
Код:

WizardForm.DirBrowseButton.SetBounds(тра ла ла);
 WizardForm.DirBrowseButton.Parent:= куда;


чокнутыйрепакер 23-02-2018 10:56 2799755

подскажите вот такой случай :

где и что прописать на СКРЫТУЮ установку софта ( например PhysX ) после установки самого репака ?

Nordek 23-02-2018 14:22 2799795

Цитата:

Цитата чокнутыйрепакер
например PhysX »

Например:
Код:

[Tasks]
Name: nv_physx; Description: PhysX; GroupDescription: Требуемые компонетнты

[Files]
Source: PhysX.exe; DestDir: {tmp}; Flags: ignoreversion; Tasks: nv_physx

[Run]
Filename: {tmp}\PhysX.exe; Parameters: /quiet; StatusMsg: Установка PhysX


Oklen 05-03-2018 18:06 2801790

Здравствуйте. Возможно задам глупый вопрос, но может ли inno перезаписать фалы в архиве (архив формата .pack)?

boss911 05-03-2018 21:00 2801819

Цитата:

Цитата Oklen
может ли inno перезаписать фалы в архиве (архив формата .pack)? »

Не может. Только методом переупаковки с помощью запуска специальной утилиты с параметрами командной строки.

postal1703 10-03-2018 13:12 2802541

в процессе сборки установщика вылезает ошибка с надписью "Ошибка компилятора""Не удается найти указанный файл" и ссылается на проблемный файл, в названии которого присутствуют чешские или венгерские
буквы. подскажите как решить эту проблему, терпения не хватит переименовывать тысячу файлов)

pakuwacenu 10-03-2018 18:07 2802589

Как изменить текст на MessageBox на при нажатии кнопки "Cancel" ?

habib2302 10-03-2018 19:14 2802601

pakuwacenu,
Код:

[Messages]
ExitSetupMessage=Установка не завершена. Если вы выйдете, программа не будет установлена.%n%nВы сможете завершить установку, запустив программу установки позже.%n%nВыйти из программы установки?


pakuwacenu 10-03-2018 19:36 2802608

Цитата:

Цитата habib2302
[Messages]
ExitSetupMessage=Установка не завершена. Если вы выйдете, программа не будет установлена.%n%nВы сможете завершить установку, запустив программу установки позже.%n%nВыйти из программы установки? »

А через секцию [code] как сделать ?

habib2302 10-03-2018 21:36 2802651

pakuwacenu,
Код:

[CustomMessages]
ExitSetupMessage=Завершить установку?

[Code]

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:=false; Cancel:=false;
  WizardForm.ProgressGauge.State:=npbsPaused;
  case MsgBoxEx(WizardForm.Handle, CustomMessage('ExitSetupMessage'),
      SetupMessage(msgExitSetupTitle), MB_YESNO or MB_DEFBUTTON2 or MB_ICONINFORMATION, 0, 0) of
    IDYES: Cancel:=true;
    IDNO: begin WizardForm.BringToFront; WizardForm.ProgressGauge.State:=npbsNormal; end;
  end;
end;

И не забывайте про это http://forum.oszone.net/faq.php?faq=...age#faq_thanks

pakuwacenu 10-03-2018 23:35 2802677

Цитата:

Цитата habib2302
[CustomMessages]
ExitSetupMessage=Завершить установку?
[code]
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=false; Cancel:=false;
WizardForm.ProgressGauge.State:=npbsPaused;
case MsgBoxEx(WizardForm.Handle, CustomMessage('ExitSetupMessage'),
SetupMessage(msgExitSetupTitle), MB_YESNO or MB_DEFBUTTON2 or MB_ICONINFORMATION, 0, 0) of
IDYES: Cancel:=true;
IDNO: begin WizardForm.BringToFront; WizardForm.ProgressGauge.State:=npbsNormal; end;
end;
end; »


Line 51: Column 8: Unknown identifier 'MsgBoxEx'
Не использую Inno Setup Ultra

Немного не так, нужно чтобы не было секции [CustomMessages], весь текст сообщения должен быть полностью в коде (секция [code])

habib2302 11-03-2018 11:05 2802718

Цитата:

Цитата pakuwacenu
Немного не так, нужно чтобы не было секции [CustomMessages], весь текст сообщения должен быть полностью в коде (секция [code]) »

а какая вам разница. если пытайтесь зашифровать скрипт на дефолтной версии inno setup, то я смысла не вижу, а лучше взять и перейти на inno setup ultra т.к. она шифрует скрипт, не дает возможности распаковать инсталл. в принципе это вам решать

doctor_allcome 12-03-2018 17:11 2802909

Добрый день!
Подскажите пожалуйста - как в окне выбора папки добавить чекбокс с возможность выбора установки (Steam, No Steam) со сменой пути, при смене пункта в чекбокс?
Пример как это сделать в отдельном окне видел, но как в окне выбора папки это реализовать самостоятельно разобраться не могу.

ZVSRus 13-03-2018 14:49 2803063

Цитата:

Цитата doctor_allcome
Подскажите пожалуйста - как в окне выбора папки добавить чекбокс с возможность выбора установки (Steam, No Steam)

Случаем не оно

doctor_allcome 14-03-2018 16:43 2803313

Цитата:

Цитата ZVSRus
Случаем не оно »

О, как раз ОНО! Спасибо.

doctor_allcome 16-03-2018 11:43 2803717

Добрый день!
Подскажите еще пожалуйста - возможно ли сделать проверку MD5 группы файлов не используя ResTools?

pollipen 18-03-2018 09:48 2804033

парни всем доброго дня!!!!
подскажите как мне мне поставить анимацию как на картинке
Скрытый текст

ZVSRus 18-03-2018 14:31 2804058

Цитата:

Цитата pollipen
как мне поставить анимацию как на картинке

Так это же слайд шоу, пример есть в справке (» Inno Setup Faq. Слайд-шоу в окне инсталляции)

pakuwacenu 20-03-2018 14:52 2804429

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False; Cancel:=False;
MsgBox('Are you sure you want to cancel {#AppName} installation?', mbInformation, MB_YESNO);
end;

Как сделать кнопки рабочими ?

nik1967 20-03-2018 20:48 2804517

Цитата:

Цитата pakuwacenu
Как сделать кнопки рабочими ? »

Удалить процедуру procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);

Darthame 26-03-2018 00:03 2805467

Здравствуйте, при создании инсталлятора я столкнулся с проблемой. Мне нужно сделать несколько кастомных страниц с выбором компонентов, а также с превью и описанием компонентов, желательно через botva2. Кто-нибудь знает, как это можно реализовать?

12gauge 31-03-2018 08:04 2806357

Inno Setup Scripting 5.1 от Kindly
https://yadi.sk/d/zLRic4yZ3TvyHM
MD5: 8864d4574596690b9d9f282e2d4d6a64
3 МБ

TheLeon 01-04-2018 18:17 2806522

Вложений: 2
Здравствуйте, уважаемые пользователи форума Oszone.net. Нужна ваша помощь!

1.Можно ли убрать значок папки с текстом и переместить на это место текст с полем, которые расположены ниже (см.скрин.1);
2.Можно ли установить изображение, не важно в каком формате(см.скрин.1);
3.Можно ли поставить текст, допустим: разработано кем-то и т.д.(см.скрин.1);

4.Почему-то не указывается выбор установки: полная, кастомная и т.д., наверно я опять накосячил где-то(см.скрин.2);
5.Как сделать, чтобы при наведении на компонент отображалось изображение, именно в моём коде.(см.скрин.2)
--
Заранее спасибо вам огромное! Если найду ответы на свои вопросы, то сразу буду зачёркивать пункты.

Cекции Types and Components
Код:

[Types]
Name: default; Description: Полная установка(SimpleRadar);
Name: srl; Description: Полная установка(SimpleRadar Lite);
Name: fr; Description: Полная установка(Froosh);
Name: lsc; Description: Полная установка(LoneySilverCity);

[Components]
Name: SR; Description: {code:CompHelper|От Simple Radar}; Types: default; Flags: exclusive;
Name: SR\MAP1; Description: {code:CompHelper|Cobblestone|sr1.bmp};
Name: SR\MAP2; Description: {code:CompHelper|Dust II|sr2.bmp};
Name: SR\MAP3; Description: {code:CompHelper|Inferno|sr3.bmp};
Name: SR\MAP4; Description: {code:CompHelper|Mirage|sr4.bmp};
Name: SR\MAP5; Description: {code:CompHelper|Nuke|sr5.bmp};
Name: SR\MAP6; Description: {code:CompHelper|Overpass|sr6.bmp};
Name: SR\MAP7; Description: {code:CompHelper|Train|sr7.bmp};

;Name: SRL; Description: {code:CompHelper|От Simple Radar Lite}; Types: srl; Flags: exclusive;
;Name: SRL\MAP1; Description: {code:CompHelper|Cobblestone|srl1.bmp};
;Name: SRL\MAP2; Description: {code:CompHelper|Dust II|srl2.bmp};
;Name: SRL\MAP3; Description: {code:CompHelper|Inferno|srl3.bmp};
;Name: SRL\MAP4; Description: {code:CompHelper|Mirage|srl4.bmp};
;Name: SRL\MAP5; Description: {code:CompHelper|Nuke|srl5.bmp};
;Name: SRL\MAP6; Description: {code:CompHelper|Overpass|srl6.bmp};
;Name: SRL\MAP7; Description: {code:CompHelper|Train|srl7.bmp};

Name: FR; Description: {code:CompHelper|От Froosh}; Types: fr; Flags: exclusive;
Name: FR\MAP1; Description: {code:CompHelper|Cobblestone|froosh1.bmp};
Name: FR\MAP2; Description: {code:CompHelper|Dust II|froosh2.bmp};
Name: FR\MAP3; Description: {code:CompHelper|Inferno|froosh3.bmp};
Name: FR\MAP4; Description: {code:CompHelper|Mirage|froosh4.bmp};
Name: FR\MAP5; Description: {code:CompHelper|Overpass|froosh5.bmp};

Name: LSC; Description: {code:CompHelper|От LoneySilverCity}; Types: lsc; Flags: exclusive;
Name: LSC\MAP1; Description: {code:CompHelper|Aztec|lsc1.bmp};
Name: LSC\MAP2; Description: {code:CompHelper|Cobblestone|lsc2.bmp};
Name: LSC\MAP3; Description: {code:CompHelper|Dust II|lsc3.bmp};
Name: LSC\MAP4; Description: {code:CompHelper|Inferno|lsc4.bmp};
Name: LSC\MAP5; Description: {code:CompHelper|Nuke|lsc5.bmp};
Name: LSC\MAP6; Description: {code:CompHelper|Overpass|lsc6.bmp};
Name: LSC\MAP7; Description: {code:CompHelper|Train|lsc7.bmp};


Секция CODE
Код:

var
  ImagePanel: TPanel;
  ComponentsInfoImage: TBitmapImage;
  ComponentHelper: TStringList;

function CompHelper(Param: string): string;
var
  Image: TBitmap;
  Index: Integer;
begin
  Result := '';
  with TStringList.Create do
  try
    StringChangeEx(Param, '|', #13#10, True);
    Text := Param;
    if Count = 0 then Exit;
    if Count > 0 then
      Index := ComponentHelper.Add(Strings[0]);
    if Count > 1 then
    begin
      if not FileExists(ExpandConstant('{tmp}\') + Strings[1]) then
        ExtractTemporaryFile(Strings[1]);
      Image := TBitmap.Create;
      Image.LoadFromFile(ExpandConstant('{tmp}\') + Strings[1]);
      ComponentHelper.Objects[Index] := Image;
    end;
    Result := ComponentHelper[Index];
  finally
    Free;
  end;
end;

procedure ComponentsListClickCheck(Sender: TObject);
begin
  if not Assigned(Sender) or (TNewCheckListBox(Sender).ItemIndex = -1) then Exit;
  ComponentsInfoImage.Bitmap.Assign(TBitmap(ComponentHelper.Objects[TNewCheckListBox(Sender).ItemIndex]));
end;

function InitializeSetup(): Boolean;
begin
  Result := True;
  ComponentHelper := TStringList.Create;
  ComponentHelper.Duplicates := dupIgnore;
end;

var
  CheckLicense: TCheckBox;

procedure LicenseOnClick(Sender: TObject);
begin
  if (CheckLicense.Checked) = True then
  begin
    WizardForm.LicenseAcceptedRadio.Checked := True;
  end else
  begin
    WizardForm.LicenseNotAcceptedRadio.Checked := True;
  end;
end;

procedure InitializeWizard();
var
  i: Integer;
begin
  WizardForm.TypesCombo.Visible := False;
  WizardForm.ComponentsList.Visible := True;
  WizardForm.ComponentsList.Height := ScaleX(209);
  WizardForm.ComponentsList.Top := ScaleX(15);
  WizardForm.ComponentsList.Width := ScaleX(175);
  for i := 0 to WizardForm.ComponentsList.Items.Count - 1 do
    if not WizardForm.ComponentsList.ItemEnabled[i] then
      WizardForm.ComponentsList.ItemSubItem[i] := '';
  WizardForm.ComponentsDiskSpaceLabel.Visible := True;
  WizardForm.LicenseNotAcceptedRadio.Hide;
  WizardForm.LicenseAcceptedRadio.Hide;
  WizardForm.LicenseMemo.Height := ScaleY(175);

  CheckLicense:= TCheckBox.Create(WizardForm);
  CheckLicense.Left:= ScaleX(0);
  CheckLicense.Top:= ScaleY(216);
  CheckLicense.Caption:= WizardForm.LicenseAcceptedRadio.Caption;
  CheckLicense.Width:= ScaleX(417);
  CheckLicense.OnClick:= @LicenseOnClick;
  CheckLicense.Parent:= WizardForm.LicensePage;

  ImagePanel := TPanel.Create(WizardForm);
  ImagePanel.Parent := WizardForm.SelectComponentsPage;
  ImagePanel.Caption := '';
  ImagePanel.Top := ScaleX(15);
  ImagePanel.Left := ScaleX(180);
  ImagePanel.Width := ScaleX(210);
  ImagePanel.Height := ScaleX(210);
  ImagePanel.BevelInner := bvRaised;
  ImagePanel.BevelOuter := bvLowered;

  WizardForm.ComponentsList.OnClickCheck:= @ComponentsListClickCheck;
  ComponentsInfoImage:= TBitmapImage.Create(WizardForm);
  ComponentsInfoImage.Parent:= ImagePanel;
  ComponentsInfoImage.Top:= ScaleY(2);
  ComponentsInfoImage.Left:= ScaleX(2);
  ComponentsInfoImage.Width:= ScaleX(205);
  ComponentsInfoImage.Height:= ScaleY(205);
  ComponentsInfoImage.Stretch:= True;
  ComponentsInfoImage.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectComponents: ComponentsListClickCheck(nil);
  end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  case CurPageID of
    wpSelectDir:
      if not FileExists(ExpandConstant('{app}\steam.exe')) then begin
        MsgBox('Ошибка! Вы должны указать путь до папки Steam.', mbError, MB_OK);
        Result := False;
      end;
  end;
end;


ZVSRus 02-04-2018 17:26 2806654

Цитата:

Цитата TheLeon
1.Можно ли убрать значок папки с текстом и переместить на это место текст с полем, которые расположены ниже (см.скрин.1);
2.Можно ли установить изображение, не важно в каком формате(см.скрин.1);
3.Можно ли поставить текст, допустим: разработано кем-то и т.д.(см.скрин.1);

https://www.upload.ee/files/8281204/BMP.rar.html

habib2302 02-04-2018 20:25 2806680

Цитата:

Цитата TheLeon
4.Почему-то не указывается выбор установки: полная, кастомная и т.д., наверно я опять накосячил где-то(см.скрин.2); »

Из кода удалите строку WizardForm.TypesCombo.Visible := False;. В строке WizardForm.ComponentsList.Top := ScaleX(15); замените на 26 и добавьте эту строку в InitializeWizard WizardForm.TypesCombo.Top := ScaleY(0);
Цитата:

Цитата TheLeon
5.Как сделать, чтобы при наведении на компонент отображалось изображение, именно в моём коде.(см.скрин.2) »

http://forum.oszone.net/post-2169372-662.html

El Sanchez 04-04-2018 16:12 2807010

Тема будет закрыта и переведена в архивное состояние.
Продолжаем тут: Скрипты Inno Setup. Помощь и советы [часть 9]


Время: 05:45.

Время: 05:45.
© OSzone.net 2001-