готовые скрипты inno setup
Inno Setup: создание инсталлятора на примере развертывания C# приложения
Я не являюсь профессиональным программистом. В том смысле, что не зарабатываю денег этим ремеслом, а использую свои навыки в качестве инструмента для основной, научной, деятельности. Поэтому все мои «поделки» живут лишь отведенный им на решение конкретной задачи период и не выходят за пределы каталогов проекта. Кроме того, уже довольно давно я отошел от разработки под ОС Windows, ибо Linux для решения моих задач более удобен.
Однако ученым тоже хочется кушать, прилично одеваться и заправлять машину. Поэтому (правда довольно редко) возникает необходимость немного пофрилансить.
Недавно мне подкинули не слишком сложный проект — одна фирма хочет написать аналог программы, имеющейся у другой. Немного реверсинга, немного кодинга, в целом проект вполне обыденный. Однако тут же возник вопрос о создании инсталлятора — клиент ведь желает продукт «под ключ», чтобы клацнуть на «сетап», понажимать «Далее» и получить готовую к работе программу.
Созданием инсталляторов я не занимался никогда. Поэтому данный вопрос был основательно «загуглен», в числе прочего попалась и такая статья с Хабра. Выбор средств для подобной задачи довольно широк, и включает как проприетарные, так и открытые продукты. Вот список того, что я «пощупал»
Так что в статье мы будем рассматривать пример использования Inno Setup, для которого имеется полезный фронтэнд Inno Script Studio, позволяющий выполнять создание простых инсталляторов с помощью мастера и менять настройки через GUI. GUI понадобился мне для первого знакомства, с продуктом, но мы не будем уделять ему большого внимания — мой «линукс головного мозга» в последнее время всё больше и больше уводит меня от желания использовать разного рода «мастера» (это субъективно, прошу не пинать). Мы рассмотрим хардкорный способ написания скрипта с чистого листа.
1. Установка, настройка и простой (но довольно солидный) скрипт
Думаю, что скачать программу с официального сайта и установить её труда не составит. Запускаем Inno Setup Compiler и видим такое окно
Пугающе уныло встречает нас Inno Setup.
Что это? По сути это просто-напросто редактор для набора скриптов, снабженный подсветкой синтаксиса и кнопками компиляции и запуска. От нас ждут, что мы начнем набирать в этом окне текст скрипта, определяющий логику работы будущего инсталлятора. Ну так и не будем терять время.
Прежде всего определим необходимые константы
Эти строки будут часто встречаться в коде скрипта, поэтому определяем их, как и в C, с помощью дерективы #define
Тело скрипта разделяется на секции, каждая из которых несет свое функциональное назначение. Обязательная секция [Setup] задает глобальные параметры работы инсталлятора и деинсталатора.
Путь, по умолчанию предлагаемый инсталлятором для установки определяем опцией DefaultDirName. При этом переменная — это путь в каталог Program Files соответствующей разрядности. Опция DefaultGroupName определяет имя группы программы в меню «Пуск». Обратите внимание на то, что для указания имени приложения мы используем данное нами выше макроопределение Name, обрамляя его фигурными скобками и решеткой.
Пара опций OutputDir и OutputBaseFileName задают каталог, куда будет записан скомпилированный «сетап» и его имя (без расширения). Кроме этого, указываем где взять иконку для test-setup.exe опцией SetupIconFile.
Последние опции в этой секции определяют алгоритм сжатия (LZMA) и указывают, что все файлы сжимаются одновременно, а не по отдельности (SolidCompression) что ускоряет процесс распаковки при большом количестве однотипных файлов.
В хорошем исталяторе должна быть поддержка нескольких языков. Включаем её в наш «сетап», используя опциональную секцию [Languages]. При отсутствии данной секции будет использоваться английский язык.
Каждая строка в данной секции задает один из используемых при установке языков. Синтаксис строки таков
в качестве разделителя параметров используется точка с запятой. Параметр Name говорит сам за себя — «имя» языка, допускаются общепринятые двухбуквенные сокращения («en», «ru», «de» и так далее). Параметр MessagesFile сообщает компилятору в каком месте взять шаблон сообщений, выводимых при инсталляции. Эти шаблоны берем в каталоге компилятора Inno Setup, о чем мы сообщаем директивой compiler. Для английского языка годится шаблон Default.isl, для русского — Languages\Russian.isl
Параметр LicenseFile задает путь к файлу с текстом лицензии на соответствующем языке.
Обычно установщик предлагает нам, например, определится, хотим мы или не хотим создать ярлык на рабочем столе. Такие опции установки определяются необязательной секцией [Tasks]
Здесь Name задает имя операции — «desktopicom» — создание иконки на рабочем столе; Description — описание чекбокса с опцией, которое увидит пользователь. Конструкция
задает стандартный текст сообщения, соответствующий выбранному в начале инсталляции языку. Параметр GroupDescription — заголовок группы чекбоксов с опциями. Параметр Flags задает определенные действия и состояния элементов управления, в данном случае указывая, что галочка «создать ярлык на рабочем столе» должна быть снята.
Теперь укажем, какие файлы надо включить в дистрибутив и где их надо поместить при установке. Для этого используется обязательная секция [Files]
Наконец, чтобы всё было красиво, опционально укажем компилятору, где брать иконки для размещения в меню программ и на рабочем столе
Тут я указываю, что для группы в меню «Пуск» и для рабочего стола иконку надо брать из исполняемого модуля. Естественно, что иконка должна быть в него «вкомпилена», иначе в требуемых местах мы увидим стандартный значок из коллекции винды.
Итак, всё вроде готово. Жмем Ctrl + F9 и пытаемся собрать инсталлятор. Если не допущены синтаксические ошибки, начнется процесс сборки
Inno Setup собирает инсталлятор
После успешной сборки инсталлятор можно запустить, нажав F9. Если Вы работаете под учеткой с ограниченными правами (а я работаю в винде именно так), то придется полезть в каталог с результатами компиляции, который мы указали в скрипте, и запустить инсталлятор с правами админа
Запуск инсталлятора под ограниченной учетной записью
В итоге мы увидим до боли знакомое каждому пользователю Windows окно выбора языка
приветствие мастера
лицензионное соглашение
ну и так далее. Приятно, что по умолчанию используется лаконичный дизайн мастера, без рюшечек (которые при желании можно добавить)
Ну что сказать? Ура! Мы написали свой первый «сетап» и могли бы радоваться, но
Вы не заметили, что мы о чем-то забыли? Приложение, созданное на C# не будет работать без фреймворка, с которым оно было собрано, если таковой отсутствует в системе. Соответствующий фреймворк надо установить, а для этого необходимо
Значения в реестре, которые необходимо проверить приведены в официальной документации Microsoft, в статье я приведу краткую выжимку из неё
Для реализации произвольной логики работы инсталлятора в Inno Setup предусмотрена секция [Code]. В пределах этой секции размещается код реализующих логику функций на языке Pascal. Содежимое этой секции мы вынесем в отдельный файл dotnet.pas и включим в основной скрипт дерективой #include
хотя можно набить код и непосредственно в секции [Code]. Надо помнить, что внутри этой секции используется синтаксис Pascal, и комментарии предваряются последовательностью «//» вместо используемой в основной части скрипта точки с запятой.
Не смотря на обилие кода, логика его работы достаточно проста — в зависимости от значения параметра version с помощью функции RegQueryDWordValue(. ) читается значение соответствующего ключа реестра и сравнивается с требуемым значением (смотрим таблицу 1). Для версии 4.5 дополнительно передаем номер релиза в параметре release.
Для того, чтобы перед началом установки проверить наличие фреймворка и сообщить пользователю о предпринимаемых действиях используем Callback-функцию InitializeSetup()
Сам запуск инсталляции фрейворка можно выполнить после установки основной программы, поэтому включаем в скрипт секцию [Run], в которой указывается, что необходимо запускать по окончании установки
Обратите внимание на то, что мы сначала указываем имя секции [Run], чтобы закрыть секцию [Code], а затем пишем комментарий начинающийся с точки с запятой. Это необходимо из-за различия синтаксиса основного скрипта и секции [Code], в противном случае при компиляции мы получим синтаксическую ошибку.
В секции задается путь к инсталлятору фреймворка — предварительно он распакован нами во временный каталог (переменная содержит путь к веременному каталогу); задаются параметры командной строки. Опция Check определяет условие запуска инсталляции — это отсутствие в целевой системе нужного нам фреймворка. Опция StatusMsg определяет сообщение, которое увидит пользователь в окне инсталлера.
Снова компилируем наш проект. Теперь, при запуске на «чистой» винде инсталлятор выдаст сообщение
Майкрософт просит нас принять лицензию.
После этого мы получаем работоспособное C# приложение установленное «по взрослому»
Заключение
Я не профессионал и во многих вещах могу ошибаться. Прошу отнестись к этому с пониманием. Статья писалась нубом для нубов, её основная цель — задать вектор поиска при решении задачи написания инсталлятора. За остальными вопросами можно обратится к документации, поставляемой вместе с Inno Setup.
Код данного примера доступен в моем репозитории на Github. «Кракозябры» в комментах вызваны несовпадением кирилических кодировок. Для себя всегда пишу английские комментарии, но для лучшего понимания кода допустил этот ляп. При скачивании в винде всё просматривается замечательно, так что прошу простить мне и эту несуразность.
В остальном, полагаю «хаутушка» вышла достойной и благодарю за уделенное мне внимание.
Мануал “Создание инсталлятора при помощи Inno Setup”
December 21, 2018 Jazz Team Технические статьи
Введение
В этой статье пойдет речь про Inno Setup – удобный инструмент для упаковки приложений для OS Windows.
Почему Inno Setup? “Сегодня Inno Setup конкурирует и даже превосходит многие коммерческие инсталляторы в наборе функций и стабильности”, – говорится на официальном сайте разработчика. И действительно, этот инструмент довольно простой для освоения и мощный по своим возможностям.
На данный момент разработчики Inno Setup в качестве ключевых возможностей заявляют:
Первое знакомство
Скачать бесплатно стабильную версию Inno Setup Compiler можно с официального сайта. Там же можно найти FAQ и документацию на английском языке и сторонние библиотеки, упрощающие процесс создания Inno Setup Script (.iss).
В классическом приложении Inno Setup Compiler есть раздел Help, в котором можно найти FAQ, примеры скриптов и документацию.
Для создания установочного файла можно воспользоваться мастером создания скриптов Inno Setup.
Мастер предложит заполнить:
После того, как мастер соберет все необходимые сведения, он предложит скомпилировать полученный скрипт. В папке, которая была выбрана для итогового дистрибутива, будет лежать готовый к установке файл.
Расширенная настройка
Если есть необходимость кастомизировать интерфейс инсталлятора, поработать с реестром или настроить действия в процессе удаления программы, то скрипт инсталлятора придется доработать.
Скрипт Inno Setup разделен на секции, каждая из которых отвечает за свой функционал. При этом бывает так, что для одной и той же цели могут подойти разные секции. Порядок выполнения секций строго определен и от расположения секций в скрипте не зависит.
Все секции скрипта, за исключением [Setup], [Messages], [CustomMessages], [LangOptions] и [Code], содержат строки, разделенные на параметры. Каждый параметр состоит из имени, за которым следует двоеточие, а затем значение. Если не указано иное, параметры являются необязательными, поскольку они принимают значение по умолчанию, если их не указать. Несколько параметров в строке разделяются точкой с запятой и могут быть перечислены в любом порядке.
Пример скрипта Inno Setup
В скрипте поддерживаются комментарии, для это нужно начать строку с точки с запятой ( “;” ).
Описание и примеры секций скрипта
В самом начале скрипта, до всех секций, определяются необходимые константы:
В данном случае MyAppName – это имя приложения, MyAppVersion – версия приложения, MyAppPublisher – разработчик. Эти константы будут доступны в любой части скрипта и при необходимости что-то изменить, достаточно сделать это один раз в одном месте.
[Setup]
В данном разделе содержатся глобальные параметры, используемые установщиком и деинсталлятором.
Описание возможных директив секции Setup:
[Types]
Эта секция используется, если разработчик хочет предоставить пользователю на выбор некоторые варианты установки. Следует помнить, что сама по себе секция [Types] только описывает возможные для данной программы типы установки, и должна комбинироваться с другими секциями.
[Components]
Эта секция не является обязательной. Здесь определены все компоненты, которые будут отображаться на странице «Выбор компонентов» мастера, для настройки типа установки. Комбинируется с секцией [Types]. Если в секции [Components] перечислены компоненты, а секции [Types] не существует, типы установки будут созданы инсталлятором автоматически, и могут быть не такими, как вам хотелось бы.
[Tasks]
Опциональная секция. Предоставляет пользователю возможность отметить задачи, которые он хотел бы выполнить во время установки. Эти задачи отображаются как флажки и переключатели на странице «Выбор дополнительных задач».Сами по себе задачи ничего не делают. Необходимо помечать какое-то действие в других секциях кодом Task: taskName; Такие действия будут выполнены, только если пользователь выбрал задачу на соответствующей странице.
В секции [Tasks] описывается задание. В окне инсталлятора оно появится после удачной установки приложения, перед страницей “Установка завершена”, и будет иметь вид строки, значение которой определит параметр Description. Задание выполнится, если пользователь поставит флажок в начале этой строки.
В секции [Icons] описывается, куда следует поместить ярлык, как ярлык будет озаглавлен и (по желанию) как он будет выглядеть, для какого именно файла он создается. Параметр Tasks секции [Icons] вызывает задание, описанное в секции [Tasks].
Для запуска каких-либо файлов секция [Tasks] не подходит – для этого существует секция [Run].
Этот необязательный раздел определяет любые дополнительные каталоги помимо каталога приложений, который создается автоматически.
Обратите внимание, что вам не требуется явно создавать каталоги перед установкой файлов в них с помощью раздела [Files], поэтому этот раздел в первую очередь полезен для создания пустых каталогов. Пример, приведенный ниже, создает пустую папку “data” и “bin” в папке с приложением.
[Files]
В этой секции определены любые файлы, которые необходимо установить в систему пользователя. Иногда достаточно указать исполняемый файл, который запускает инсталлируемое приложение. Но чаще необходимы еще какие-то ресурсы.
Если устанавливаемый файл является файлом ReadMe, инсталлятор после удачной установки приложения может предложить пользователю прочесть этот файл. Для этого используется флаг isreadme секции [Files], но файл ReadMe пользователь сможет прочитать, только если после установки компьютер не будет перезагружен.
Также файлы секции [Files] могут иметь атрибуты: «системный» (system), «только для чтения» (readonly) и «скрытый» (hidden). За атрибуты файла отвечает параметр Attribs, и если он не указан, то файл не будет иметь вообще никаких атрибутов.
[Icons]
Необязательная секция, определяющая, какие записи будут добавлены в INI-файл. Если INI-файл с заданным именем не существует в указанной папке, инсталлятор создаст его, а если INI-файл уже существует, он может добавить, удалить или изменить записи в нем, а также удалить существующий INI-файл и создать новый с тем же именем, но другим содержанием.
[UninstallDelete]
Эта секция необязательная и определяет, какие файлы или папки нужно удалить во время деинсталляции.
Для того, чтобы не перечислять все однотипные файлы, которые следует удалить при установке или удалении программы, можно использовать «маску»:
[Languages]
Раздел определяет языки, доступные в программе установки.
[Messages]
Сообщения инсталлятора могут быть переопределены путем создания этой секции в файле сценария.
[CustomMessages]
Раздел используется для определения значений сообщений для констант
[LangOptions]
Секция используется для определения языковых настроек, таких как шрифты, используемые программой установки и деинсталлятором. Как правило, вам не нужно создавать раздел [LangOptions] в вашем файле сценария, так как по умолчанию настройки, зависящие от языка, извлекаются из файла Default.isl, включенного в Inno Setup.
Если перед параметром секции [LangOptions] не указан идентификатор языка, инсталлятор применит их ко всем языкам, заданным в секции [Languages] (кроме параметров LanguageName и LanguageID). Для того, чтобы изменения затронули только конкретный язык, перед параметром следует указать префикс (идентификатор языка и точку):
[Registry]
Этот необязательный раздел определяет любые ключи/значения реестра, которые необходимо создавать, изменять или удалять в системе пользователя во время установки.
По умолчанию ключи реестра и значения, созданные программой установки, при деинсталляции не удаляются. Чтобы при деинсталляции удалялись ключи или значения, необходимо добавить один из следующих флагов uninsdelete.
ValueType – тип значения. Может быть следующим:
Если параметр ValueType равен string, expandsz или multisz, это будет строка, которая может содержать константы.
Если тип данных dword, это будет десятичное (“123”), шестнадцатеричное (“$7B”), или константа, представляющая собой целое число.
Если тип данных binary – последовательность шестнадцатеричных – десятичных байтов в форме: “00 ff 12 34”.
Если тип данных none, параметр игнорируется.
Раздел является необязательным. В этой секции можно указать любое количество программ для выполнения после того, как программа была успешно установлена, но до того, как программа установки отобразит окончательный диалог. Раздел [UninstallRun] также является необязательным, и указывает любое количество программ для выполнения в качестве первого этапа удаления. Оба раздела имеют одинаковый синтаксис, если не указано иное.
Программы выполняются в том порядке, в котором они отображаются в скрипте. По умолчанию при обработке записи [Run] / [UninstallRun] программа установки / удаления будет ждать завершения программы до перехода к следующей, если не используются флаги nowait, shellexec или waituntilidle.
Pascal scripting (современный Delphi-подобный Pascal) добавляет множество новых возможностей для настройки вашей установки или удаления. Например:
Pascal scripting делает почти все, что делает сама программа Inno и может делать еще больше.
Флаги
Большинство секций поддерживают параметр Flags. Этот параметр представляет собой набор дополнительных опций. Несколько флагов можно использовать в одной строке, разделяя их пробелами. В основном, для каждой секции предусмотрены свои специфические флаги.
[Registry]
[Files]
Константы
Большинство записей в сценарии могут содержать в себе константы. Это предопределенные строки, заключенные в фигурные скобки <>. Программа установки или удаления преобразует константы в их литеральные значения, в зависимости от выбора пользователя и конфигурации системы.
Ниже приведен список используемых в Inno Setup констант:
Заключение
Создание дистрибутива Windows приложения в Inno Setup
Для удобства установки ваших программ на компьютеры пользователей вам понадобится создание дистрибутива. Сегодня я хочу рассказать об очень мощном и бесплатном инструменте для создания дистрибутивов для ОС Windows – Inno Setup.
Об Inno Setup
Inno Setup появившийся в 1997 году, сегодня соперничает с платными инсталляторами и даже превосходит многие из них по количеству функций и стабильности. Домашняя страница проекта находится здесь.
Вот ключевые возможности инсталлятора:
Большим плюсом Inno Setup является то, что его можно использовать абсолютно бесплатно даже для коммерческого использования. Хотя в качестве благодарности или для поддержки инсталлятора вы можете сделать пожертвование здесь. Там же есть список всех, кто пожертвовал от 100 долларов.
Вот как выглядит стартовая страница стандартного мастера установки дистрибутива созданного с помощью Inno Setup.
О создание дистрибутива в Inno Setup
Создание дистрибутива с помощью Inno Setup происходит следующим образом:
1. Сначала вы создаёте скрипт Inno Setup. Скрипт Inno Setup – это текстовый файл с расширением .iss, который содержит свойства дистрибутива и набор производимых действий при установке и удалении. Скрипт может быть создан с помощью стандартного редактора Inno Setup (см. картинку) или с помощью одного из сторонних редакторов, таких как Inno Script Studio или ISTool. В этой статье я рассмотрю использование только стандартного редактора Inno Setup.
2. Затем вы компилируете скрипт, получая при этом дистрибутив.
3. После компиляции вы можете тестировать и отлаживать полученный дистрибутив, выполняя инсталляцию и деинсталляцию.
Установка Inno Setup
Чтобы создавать дистрибутивы с помощью Inno Setup, достаточно установить компилятор Inno Setup к себе на компьютер. Дистрибутив можно скачать здесь. Ссылку на загрузку последней стабильной версии вы можете найти в секции Stable Release. На момент написания статьи последняя версия Inno Setup была 5.5.5, см. картинку. Чтобы скачать дистрибутив, нажмите на ссылку «Random site» напротив версии с поддержкой Unicode (файл isetup-5.5.5-unicode.exe) или без неё (ANSI версия – файл isetup-5.5.5.exe). Для избегания проблем с отображением кириллицы лучше сразу использовать Unicode-вариант Inno Setup.
Если вы собираетесь шифровать свой будущий дистрибутив, то модуль для шифрования ISCrypt.dll вам нужно скачать отдельно в секции Encryption Module, см. картинку (ниже вы видите ссылку на исходные коды этого модуля – ISCrypt.zip).
На этой же странице в секции QuickStart Pack вы можете найти ссылку на дистрибутивы ispack-5.5.5.exe и ispack-5.5.5-unicode.exe для установки Inno Setup вместе с Inno Script Studio, см. картинку. Inno Script Studio – это разработка сторонней компании (Kymoto Solutions), которая предлагает вам свой удобный пользовательский интерфейс и предоставляет возможность отладки вашего инсталлятора во время выполнения. Также, этот дистрибутив предложит скачать и установить модуль шифрования ISCrypt.dll автоматически.
Кроме всего перечисленного, на странице загрузки есть секции Beta Release, для загрузки бета версий Inno Setup, и Source Code, для загрузки исходных кодов, на которых я не буду заострять внимание.
Если вы собираетесь пользоваться более продвинутыми редакторами скрипта Inno Setup, то вам также будет интересна страница Inno Setup Third-Party Files со списком разработок сторонних компаний. Вот какие сторонние разработки мы можем использовать совместно с Inno Setup:
Ещё в этом списке, почему то нет ещё некоторых известных разработок (список обновлён 13.04.2015):
Первый запуск Inno Setup Compiler
Единственное окно программы Inno Setup – это окно компилятора. Компилятор запускается из меню «Пуск». При первом запуске вы увидите приглашение предлагающее создать пустой скрипт, запустить мастер создания скрипта или открыть примеры или последние использованные файлы.
Если у вас нет опыта общения с Inno Setup, то примеры будут кстати. Давайте откроем какой-нибудь пример, нажмите кнопку «OK» и выберите один из примеров. После того как пример открылся вы можете оценить, как выглядит простой скрипт Inno Setup. Также обратите внимание, что интерфейс компилятора очень прост и весь скрипт вам нужно будет писать вручную. В вашем распоряжении здесь будет только справка и примеры.
Использование мастера для создания скрипта Inno Setup
Создавать новый скрипт Inno Setup вы можете с чистого листа или можете воспользоваться мастером создания скрипта. Для примера я сделаю дистрибутив для установки программы MyProg.exe, которая находится в папке с примерами (устанавливается вместе с Inno Setup). При запуске программа выдаёт два окошка и завершается.
На втором экране введите название приложения (Application name), версию приложения (Application version), издателя приложения (Application publisher) и адрес сайта приложения (Application website). Жирным шрифтом в мастере отмечены обязательные поля, а остальные можно сделать пустыми.
На следующем шаге вы выбираете папку для своего приложения. По умолчанию, как видно по картинке, это папка с тем же именем, что и имя приложения, и она будет создана внутри папки Program Files. Галочка «Allow user to change the application folder» позволит пользователю поменять папку в процессе установки. А при установке галки «The Application doesn’t need a folder» папка приложения вообще не будет создаваться.
Если из выпадающего списка «Application destination base folder» вы выберете «(Custom)», то в поле, находящемся чуть ниже, можно будет задать произвольный путь. Например, чтобы папка вашего приложения была на системном диске, нужно указать « ».
Как видите, для указания системного диска я указал « » вместо «C:», ведь на разных компьютерах системный диск может быть разным. Вообще в Inno Setup вы будете очень часто использовать константы типа « ». Все константы окружены фигурными скобками и их очень много. Вот полный список констант с кратким описанием (полное описание смотрите в разделе «Constants» в справке):
Константы директорий:
Константы папок окружения:
* = константы «common» приравниваются к константам «user», если пользователю не хватает административных привилегий или инструкция PrivilegesRequired установлена в lowest.
Другие константы:
Следующий шаг мастера создания скрипта Inno Setup позволяет добавить файлы вашего приложения.
В самом верхнем поле выбирается основной исполняемый файл. Если вы установите галку «Allow user to start the application after Setup has finished», то пользователь увидит предложение запустить приложение после установки. Если у вашего дистрибутива нет исполняемого файла, то вы можете установить галку «The application doesn’t have a main executable file». Ниже идёт список файлов для вашего дистрибутива. Здесь можно добавлять отдельные файлы (кнопка «Add file(s)…») или целые папки (кнопка «Add folder…»). При добавлении папки вы увидите дополнительный вопрос, включать подпапки или нет.
После добавления папок и файлов в список вы сможете редактировать каждый элемент (кнопка «Edit…») или удалить его (кнопка «Remove»). В окне редактирования вы сможете поменять многие параметры: нужно ли рекурсивно включать подпапки (галка «Recurse subfolders»), нужно ли включать пустые папки (галка «Include empty subfolders»), базовая папка назначения (поля «Destination base folder») и папка внутри базовой папки назначения («Destination subfolder»).
Мы для примера добавим только файл справки.
Следующий шаг мастера – это выбор создаваемых иконок. В поле «Application Start Menu folder name» задаётся имя группы в меню «Пуск». Если вы установите галку «Allow user to change the Start Menu folder name», то пользователь сможет поменять имя папки во время установки, а если вы установите галку «Allow user to disable Start Menu folder creation», то пользователь сможет вообще отключить создание этой папки в меню «Пуск». Установите галку «Create an Internet shortcut in the Start Menu folder» и «Create an Uninstall icon in the Start Menu folder» чтобы инсталлятор создал ярлыки внутри группы, соответственно, для открытия вашего сайта и для удаления вашего приложения. Галочки «Allow user to create a desktop icon» и «Allow user to create a Quick Launch icon» позволят пользователю создать ярлыки на рабочем столе и в группе быстрого запуска. Я поставлю все галочки.
На следующем шаге задаются файлы лицензии (License file) и файлы с информацией, которые будут показаны до и после установки. Если вы указали файл лицензии, то при инсталляции, пользователь должен будет согласиться с лицензией. Поддерживаются файлы .txt и .rtf. Я укажу файлы license.txt и Readme.txt из папки с примерами.
На следующем шаге выбираем поддерживаемые языки. Я оставлю английский и добавлю русский.
На следующем шаге задаются параметры для компилятора Inno Setup. В поле «Custom compiler output folder» задаётся путь к папке, в которую компилятор Inno Setup будет сохранять созданный дистрибутив. Если в этом поле пусто, то дистрибутив будет создаваться в той же папке, что и файл .iss. В поле «Compiler output base file name» задаётся базовое имя для файла или файлов дистрибутива. Например, если у вас задано имя «setup», то при создании дистрибутива, состоящего из одного файла, вы получите файл setup.exe. В поле «Custom Setup icon file» вы можете указать имя файла иконки для будущего дистрибутива. Если здесь ничего не указано, то будет использоваться стандартная иконка. В последнем поле «Setup Password» вы можете указать пароль, который пользователь должен будет указать при инсталляции. Если установлена галка «Use the password to encrypt the application files», то с помощью указанного пароля будут зашифрованы файлы, находящиеся в дистрибутиве. Я для примера заполню все поля по-своему.
Следующий шаг оповещает вас о том, что обнаружен препроцессор Inno Setup и предлагает использовать директивы #define для упрощения вашего скрипта. Если вы хотите использовать директиву #define, оставьте галочку «Yes, use #define compiler directives». Если галочка не установлена, то, в дальнейшем, вы сможете добавить директивы #define в свой скрипт вручную.
И наконец-то появился последний шаг, где мы просто нажимаем на кнопку «Finish».
После этого компилятор сразу хочет скомпилировать наш скрипт. Давайте согласимся и нажмём кнопку «Да».
После этого компилятор предупредит нас, что скрипт не сохранён и предложит сделать это.
Давайте согласимся (нажмём «Да») и сохраним скрипт. После сохранения скрипт скомпилировался и готовый дистрибутив, в примере это файл my-setup.exe, создался в папке, которую я указал в мастере на шаге «Compiler Settings». После компиляции вы можете посмотреть, как она прошла на панели «Compiler Output» внизу окна компилятора, см. картинку.
После создания заготовки скрипта, вы можете приступить к добавлению различных продвинутых действий.
Отладка дистрибутива в Inno Setup
После этого появится следующее окошко с результатом, который вернула константа.
Структура скрипта Inno Setup
Скрипты в Inno Setup разбиты на секции. Имя каждой секции заключено в квадратные скобки. Внутри каждой секции содержатся специфические для этой секции элементы. Для удобства вы можете делать несколько секций с одинаковым именем. Такие секции будут восприниматься как одна. Вот пример:
Вы можете комментировать строки, чтобы их игнорировал компилятор, установкой вначале точки с запятой.
В скрипте поддерживается C-подобная директива #include, заставляющая компилятор втягивать строки из указанного произвольного текстового файла, в то место где эта директива стоит. Вот синтаксис:
С помощью директивы #preproc вы можете указать, какой препроцессор следует использовать: встроенный, поддерживающий только директиву #include, или Inno Setup Preprocessor (ISPP), который поддерживает очень много директив и функций. По умолчанию в скриптах используется препроцессор ISPP, если он установлен, а в файлах .isl используется встроенный препроцессор. Вот синтаксис:
Секции скрипта Inno Setup
Приведу здесь полный список всех секций Inno Setup с кратким описанием. Полное описание секций и список элементов секций можно найти в справке в разделе «Setup Script Sections».
[Setup] – эта секция содержит глобальные настройки, используемые при инсталляции и деинсталляции. Пример:
[Types] – необязательная секция, определяющая варианты установки (Полная/Компактная/Выборочная), которые будут отображаться на странице выбора компонентов для установки. Пример:
[Components] – необязательная секция, определяющая компоненты, которые будут отображаться на странице выбора компонентов для установки. Пример:
[Tasks] – необязательная секция, для создания дополнительных заданий, выполняемых при инсталляции. Пользователь будет видеть задания в виде переключателей и сможет выбирать выполнять то или иное задание или нет. Пример:
[Dirs] – эта необязательная секция определяет, какие дополнительные папки, кроме папки приложения, нужно создавать.
[Files] – необязательная секция, определяющая, какие файлы будут устанавливаться на компьютер.
[Icons] – необязательная секция, определяющая, какие будут создаваться ярлыки в меню «Пуск», на рабочем столе и т.д.
[INI] – необязательная секция, определяющая, какие записи будут добавлены в INI-файл.
[Languages] – секция определяет языки, которые будут доступны при инсталляции. При запуске инсталлятора будет подобран язык, совпадающий с языком системы. В ином случае по умолчанию будет использоваться язык находящийся первым в секции [Languages]. Пример:
[Messages] – секция для замены сообщений, описанных в языковых файлах .isl. Пример замены стандартного текста «&Next >» на кнопке перехода на следующий шаг только для английского языка:
[CustomMessages] – секция для определения значений константы , см. описание констант выше. Пример использования:
[LangOptions] – секция содержит настройки языка, такие как шрифт. Пример:
[Registry] – эта необязательная секция определяет, какие ключи и значения нужно создать, изменить или удалить в реестре. Примеры использования:
[Run] – эта необязательная секция определяет, какие программы нужно выполнить после успешной установки, но до появления финишного шага в окне мастера установки. Примеры:
[UninstallRun] – эта необязательная секция определяет, какие программы нужно выполнить в самом начале деинсталляции.
Порядок инсталляции и деинсталляции
Очень важный момент при инсталляции – это понимание, в каком порядке происходит выполнение скрипта. Ниже перечислены действия инсталлятора в том порядке, в котором они будут выполняться при установке:
Деинсталляция происходит в обратном порядке. Но это не касается секций [UninstallRun] и [UninstallDelete], которые будут выполняться в том порядке, в котором они встречаются в скрипте (не в обратном порядке).
Препроцессор Inno Setup
Пару слов хочется написать о препроцессоре Inno Setup (ISPP). Основная задача препроцессора – это автоматизация задач во время компиляции и снижение вероятности опечатки в ваших скриптах. Например, вы можете объявить переменную ISPP (переменная времени компиляции), содержащую имя вашего приложения, а затем использовать значение этой переменной в нескольких местах вашего скрипта. Если в дальнейшем по какой-то причине вы должны изменить имя вашего приложения, вы сможете сделать это в одном месте вашего скрипта. Без ISPP, вам придётся найти и исправить все части скрипта, где вы используете имя приложения, например, AppName, AppVerName, DefaultGroupName и т.п.
Другой пример использования ISPP – это вытягивание информации о версии приложения из ЕХЕ-файла и использование её в инструкции AppVerName в секции [Setup]. Без ISPP, вам придется менять скрипт каждый раз при изменении версии приложения.
Кроме того, разбиение скрипта на части, даёт возможность создать единый скрипт для разных версий вашего приложения (например, пробная и полнофункциональная версии).
При использовании препроцессора важно помнить, что препроцессор работает только во время компиляции.
Вызов компилятора Inno Setup из командной строки
Не лишним будет знать и о возможности компиляции дистрибутива из командной строки. Вызов компиляции выглядит следующим образом: