En

JazzTeam Software Development Company

Agile Java Development

Мануал “Создание инсталлятора при помощи Inno Setup”

Введение

В этой статье пойдет речь про 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 Script (.iss) с помощью мастера создания скриптов или открыть уже существующий .iss скрипт.

Для создания установочного файла можно воспользоваться мастером создания скриптов Inno Setup.

Мастер предложит заполнить:

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

Расширенная настройка

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

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

Все секции скрипта, за исключением [Setup], [Messages], [CustomMessages], [LangOptions] и [Code], содержат строки, разделенные на параметры. Каждый параметр состоит из имени, за которым следует двоеточие, а затем значение. Если не указано иное, параметры являются необязательными, поскольку они принимают значение по умолчанию, если их не указать. Несколько параметров в строке разделяются точкой с запятой и могут быть перечислены в любом порядке.


Пример скрипта Inno Setup

В скрипте поддерживаются комментарии, для это нужно начать строку с точки с запятой ( “;” ).

Описание и примеры секций скрипта

В самом начале скрипта, до всех секций, определяются необходимые константы:

#define   MyAppName      "Example"
#define   MyAppVersion   "0.0.1"
#define   MyAppPublisher "example developer"
#define   URL "http://www.example.com"
#define   MyAppURL "example.exe"

В данном случае MyAppName – это имя приложения, MyAppVersion – версия приложения, MyAppPublisher – разработчик. Эти константы будут доступны в любой части скрипта и при необходимости что-то изменить, достаточно сделать это один раз в одном месте.

[Setup]

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

 AppId={{9E594ED6-EBDC-4D98-990E-F3F6B9AB9ACE}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}

Описание возможных директив секции Setup:

[Types]

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

Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]

Эта секция не является обязательной. Здесь определены все компоненты, которые будут отображаться на странице «Выбор компонентов» мастера, для настройки типа установки. Комбинируется с секцией [Types]. Если в секции [Components] перечислены компоненты, а секции [Types] не существует, типы установки будут созданы инсталлятором автоматически, и могут быть не такими, как вам хотелось бы.

 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

[Tasks]

Опциональная секция. Предоставляет пользователю возможность отметить задачи, которые он хотел бы выполнить во время установки. Эти задачи отображаются как флажки и переключатели на странице «Выбор дополнительных задач».Сами по себе задачи ничего не делают. Необходимо помечать какое-то действие в других секциях кодом Task: taskName; Такие действия будут выполнены, только если пользователь выбрал задачу на соответствующей странице.

[Task]
Name: desktopicon; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Components: main; Flags: exclusive unchecked
[Icon]Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

В секции [Tasks] описывается задание. В окне инсталлятора оно появится после удачной установки приложения, перед страницей “Установка завершена”, и будет иметь вид строки, значение которой определит параметр Description. Задание выполнится, если пользователь поставит флажок в начале этой строки.

В секции [Icons] описывается, куда следует поместить ярлык, как ярлык будет озаглавлен и (по желанию) как он будет выглядеть, для какого именно файла он создается. Параметр Tasks секции [Icons] вызывает задание, описанное в секции [Tasks].

Для запуска каких-либо файлов секция [Tasks] не подходит – для этого существует секция [Run].

[Dirs]

Этот необязательный раздел определяет любые дополнительные каталоги помимо каталога приложений, который создается автоматически.
Обратите внимание, что вам не требуется явно создавать каталоги перед установкой файлов в них с помощью раздела [Files], поэтому этот раздел в первую очередь полезен для создания пустых каталогов. Пример, приведенный ниже, создает пустую папку “data” и “bin” в папке с приложением.

Name: "{app}\data"
Name: "{app}\bin"

[Files]

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

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

Также файлы секции [Files] могут иметь атрибуты: «системный» (system), «только для чтения» (readonly) и «скрытый» (hidden). За атрибуты файла отвечает параметр Attribs, и если он не указан, то файл не будет иметь вообще никаких атрибутов.

Source: "CTL3DV2.DLL"; DestDir: "{sys}"; Flags: onlyifdoesntexist uninsneveruninstall
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "C:\example.exe"; DestDir: "{app}"; Attribs: system hiddenSource: "README.TXT"; DestDir: "{app}"; Flags: isreadme

[Icons]

Секция определяет ярлыки приложения, которые необходимо создать в меню «Пуск» и/или в других местах, например на рабочем столе. Следует помнить, что если ярлыки указаны только в секции [Icons], они будут создаваться всегда. Если для ярлыка, задан еще и параметр Tasks в секции [Tasks] , то ярлык будет создан, только если пользователь выберет соответствующее задание при установке программы).

Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
Name: "{group}\Uninstall My Program"; Filename: "{uninstallexe}"

[INI]

Необязательная секция, определяющая, какие записи будут добавлены в INI-файл. Если INI-файл с заданным именем не существует в указанной папке, инсталлятор создаст его, а если INI-файл уже существует, он может добавить, удалить или изменить записи в нем, а также удалить существующий INI-файл и создать новый с тем же именем, но другим содержанием.

Filename: "MyProg.ini"; Section: "InstallSettings"; Flags: uninsdeletesection
Filename: "MyProg.ini"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"

В этом примере Filename – имя INI-файла (с расширением .ini). Section – имя секции INI-файла (в полученном INI-файле будет заключено в квадратные скобки). Key – ключ INI-файла. String – значение ключа Key (строка).

[UninstallDelete]

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

Type: files; Name: "{win}\log.txt"

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

Type: files; Name: "{app}\*.ini"

В этом примере удалятся все файлы с расширением .ini. Задание «масок» для инсталлятора то же, что и для Windows: * – префикс (суффикс) любой длины, ? – префикс (суффикс) из одного символа и т.д.

[Languages]

Раздел  определяет языки, доступные в программе установки.

Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"

[Messages]

Сообщения инсталлятора могут быть переопределены путем создания этой секции в файле сценария.

ButtonNext=&Forward >

[CustomMessages]

Раздел используется для определения значений сообщений для констант {cm: …}.

[CustomMessages]
CreateDesktopIcon=Create a &desktop icon
[Tasks]
Name: desktopicon; Description: "{cm:CreateDesktopIcon}"

[LangOptions]

Секция используется для определения языковых настроек, таких как шрифты, используемые программой установки и деинсталлятором. Как правило, вам не нужно создавать раздел [LangOptions] в вашем файле сценария, так как по умолчанию настройки, зависящие от языка, извлекаются из файла Default.isl, включенного в Inno Setup.

LanguageName=English
LanguageID=$0409
LanguageCodePage=0
DialogFontName=
DialogFontSize=8
WelcomeFontName=Verdana
WelcomeFontSize=12
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8
RightToLeft=no

Если перед параметром секции [LangOptions] не указан идентификатор языка, инсталлятор применит их ко всем языкам, заданным в секции [Languages] (кроме параметров LanguageName и LanguageID). Для того, чтобы изменения затронули только конкретный язык, перед параметром следует указать префикс (идентификатор языка и точку):

 rus.TitleFontSize=29

[Registry]

Этот необязательный раздел определяет любые ключи/значения реестра, которые необходимо создавать, изменять или удалять в системе пользователя во время установки.
По умолчанию ключи реестра и значения, созданные программой установки, при деинсталляции не удаляются. Чтобы при деинсталляции  удалялись ключи или значения, необходимо добавить один из следующих флагов uninsdelete.

 Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
Root: HKU; Subkey: {UserSid}\Software\Microsoft\Windows\CurrentVersion\Policies\System; ValueName: DisableRegistryTools; ValueType: dword; ValueData: 1

ValueType – тип значения. Может быть следующим:

Если параметр ValueType равен string, expandsz или multisz, это будет строка, которая может содержать константы.
Если тип данных dword, это будет десятичное (“123”), шестнадцатеричное (“$7B”), или константа, представляющая собой целое число.
Если тип данных binary – последовательность шестнадцатеричных – десятичных байтов в форме: “00 ff 12 34”.
Если тип данных none, параметр игнорируется.

[Run]

Раздел является необязательным. В этой секции можно указать любое количество программ для выполнения после того, как программа была успешно установлена, но до того, как программа установки отобразит окончательный диалог. Раздел [UninstallRun] также является необязательным, и указывает любое количество программ для выполнения в качестве первого этапа удаления. Оба раздела имеют одинаковый синтаксис, если не указано иное.

Программы выполняются в том порядке, в котором они отображаются в скрипте. По умолчанию при обработке записи [Run] / [UninstallRun] программа установки / удаления будет ждать завершения программы до перехода к следующей, если не используются флаги nowait, shellexec или waituntilidle.

Filename: "{app}\INIT.EXE"; Parameters: "/x"
Filename: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent
Filename: "{app}\MYPROG.EXE"; Description: "Launch application"; Flags: postinstall nowait skipifsilent unchecked

[Code]

Pascal scripting (современный Delphi-подобный Pascal) добавляет множество новых возможностей для настройки вашей установки или удаления. Например:

Pascal scripting делает почти все, что делает сама программа Inno и может делать еще больше.

Флаги

Большинство секций поддерживают параметр Flags. Этот параметр представляет собой набор дополнительных опций. Несколько флагов можно использовать в одной строке, разделяя их пробелами. В основном, для каждой секции предусмотрены свои специфические флаги.

[Registry]

[Dirs]

[Files]

[INI]

[Run]

Константы

Большинство записей в сценарии могут содержать в себе константы. Это предопределенные строки, заключенные в фигурные скобки {}. Программа установки или удаления преобразует константы в их литеральные значения, в зависимости от выбора пользователя и конфигурации системы.

Ниже приведен список используемых в Inno Setup констант:

Заключение

После заполнения необходимых секций скрипт Inno Setup компилируется, и в папке, которую нужно было указать в директиве “OutputDir” в секции Setup генерируется исполняемый файл установщика. Для того чтобы скомпилировать скрипт, нужно в меню редактора выбрать Build -> Compile, как показано на скриншоте ниже:

Можно также выбрать Run -> Run, тогда скрипт скомпилируется и сразу начнется установка приложения.
В меню Help -> Inno Setup Example Scripts можно найти несколько примеров того, как этот инструмент позволяет настроить установщик, чтобы он выполнял ту или иную задачу.
Вообще, документация и FAQ, которые прилагаются к редактору скриптов, составлены очень понятно и подробно, там можно найти решение большинства основных задач. Есть и русскоязычные форумы, где происходит обсуждение скриптов инсталлятора, особенностей их создания. Там можно найти много интересных примеров или попросить совета. А когда все начнет получаться – делиться своими знаниями, а может даже и похвастаться своими успехами.

Ссылка на обсуждение

Ссылка на собранные FAQ форума


, , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *