Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
zaguzin
7 лет назад

Разработка инсталляторов. Урок 16. Inno Setup: Компоненты, флаги и переключатели.

Добрый вечер,друзья. В прошлом уроке я затрагивал тему изменения интерфейса стандартными средствами. Сегодня же хотел рассказать о скинах, но получается так, что эта тема настолько огромна, что пост ещё и на 30% не готов. Так что сегодня я расскажу вам о компонентах, а скины оставлю на пятницу.

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

Для этого требуется сделать несколько шагов.

Указываем в секции [Files] наши файлы и папки отдельно. Можно создать новый скрипт из мастера или указать пути вручную. Код:

Source: "D:\Program\Program.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Program\Service.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Program\en\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\ru\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\help-en\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\help-ru\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\themes\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

То есть получим следующее:

Используемые флаги:

gnoreversion - файлы устанавливаются независимо отверсии. Версия не сравнивается.
recursesubdirs- рекурсивно включаем в установку все подкаталоги и файлы.
createallsubdirs - создаём подкаталоги в папке, комбинируется с recursesubdirs.

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

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

Флагом iscustom мы определяем, какой же компонент является выборочным.

Описание:

Full installation - полная установка.

Custom installation - выборочная установка.

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

Теперь переходим собственно в компоненты. Создаём секцию [Components]. Далее у нас есть выбор:

Все компоненты в едином списке без группировки. Удобно, когда компонентов немного.

В секции [Components] перечисляем наши компоненты и указываем, в каком типе установки они будут установлены. Например:

Name: "main"; Description: "Main Files"; Types: full custom; Flags: fixed
Name: "Component1"; Description: "Themes"; Types: full custom
Name: "Component2"; Description: "English help files"; Types: full custom
Name: "Component3"; Description: "Russian help files"; Types: full custom
Name: "Component4"; Description: "English language"; Types: full custom
Name: "Component5"; Description: "Russian language"; Types: full custom

Флаг fixed в компоненте Main указывает, что выбор для пользователя будет не активен. Он нам требуется для файлов, которые обязательны для установки.

Теперь нам нужно добавить в раздел [Files] к нашим файлам и папкам значения, к какому компоненту они принадлежат. Делаем вот так:

Source: "D:\Program\Program.exe"; Components: Main; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Program\Service.exe"; Components: Main; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Program\en\*"; Components: Component4; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\ru\*"; Components: Component5; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\help-en\*"; Components: Component2; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\help-ru\*"; Components: Component3; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\themes\*"; Components: Component1; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

То есть два файла у нас в Main, а остальное можно выбрать.

В программе:

После компиляции:

Как видим, всё работает.

Группировка компонентов.

Например, сделаем группировку по языкам. Комбинируйте как хотите. Просто создаём группу таким образом в [Components]:

Name: "main"; Description: "Main Files"; Types: full custom; Flags: fixed
Name: "Component1"; Description: "Themes"; Types: full custom
Name: "Russian"; Description: "Russian language"; Types: full custom
Name: "Russian\Component3"; Description: "Russian help files"; Types: full custom
Name: "Russian\Component5"; Description: "Russian language files"; Types: full custom
Name: "English"; Description: "English language"; Types: full custom
Name: "English\Component2"; Description: "English help files"; Types: full custom
Name: "English\Component4"; Description: "English language files"; Types: full custom

Также не забудьте в секции [Files] добавить группу, иначе компилятор будет писать об ошибке:

Source: "D:\Program\Program.exe"; Components: Main; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Program\Service.exe"; Components: Main; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Program\en\*"; Components: English\Component4; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\ru\*"; Components: Russian\Component5; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\help-en\*"; Components: English\Component2; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\help-ru\*"; Components: Russian\Component3; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Program\themes\*"; Components: Component1; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

В программе это выглядит вот так:

После компиляции и запуска наблюдаем следующее:

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

Флаг exclusive - Например, нам требуется сделать выбор только одного дочернего компонента в группе. Не будем создавать новые группы, а сделаем на текущем примере, хоть это и не совсем правильно. Но для примера пойдёт. То есть сделаем выбор установки только русского языка или справки. Добавляем к элементам флаги.

Name: "Russian\Component3"; Description: "Russian help files"; Types: full custom; Flags: exclusive
Name: "Russian\Component5"; Description: "Russian language files"; Types: full custom; Flags: exclusive

В программе:

После сборки и запуска:

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

На этом на сегодня всё. Завтра я расскажу как менять языки и добавлять свои сообщения в установщик и менять стандартные. Всем спасибо и удачи!

748
153.953 GOLOS
На Golos с February 2017
Комментарии (2)
Сортировать по:
Сначала старые