Как создать годный инсталлятор ч.2


Поделиться статьёй с друзьями:

It4you.su_firs_image_Inno_setup_manual_2

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

Напомню, что делаем мы сие действо с помощью программы Inno Setup, о том, как сделать простой инсталлятор ты можешь прочитать в первой части, там же скачать программу. Переходи по ссылке. Тыц.

О чём же пойдёт речь в этой части? Допустим твое творение поддерживает несколько языков интерфейса, или есть две версии программы, легкая и полная. Или как в моём случае установщик вообще распаковывает сразу несколько программ, а пользователь выбирает какую именно программу установить из списка.

Итак, у нас определилось несколько видов установки «Полная установка» и «Выборочная установка». Как добиться этого в твоём установщике я и расскажу в этом разделе.

Нам поможет две секции скрипта Inno Setup.

Секция [Types] —  Тип установки.

 

Name: "full"; Description: "Полная установка";
Name: "custom"; Description: "Выборочная установка"; Flags: iscustom

 

NameИмя, будет использоваться ниже.

Descriptionописание, будет отображаться на против флажка.

FlagsФлаги. Iscustom – говорит компилятору о том что этот тип установки является «Выборочным». Обязателен, для раздела «Выборочная установка».

Секция [Components]Компоненты установки. Как раз то из чего пользователь будет выбирать. Для примера дадим пользователю возможность выбрать разрядность приложения (x86 или х64). А также спросим нужда ли документация.

 

Name: bitapplications; Description: "Разрядность приложения"; Types: full; Flags:disablenouninstallwarning exclusive;
Name: bitapplications\86; Description: "x86"; Types: full; Flags:disablenouninstallwarning  exclusive; 
Name: bitapplications\64; Description: "x64"; Types: full ; Flags:disablenouninstallwarning exclusive;
Name: doc; Description: "Документация"; Types: full; Flags:disablenouninstallwarning
Name: doc\user; Description: "Инструкция пользователя"; Types: full; Flags:disablenouninstallwarning
Name: doc\admin; Description: "Инструкция администратора"; Types: full; Flags:disablenouninstallwarning

 

NameИмя компонента. Здесь то ли не большой баг, то ли бубен требуется, в общем имя указывайте только прописными латинскими буквами без дефисов, подчёркиваний т.д. Иначе компилятор начинает вести себя не всегда правильно. Сначала идёт верхний уровень раздела “bitapplications” затем через знак “\” указывается имя подраздела “86”.

Descriptionописание, будет отображаться на против флажка.

TypesУказывается к какому типу относится компонент. В моём случае это только «Full», custom не указывается. К примеру, если у меня были бы ещё типы Lite (в секции [Types]) с Description «Толька основные компоненты», то в Types я бы указал Lite, и при выборе пользователем пункта «Толька основные компоненты», автоматически отметились бы компоненты, помеченные как Lite.

FlagsФлаги. Ты наверное заметил что везде присутствует флаг «disablenouninstallwarning», он нужен только для моей задачи, необходимо что бы при снятии галочки приложение автоматически удаляло приложение. Если этот флаг отсутствует, то при снятии галочки и нажатии кнопки «Далее», выскочит окно, которое предупреждает пользователя что-то что он снял галочку вовсе не означает что приложение будет удалено. ExclusiveПомечает пункт как RadioButton (кругляшек). Из всех компонентов, помеченных этим флагом выбрать можно будет только один.

Вот так будет выглядеть окно инсталлятора:

it4you.su_Inno_setup_11

После того как тут всё настроил не забудь в разделе [Files] добавить новые файлы, также добавь к каждому файлу параметр «Components» с именем компонента, который задавался только что.

 

Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: bitapplications\86
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg-x64.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: bitapplications\64

 

Не забудь прописать ярлыки:

 

Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\MyProg.exe"; WorkingDir: {app}; Tasks: desktopicon; Components: bitapplications\86
Name: "{userstartup}\{#MyAppName}"; Filename: {app}\MyProg.exe; WorkingDir: {app}; Tasks: AutoStart; Components: bitapplications\86
Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\MyProg-x64.exe"; WorkingDir: {app}; Tasks: desktopicon; Components: bitapplications\64
Name: "{userstartup}\{#MyAppName}"; Filename: {app}\MyProg-x64.exe; WorkingDir: {app}; Tasks: AutoStart; Components: bitapplications\64

 

Деинсталляция при снятии галочки

Галочки то снимаются, но удаление компонента не происходит. Для того что бы всё заработало как положено, необходимо добавить секцию [InstallDelete] удалить что-либо во время установки, точнее до непосредственного начала распаковки.

 

Type: files; Name: "{app}\MyProg.exe"; Components: not bitapplications\86;
Type: files; Name: "{app}\MyProg-x64.exe"; Components: not bitapplications\64;

 

Type – удалять директории, файлы или и то и другое. Files – файлы, filesandordirs – и файлы и директории.

Name – Как и всегда имя файла или директории, с полным путём.

Components – помнишь что наименования компонентов возвращают булевское значение, если выделен компонент то возвращается true если не выделен то false? Так вот ставлю not true т.е. если не выделен, то выполнить данную инструкцию.

Что в итоге. Пользователь ставит 64 –х разрядную версию ПО, а у него 32 – х разрядная версия ОС. Тогда от снова запускает установщик выделяет нужную версию, и 64-х разрядная удаляется, а 32-х устанавливается. Также стоит позаботиться об удалении ярлыков.

 

Type: files; Name: "{userstartup}\{#MyAppName}\MyProg-x64.lnk"; Components: not bitapplications\64;
Type: files; Name: "{userdesktop}\{#MyAppName}\MyProg-x64.lnk"; Components: not bitapplications\64;
Type: files; Name: "{userstartup}\{#MyAppName}\MyProg.lnk"; Components: not bitapplications\86;
Type: files; Name: "{userdesktop}\{#MyAppName}\MyProg.lnk"; Components: not bitapplications\86;

 

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

До встречи на страницах блога, удачи!

 

 

P.S. Оцени статью и оставь комментарий, что бы помочь принять решения тратить ли на сей шедевр время другим читателям блога. Не упусти возможности поставить плюсик к карме.

 

 

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *