Чем открыть inno setup

Обновлено: 05.07.2024

Введение

Загрузка компонентов

Для начала нам потребуется утилита Inno Setup Unpacker версии 0.40 (поддерживает все версии InnoSetup до 5.5.4 включительно). Загрузить её можно здесь. Распакуйте архив в любой каталог, например, C:\iunp\.

Также для разбора секции code, которая компилируется в бинарный файл, нам потребуется дизассемблер ROPS, который можно взять здесь. Распаковать его следует в тот же каталог.

Теперь скачаем SRC Repair последней версии по прямой ссылке.

Краткая справка по декомпилятору

В квадратных скобках указываются необязательные параметры. Единственным обязательным является имя файла инсталлятора, который мы будем декомпилировать.

Список допустимых команд утилиты innounp:

Список допустимых параметров утилиты innounp:

Декомпиляция примера

Дизассемблирование файла CompiledCode.bin

  1. Снова откроем командную строку Windows.
  2. Перейдём в каталог, в который распаковали ROPS (C:\iunp\):
  3. Выполним в консоли команду:
  4. В файле C:\iunp\out.asm мы найдём дизассемблированный код.

Заключение

Таким образом, мы получили полное содержимое программы установки, собранной при помощи InnoSetup, включая её полные исходные коды.

28 комментариев к записи

Хорошая статья. Без лишних слов. Прочитал, понял и в течении двух минут закрепил на практике. Благодарю. (Хотя, кажется мне я поздновато её прочёл.)

Скрипты не распаковывает. Они все пустые.

К сожалению, проект уже не развивается и не может распаковывать установочные пакеты, созданные новейшей версией InnoSetup.

Распаковывает, только может с кодировкой начудить. Часть строк в UTF-8, часть в win-1251, так что после распаковки и доработки напильником действительно открывается корректно в InnoSetup GUI.

Зависит от того, в какой версии InnoSetup был собран оригинальный установщик: ANSI или Unicode.

Самая актуальная версия InnoSetup 6 поддерживает только юникод.

Проканает только на старых версиях инно.
На 5.0+ стандартный криптор и почти все используют сторонние dll по дефолту.

Хоть и статья 2014 но у меня вопрос как это дело после разбора собрать? У меня после дизассемблирования файла CompiledCode.bin инно не хочет принимать код выкидывает ошибку хоть я не очень понимаю куда его вставлять (вставлял туда и где весь другой код) но установщик был собран на старой версии 4.2.6 а на ней я вообще не понимаю как это дело все собрать так что пытался на 5.5.9. Просто хотел разобрать/собрать но не получилось 🙁

@Александр
CompiledCode.bin разбирается в псевдокод, его нельзя скомпилировать заново.

То есть для обычного пользователя это не реально? 🙁 А что нужно сделать с ним что бы скомпилировать заново? Или это делается так что бы посмотреть что и как?

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

Dmitry :

А не проще открыть инсталятор через 7-Zip?

Далеко не все форматы установочных пакетов InnoSetup можно открыть в 7-Zip. Можете попробовать например описанный в статье пример с SRC Repair. Открыть его в 7-Zip даже последней версии невозможно.

Dmitry :

т.е. для вас сообщаю что некоторые exe файлы можно открывать через zip архиваторы. (Насчет рара не знаю не пробовал)

Разумеется если это по сути SFX-архивы.

Dmitry :

А так же можно изменять инфу о приложении по скольку это все хранится (по крайней мере у меня) в отдельных файликах.

Это хранится в ресурсе. Конечно же можно изменять при помощи редактора ресурсов.

Dmitry :

И предупреждение. Некоторые разработчики знают о такой функции архиваторов и потому как они на exe файл как на архив ставят пароль. Просто так предупредил об этом.

Если на сам контейнер установлен пароль, то InnoSetup будет запрашивать его перед установкой, т.к. содержимое внутри зашифровано стойким алгоритмом AES-128. Описанная в статье утилита декомпилятор отлично умеет распаковывать и зашифрованные установочные пакеты если передать ей пароль в качестве параметра.

InnoExtractor скриншот № 1

InnoExtractor - это мощное приложение, которое помогает распаковывать инсталяторы Inno Setup, использующие технологию InnoUnp.
С помощью программы можно исследовать внутреннюю структуру и содержание программы установки. Также есть возможность извлекать файлы и данные в локальную папку или на портативные устройства без запуска программы установки.

Основные возможности и особенности программы:

  • Простой и удобный графический интерфейс.
  • Открытые инсталяторов в приложении только путем перетаскивания исполняемых файлов из Windows Explorer.
  • Возможность ознакомления с внутренним содержанием из программы установки.
  • Извлечение файлов и встроенных сценариев в локальную папку, ZIP-пакет или самораспаковывающиеся модули.
  • Декомпиляция файла "CompiledCode.bin" установщика для получения кода сборки, соответствующего разделу "Code" сценария.
  • Открытие внутренних файлов установщика в одном приложении.
  • Выполнение поиска файлов по ключевому слову.
  • Панель ввода, которая позволяет ввести правильный пароль для извлечения зашифрованных инсталяторов.
  • История недавно открытых установщиков.
  • Поддержка всех версий Inno Setup и InnoUnp.
  • Полная поддержка Unicode.
  • Улучшения в работе программы
  • Исправлены ошибки

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

7-Zip - абсолютно бесплатный функциональный архиватор с высокой степенью сжатия и.

WinZip - мощная программа для работы как с Zip-файлами, так и с архивами других форматов.

HaoZip - бесплатный архиватор, способный заменить привычный WinRAR. Позволяет легко сжимать.

Universal Extractor - простая программа для извлечения данных из инсталляторов приложений.

PeaZip - бесплатный архиватор поддерживающий самые распространенные форматы архивов: 7Z, ACE.

Отзывы о программе InnoExtractor

Рома про InnoExtractor 5.3.0.190 [02-03-2019]

Спасибо отличная программа
3 | 2 | Ответить

Иван про InnoExtractor 5.2.1.185 [14-02-2016]

Здорово ! наконец то есть чем открывать инсталяторы всякие ) смог достать песенку )
2 | 2 | Ответить

Anvide про InnoExtractor 5.1.3.169 [21-12-2014]

Ребята, спасибо за нужную программу. Сам как разработчик, уважаю людей, которые не жалеют сил и времени на разработку программ. Респект Вам, и всего наилучшего
3 | 3 | Ответить

Я не являюсь профессиональным программистом. В том смысле, что не зарабатываю денег этим ремеслом, а использую свои навыки в качестве инструмента для основной, научной, деятельности. Поэтому все мои «поделки» живут лишь отведенный им на решение конкретной задачи период и не выходят за пределы каталогов проекта. Кроме того, уже довольно давно я отошел от разработки под ОС Windows, ибо Linux для решения моих задач более удобен.

Однако ученым тоже хочется кушать, прилично одеваться и заправлять машину. Поэтому (правда довольно редко) возникает необходимость немного пофрилансить.

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

Созданием инсталляторов я не занимался никогда. Поэтому данный вопрос был основательно «загуглен», в числе прочего попалась и такая статья с Хабра. Выбор средств для подобной задачи довольно широк, и включает как проприетарные, так и открытые продукты. Вот список того, что я «пощупал»

    — классика жанра, достаточно солидный проприетарный продукт — проприетарный инструмент с широкими возможностями кастомизации через GUI. На сайте сказано, что если Вы блоггер и будете писать об этом продукте много хороших слов, то у Вас есть возможность получить Free License — открытый бесплатный продукт, основанный на XML-скриптах. Мощная, хорошо документированная штука. Разбираться с ним я пока не стал, ибо время дорого (да и к XML душа лежит не очень). Возможно когда нибудь я к нему вернусь. Да, к нему есть плагины для Visual Studio, что несомненный плюс. — опенсорсный проект, код которого доступен на гитхабе. В силу бесплатности и низкого порога вхождения мой выбор остановился именно на нем, как инструменте позволившем выполнить работу быстро и качественно.

Так что в статье мы будем рассматривать пример использования Inno Setup, для которого имеется полезный фронтэнд Inno Script Studio, позволяющий выполнять создание простых инсталляторов с помощью мастера и менять настройки через GUI. GUI понадобился мне для первого знакомства, с продуктом, но мы не будем уделять ему большого внимания — мой «линукс головного мозга» в последнее время всё больше и больше уводит меня от желания использовать разного рода «мастера» (это субъективно, прошу не пинать). Мы рассмотрим хардкорный способ написания скрипта с чистого листа.

Думаю, что скачать программу с официального сайта и установить её труда не составит. Запускаем Inno Setup Compiler и видим такое окно


Пугающе уныло встречает нас Inno Setup.

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

Прежде всего определим необходимые константы

Тело скрипта разделяется на секции, каждая из которых несет свое функциональное назначение. Обязательная секция [Setup] задает глобальные параметры работы инсталлятора и деинсталатора.

Пристальное внимание уделаем опции AddId — уникальный идентификатор приложения (GUID), используемый для регистрации приложения в реестре Windows. Его пишем не «от фонаря», а генерируем, открывая фигурную скобку, и выбрав в меню пункт Tools -> Generate GUID (или используя хот-кей Shift + Ctrl + G). Далее указываем имя приложения, под которым оно будет установлено в системе, его версию, данные фирмы разработчика, адреса сайтов разработчика, технической поддержки и обновления.

Путь, по умолчанию предлагаемый инсталлятором для установки определяем опцией DefaultDirName. При этом переменная — это путь в каталог Program Files соответствующей разрядности. Опция DefaultGroupName определяет имя группы программы в меню «Пуск». Обратите внимание на то, что для указания имени приложения мы используем данное нами выше макроопределение Name, обрамляя его фигурными скобками и решеткой.

Пара опций OutputDir и OutputBaseFileName задают каталог, куда будет записан скомпилированный «сетап» и его имя (без расширения). Кроме этого, указываем где взять иконку для test-setup.exe опцией SetupIconFile.

Последние опции в этой секции определяют алгоритм сжатия (LZMA) и указывают, что все файлы сжимаются одновременно, а не по отдельности (SolidCompression) что ускоряет процесс распаковки при большом количестве однотипных файлов.

В хорошем исталяторе должна быть поддержка нескольких языков. Включаем её в наш «сетап», используя опциональную секцию [Languages]. При отсутствии данной секции будет использоваться английский язык.

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

Параметр LicenseFile задает путь к файлу с текстом лицензии на соответствующем языке.

Обычно установщик предлагает нам, например, определится, хотим мы или не хотим создать ярлык на рабочем столе. Такие опции установки определяются необязательной секцией [Tasks]

Здесь Name задает имя операции — «desktopicom» — создание иконки на рабочем столе; Description — описание чекбокса с опцией, которое увидит пользователь. Конструкция



Теперь укажем, какие файлы надо включить в дистрибутив и где их надо поместить при установке. Для этого используется обязательная секция [Files]

  • Source — путь к файлу-источнику. У меня всё необходимое программе для работы лежит в каталоге Release проекта MS VS
  • DestDir — каталог установки, переменная содержит путь, выбранный пользователем в окне установщика
  • Flags — разнообразные флаги. В нашем примере для исполняемого файла: игнорирование версии программы при перезаписи исполняемого модуля, если он уже существует в системе (ignorevarsion); для остальных файлов и каталогов так же игнорируем версию, рекурсивно включаем все подкаталоги и файлы источника (recursesubdirs) и создаем подкаталоги, если их нет (createallsubdirs)

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

Тут я указываю, что для группы в меню «Пуск» и для рабочего стола иконку надо брать из исполняемого модуля. Естественно, что иконка должна быть в него «вкомпилена», иначе в требуемых местах мы увидим стандартный значок из коллекции винды.

Итак, всё вроде готово. Жмем Ctrl + F9 и пытаемся собрать инсталлятор. Если не допущены синтаксические ошибки, начнется процесс сборки


Inno Setup собирает инсталлятор

После успешной сборки инсталлятор можно запустить, нажав F9. Если Вы работаете под учеткой с ограниченными правами (а я работаю в винде именно так), то придется полезть в каталог с результатами компиляции, который мы указали в скрипте, и запустить инсталлятор с правами админа


Запуск инсталлятора под ограниченной учетной записью

В итоге мы увидим до боли знакомое каждому пользователю Windows окно выбора языка

приветствие мастера

лицензионное соглашение

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

Ну что сказать? Ура! Мы написали свой первый «сетап» и могли бы радоваться, но

  1. Определиться с тем, как будем получать дистрибутив фреймворка. Тут есть два варианта — поставлять его вместе с дистрибутивом программы или, при необходимости установки загрузить его онлайн на целевую машину. Мы остановимся на варианте включения фреймворка в дистрибутив. Сам фреймфорк, скажем версии 4.0, можно взять бесплатно у Майкрософта
  2. Детектировать наличие/отсутствие данного фреймфорка в целевой системе. Для этого потребуется написать логику, анализирующую состояние системного реестра.

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

хотя можно набить код и непосредственно в секции [Code]. Надо помнить, что внутри этой секции используется синтаксис Pascal, и комментарии предваряются последовательностью "//" вместо используемой в основной части скрипта точки с запятой.

Не смотря на обилие кода, логика его работы достаточно проста — в зависимости от значения параметра version с помощью функции RegQueryDWordValue(. ) читается значение соответствующего ключа реестра и сравнивается с требуемым значением (смотрим таблицу 1). Для версии 4.5 дополнительно передаем номер релиза в параметре release.

Для того, чтобы перед началом установки проверить наличие фреймворка и сообщить пользователю о предпринимаемых действиях используем Callback-функцию InitializeSetup()

Сам запуск инсталляции фрейворка можно выполнить после установки основной программы, поэтому включаем в скрипт секцию [Run], в которой указывается, что необходимо запускать по окончании установки

Обратите внимание на то, что мы сначала указываем имя секции [Run], чтобы закрыть секцию [Code], а затем пишем комментарий начинающийся с точки с запятой. Это необходимо из-за различия синтаксиса основного скрипта и секции [Code], в противном случае при компиляции мы получим синтаксическую ошибку.



Майкрософт просит нас принять лицензию.

Я не профессионал и во многих вещах могу ошибаться. Прошу отнестись к этому с пониманием. Статья писалась нубом для нубов, её основная цель — задать вектор поиска при решении задачи написания инсталлятора. За остальными вопросами можно обратится к документации, поставляемой вместе с Inno Setup.

Код данного примера доступен в моем репозитории на Github. «Кракозябры» в комментах вызваны несовпадением кирилических кодировок. Для себя всегда пишу английские комментарии, но для лучшего понимания кода допустил этот ляп. При скачивании в винде всё просматривается замечательно, так что прошу простить мне и эту несуразность.

В остальном, полагаю «хаутушка» вышла достойной и благодарю за уделенное мне внимание.

Я не являюсь профессиональным программистом. В том смысле, что не зарабатываю денег этим ремеслом, а использую свои навыки в качестве инструмента для основной, научной, деятельности. Поэтому все мои «поделки» живут лишь отведенный им на решение конкретной задачи период и не выходят за пределы каталогов проекта. Кроме того, уже довольно давно я отошел от разработки под ОС Windows, ибо Linux для решения моих задач более удобен.

Однако ученым тоже хочется кушать, прилично одеваться и заправлять машину. Поэтому (правда довольно редко) возникает необходимость немного пофрилансить.

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

Созданием инсталляторов я не занимался никогда. Поэтому данный вопрос был основательно «загуглен», в числе прочего попалась и такая статья с Хабра. Выбор средств для подобной задачи довольно широк, и включает как проприетарные, так и открытые продукты. Вот список того, что я «пощупал»

    — классика жанра, достаточно солидный проприетарный продукт — проприетарный инструмент с широкими возможностями кастомизации через GUI. На сайте сказано, что если Вы блоггер и будете писать об этом продукте много хороших слов, то у Вас есть возможность получить Free License — открытый бесплатный продукт, основанный на XML-скриптах. Мощная, хорошо документированная штука. Разбираться с ним я пока не стал, ибо время дорого (да и к XML душа лежит не очень). Возможно когда нибудь я к нему вернусь. Да, к нему есть плагины для Visual Studio, что несомненный плюс. — опенсорсный проект, код которого доступен на гитхабе. В силу бесплатности и низкого порога вхождения мой выбор остановился именно на нем, как инструменте позволившем выполнить работу быстро и качественно.

Так что в статье мы будем рассматривать пример использования Inno Setup, для которого имеется полезный фронтэнд Inno Script Studio, позволяющий выполнять создание простых инсталляторов с помощью мастера и менять настройки через GUI. GUI понадобился мне для первого знакомства, с продуктом, но мы не будем уделять ему большого внимания — мой «линукс головного мозга» в последнее время всё больше и больше уводит меня от желания использовать разного рода «мастера» (это субъективно, прошу не пинать). Мы рассмотрим хардкорный способ написания скрипта с чистого листа.

Думаю, что скачать программу с официального сайта и установить её труда не составит. Запускаем Inno Setup Compiler и видим такое окно


Пугающе уныло встречает нас Inno Setup.

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

Прежде всего определим необходимые константы

Тело скрипта разделяется на секции, каждая из которых несет свое функциональное назначение. Обязательная секция [Setup] задает глобальные параметры работы инсталлятора и деинсталатора.

Пристальное внимание уделаем опции AddId — уникальный идентификатор приложения (GUID), используемый для регистрации приложения в реестре Windows. Его пишем не «от фонаря», а генерируем, открывая фигурную скобку, и выбрав в меню пункт Tools -> Generate GUID (или используя хот-кей Shift + Ctrl + G). Далее указываем имя приложения, под которым оно будет установлено в системе, его версию, данные фирмы разработчика, адреса сайтов разработчика, технической поддержки и обновления.

Путь, по умолчанию предлагаемый инсталлятором для установки определяем опцией DefaultDirName. При этом переменная — это путь в каталог Program Files соответствующей разрядности. Опция DefaultGroupName определяет имя группы программы в меню «Пуск». Обратите внимание на то, что для указания имени приложения мы используем данное нами выше макроопределение Name, обрамляя его фигурными скобками и решеткой.

Пара опций OutputDir и OutputBaseFileName задают каталог, куда будет записан скомпилированный «сетап» и его имя (без расширения). Кроме этого, указываем где взять иконку для test-setup.exe опцией SetupIconFile.

Последние опции в этой секции определяют алгоритм сжатия (LZMA) и указывают, что все файлы сжимаются одновременно, а не по отдельности (SolidCompression) что ускоряет процесс распаковки при большом количестве однотипных файлов.

В хорошем исталяторе должна быть поддержка нескольких языков. Включаем её в наш «сетап», используя опциональную секцию [Languages]. При отсутствии данной секции будет использоваться английский язык.

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

Параметр LicenseFile задает путь к файлу с текстом лицензии на соответствующем языке.

Обычно установщик предлагает нам, например, определится, хотим мы или не хотим создать ярлык на рабочем столе. Такие опции установки определяются необязательной секцией [Tasks]

Здесь Name задает имя операции — «desktopicom» — создание иконки на рабочем столе; Description — описание чекбокса с опцией, которое увидит пользователь. Конструкция



Теперь укажем, какие файлы надо включить в дистрибутив и где их надо поместить при установке. Для этого используется обязательная секция [Files]

  • Source — путь к файлу-источнику. У меня всё необходимое программе для работы лежит в каталоге Release проекта MS VS
  • DestDir — каталог установки, переменная содержит путь, выбранный пользователем в окне установщика
  • Flags — разнообразные флаги. В нашем примере для исполняемого файла: игнорирование версии программы при перезаписи исполняемого модуля, если он уже существует в системе (ignorevarsion); для остальных файлов и каталогов так же игнорируем версию, рекурсивно включаем все подкаталоги и файлы источника (recursesubdirs) и создаем подкаталоги, если их нет (createallsubdirs)

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

Тут я указываю, что для группы в меню «Пуск» и для рабочего стола иконку надо брать из исполняемого модуля. Естественно, что иконка должна быть в него «вкомпилена», иначе в требуемых местах мы увидим стандартный значок из коллекции винды.

Итак, всё вроде готово. Жмем Ctrl + F9 и пытаемся собрать инсталлятор. Если не допущены синтаксические ошибки, начнется процесс сборки


Inno Setup собирает инсталлятор

После успешной сборки инсталлятор можно запустить, нажав F9. Если Вы работаете под учеткой с ограниченными правами (а я работаю в винде именно так), то придется полезть в каталог с результатами компиляции, который мы указали в скрипте, и запустить инсталлятор с правами админа


Запуск инсталлятора под ограниченной учетной записью

В итоге мы увидим до боли знакомое каждому пользователю Windows окно выбора языка

приветствие мастера

лицензионное соглашение

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

Ну что сказать? Ура! Мы написали свой первый «сетап» и могли бы радоваться, но

  1. Определиться с тем, как будем получать дистрибутив фреймворка. Тут есть два варианта — поставлять его вместе с дистрибутивом программы или, при необходимости установки загрузить его онлайн на целевую машину. Мы остановимся на варианте включения фреймворка в дистрибутив. Сам фреймфорк, скажем версии 4.0, можно взять бесплатно у Майкрософта
  2. Детектировать наличие/отсутствие данного фреймфорка в целевой системе. Для этого потребуется написать логику, анализирующую состояние системного реестра.

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

хотя можно набить код и непосредственно в секции [Code]. Надо помнить, что внутри этой секции используется синтаксис Pascal, и комментарии предваряются последовательностью "//" вместо используемой в основной части скрипта точки с запятой.

Не смотря на обилие кода, логика его работы достаточно проста — в зависимости от значения параметра version с помощью функции RegQueryDWordValue(. ) читается значение соответствующего ключа реестра и сравнивается с требуемым значением (смотрим таблицу 1). Для версии 4.5 дополнительно передаем номер релиза в параметре release.

Для того, чтобы перед началом установки проверить наличие фреймворка и сообщить пользователю о предпринимаемых действиях используем Callback-функцию InitializeSetup()

Сам запуск инсталляции фрейворка можно выполнить после установки основной программы, поэтому включаем в скрипт секцию [Run], в которой указывается, что необходимо запускать по окончании установки

Обратите внимание на то, что мы сначала указываем имя секции [Run], чтобы закрыть секцию [Code], а затем пишем комментарий начинающийся с точки с запятой. Это необходимо из-за различия синтаксиса основного скрипта и секции [Code], в противном случае при компиляции мы получим синтаксическую ошибку.



Майкрософт просит нас принять лицензию.

Я не профессионал и во многих вещах могу ошибаться. Прошу отнестись к этому с пониманием. Статья писалась нубом для нубов, её основная цель — задать вектор поиска при решении задачи написания инсталлятора. За остальными вопросами можно обратится к документации, поставляемой вместе с Inno Setup.

Код данного примера доступен в моем репозитории на Github. «Кракозябры» в комментах вызваны несовпадением кирилических кодировок. Для себя всегда пишу английские комментарии, но для лучшего понимания кода допустил этот ляп. При скачивании в винде всё просматривается замечательно, так что прошу простить мне и эту несуразность.

В остальном, полагаю «хаутушка» вышла достойной и благодарю за уделенное мне внимание.

Читайте также: