Inno setup копирование файлов

Обновлено: 06.07.2024

На лекции осваиваются приемы разработки инсталляционного файла нашей программы.

Зачем нужны инсталляторы

Наш курс подходит к концу. Мы написали множество проектов, научились делать справку и подключать её к программе, но хотелось бы ещё какие-то из проектов опубликовать в Сети! А что для этого требуется? Установочный файл . Кстати, если вы будете писать программы на заказ, то создание инсталлятора почти наверняка будет обязательным условием проекта.

Казалось бы, можно обойтись каким-нибудь популярным архиватором вроде WinRAR, сделать на нем самораспаковывающийся SFX-архив, прописать, какой файл программы куда должен быть распакован. Однако так вы получите лишь примитивный инсталлятор, в котором пользователю не предоставляется никаких возможностей выбора, а это плохо - даже если пользователь при установке программ обычно использует все настройки " по умолчанию", нажимая только кнопки "Далее" или "Next", ему нравится осознавать, что от него что-то зависит, что он имеет возможность выбора.

Предположим, ваш проект достаточно сложен, содержит десятки файлов. Вы желаете, чтобы пользователь имел выбор способа установки вашей программы: куда устанавливать, нужно ли создавать ярлыки на рабочем столе и в панели быстрого запуска? Устанавливать ли полную версию, выборочную или минимальную? Регистрировать ли программу в реестре или создать INI- файл ? Кроме того, пользователь может когда-нибудь захотеть эту программу удалить со своего ПК, а значит, нужно предусмотреть и обратный процесс - деинсталляцию. Все эти операции сделать в обычном архиваторе будет невозможно, или, по крайней мере, чрезвычайно сложно. Зато эти же операции легко создаются в специальных программах-инсталляторах, которые входят в группу утилит программиста. О них и будем говорить на этой лекции.

Обзор инсталляторов

Некоторые среды разработки программ имеют в своем составе инсталляторы. Так, в состав Delphi входит бесплатный инсталлятор Install Shield Express, который, кстати, можно скачать с сайта производителя. Считается, что если в состав IDE входит инсталлятор, то для создания инсталляционного файла (или CD) лучше пользоваться им. Install Shield Express, например, имеет очень удобную функцию включения в инсталляционный пакет "движка" баз данных BDE , который, впрочем, уже устарел, и теперь практически не используется. Ничего другого выдающегося у Install Shield Express не наблюдается, поэтому даже Delphi-программисты предпочитают более "продвинутые" инсталляторы.

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

Какие ещё инсталляторы существуют? Их множество: Setup Factory , Visual Studio Installer, Nullsoft Install System , Smart Install Maker и много-много других.

Особо хотелось бы выделить один из самых популярных бесплатных инсталляторов, обладающих широкими возможностями - Inno Setup . Это система создания инсталляторов для Windows -программ. Inno Setup появился в 1997 году и является не просто бесплатным, но и открытым проектом ( Open Source), превосходит многие коммерческие установщики по функциональности и стабильности. Мы будем рассматривать создание инсталляторов на основе Inno Setup .

Следует заметить, что при написании курса рассматривалась версия Inno Setup 5.5.4, а они достаточно часто обновляются. Так что на сайте производителя, возможно, вы найдете более свежую версию.

Файл лицензии

Обычно при установке какой либо программы, пользователю вначале предлагается прочитать и принять лицензионное соглашение (лицензию) программы. Пользователь читает (или чаще, не читает) лицензию, устанавливает радиокнопку с надписью "Я принимаю условия" (или что-то аналогичное), после чего становится доступной кнопка "Далее". Наверное, наш инсталлятор должен также выводить какую то лицензию? Где её взять, или как её сделать, не будучи юристом?

В процессе установки пользователь имеет возможность установить количество некоторых экземпляров службы (Service1-ServiceN). Все различия между этими сервисами - содержание конфигурационных файлов (на самом деле в /Product_Root/run есть только один исполняемый файл, который вызывается с разными параметрами командной строки).Конфигурационные файлы расположены в ProductRoot/ServiceX/conf.

Структура папок выглядит следующим образом :

В ProductRoot/ServiceX/conf находится, например, service.properties файл с таким содержимым:

Также в /Product_Root/bin должны присутствовать скрипты для каждого запуска сервиса: Например :

Структура файла скрипта такова:

Все значения (например, <%SERVICE_NAME%>,<%PORT%> и т.д.) устанавливаются Пользователем в процессе настройки для каждой службы. Количество услуг также устанавливается пользователем и может варьироваться от 1 (по умолчанию) до 20-30.

В случае разового обслуживания-нет никаких проблем.

Файлы копируются, каталоги создаются с помощью

После того, как в ssPostInstall шаг подстановочные знаки замены, проведенные в скопированных файлов.

можно ли с помощью Inno Setup + ISTool сделать то же самое в случае количества сервисов?

E.g. что-то вроде этого :

где i-это собственно номер конфигурации. I.e. можно ли использовать информацию, полученную от пользователя в процессе установки в разделах [File], [Dirs] и т.д. для многократного копирования одних и тех же файлов в разные каталоги? Для копирования одного файла в количестве файлов с разными именами, заданными Пользователем в процессе установки?

Или я просто иду не в том направлении?

1 ответ

Я хотел бы добавить небольшую форму, которая будет заполнена пользователем во время установки программы, используя Inno Setup. Затем форма должна быть отправлена мне по электронной почте и предварительно определенный адрес email. Форма нуждается в нескольких полях, таких как; имя пользователя.

Как использовать копирование скрытых внешних файлов в Inno Setup? Не для того, чтобы сделать файл скрытым, а для работы со скрытыми файлами. Потому что на данный момент: скрытые файлы игнорируются Кто-нибудь поможет? Спасибо ) [Files] Source: \folder\*; DestDir: ; \ Flags.

Итак, в настоящее время я сделал это таким образом. Комментарии приветствуются. Для создания и копирования всех файлов:

Для отдельных файлов это выглядит примерно одинаково.

Похожие вопросы:

Я использую Inno Setup с InnoTools Downloader, и после завершения загрузки я хочу скопировать загруженный файл в выбранный каталог. if CurStep=ssPostInstall then begin FileCopy('Test.exe'.

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

В Inno Setup FAQ приведен пример того, как назначать типы файлов моему программному обеспечению. Работа с реестром-это не проблема. Но как я могу предоставить пользователю выбор, какие типы файлов.

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

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

Это аналогичный вопрос, чтобы найти путь к приложению и скопировать файл в этот каталог в Inno Setup Я хотел бы установить файл в папку MATLAB пользователя в Inno Setup. Но в зависимости от версии.

Я хочу обновить значение AppVersion в разделе [Setup] во время компиляции из файла config.xml путем разбора тега Version . Config.xml файл имеет следующую конфигурацию: <?xml version=1.0.

Я хотел бы добавить проверку в Inno Setup, чтобы убедиться, что моя версия файла exe всегда совпадает с версией установщика. Есть ли способ сделать это с помощью препроцессора? Таким образом, идея.

Мне нужно установить набор скрытых файлов, охватывающих несколько папок,на компьютере конечных пользователей, используя программу установки, созданную с помощью программы установки Inno. Я упомянул.

У меня есть сценарий установки Inno, чтобы превратить мое приложение в exe. Когда я компилирую код с помощью Inno Setup версии 6, размер выходного файла составляет 110 МБ (как показано в столбце.

Это мощное средство для создания установочных пакетов [дистрибутивов] программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки. Можно легко самим создавать диалоги, используя спец. дизайнер. И всё это абсолютно бесплатно! По сравнению с NullSoft [основной конкурент на бесплатной ниве] мне albel понравилась более интуитивно-понятная структура скрипта, простота в настройке.

Последний релиз: 5.1. 11 [1 Марта 2007 года]
История версий | скачать

Распаковщик установок, сделанных с помощью Inno Setup. При распаковке извлекаются ресурсы и скрипт установки [немного усечённый]. Возможно подключение к TotalCommander или FAR с помощью MultiArc плагинов.

Поддерживает распаковку инсталляторов, сделанных с помощью Inno Setup начиная с версии 3.0.0-beta по 5.1.10

Удобная оболочка для облегчения написания скриптов установки для INNO SETUP. Обладает некоторыми полезными функциями, которых нет ни у самого INNO, ни у ISTool.

Новое название проекта на сайте, похоже произошла замена ScriptMaker на:

но при компиляции получим обшибку, шо нет реального файла для выполнения
можно тупо перед end прописать
Result:=rundll32.exe
в результате выполнится нужный мне код, а затем без пользы запуститься rundll32.exe
но это некрасиво и неправильно както

2 NightW0lf

Да я пошутил. В принципе, если найдёшь в коде чё-нить интерестное, то можешь отдать куски Kindly.

Кста. Вот пример написания выбора установки (например - русской версии игрушки) через RadioButton:

[Code]
var
RussianBtn, EnglishBtn: TRadioButton;
ResultCode: Boolean;

procedure InitializeWizard();
begin
CreateTheWizardPages;
end;

Функция "English" здесь дана так просто, для виду. Типа если выберешь "Russian", то устанавливаются файлы русификатора, а если нет, то просто ставятся основные файлы. Короче, разобирётесь.

В скрипте есть краткое описание, но хочу обратить внимание, что в функциях CopyDir и MoveDir есть зависимость от того, указана ли fromDir со слешем или без. В первом случае в toDir будет скопировано/перемещено только содержимое fromDir со всеми файлами у подпапками; во втором, в toDir будет скопирована/перемещена сама fromDir со всеми файлами и подпапками.

DelDir может удалять совсем или в корзину (в зависимости от флага toRecycle).

В случае, если кто-то удалит папку Windows, претензии не принимаются.

p.s. молодец, склонировал до последней капли - хоть бы что-нибудь свое придумал


В данном случае используется английский и русский языки, как мы видим выше. Имя (Name) мы можем менять. Указанный путь "compiler:Default.isl" - означает, что язык по умолчанию (Английский) находится в папке с компилятором. По умолчанию это C:\Program Files\Inno Setup 5, а русский язык (Russian.isl) находится в подпапке Languages там-же. Давайте откроем файл с английским языком - Default.isl с помощью редактора. Я использую Notepad++.



Название же языка указано символами юникода в шестнадцатеричном виде: LanguageName=<0420><0443><0441><0441><043A><0438><0439>. Это сделано в целях правильного использования и недопущения ошибок.

Можно отредактировать эти файлы прямо в папке с компилятором, то есть изменить стандартные значения. Можно скопировать эти файлы в папку с проектом и переименовать Default.isl в English.isl для собственного удобства. Я так и сделал. То есть эти файлы у меня будут использованы только в этом проекте, для других проектов буду использовать свои. Откроем проект и пропишем значения в секцию [Languages]:


Также хочу обратить ваше внимание на добавление в секцию [Languages] дополнительных возможностей. Например, мы можем указать там путь к текстовым файлам (отображаемым до и после установки) и лицензионному соглашению, которые будут использоваться только для выбранного языка:

InfoBeforeFile: "D:\Program\Do.txt"; InfoAfterFile: "D:\Program\Posle.txt"; LicenseFile: "D:\Program\License.txt"

InfoBeforeFile: "D:\Program\DoRus.txt"; InfoAfterFile: "D:\Program\PosleRus.txt"; LicenseFile: "D:\Program\LicenseRus.txt"

В программе:


InfoBeforeFile - текст из этого файла отображается до установки программы.

InfoAfterFile - текст из этого файла отображается после установки программы.

LicenseFile - файл с лицензионным соглашением.

Я данный функционал в проекте использовать не буду, просто ввёл в курс, что можно так сделать. Файлы можно использовать в формате .txt или .rtf.

Теперь давайте придумаем значения для текста вчерашнего проекта. На русском:

RusHelp=Русская справка для программы

EngHelp=Английская справка для программы

FullInstallation=Полная установка программы

CustomInstallation=Выборочная установка программы

Для английского языка:

RusHelp=Russian Help Files

EngHelp=English Help Files

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

Теперь создаём секцию [CustomMessages] под секцией [Languages]. Перед названием значения константы пишем префикс - имя языка из секции [Languages] с точкой после названия. На примере одной строки (чтобы не загромождать пост):

И на английском:


На примере выбора типа установки:

[Types]

Name: "custom"; Description: ""; Flags: iscustom

Скриншот:


[Types]

Name: "custom"; Description: ""; Flags: iscustom

[Components]

Name: "main"; Description: ""; Types: full custom; Flags: fixed

Name: "Component1"; Description: ""; Types: full custom

Name: "Russian"; Description: ""; Types: full custom

Name: "Russian\Component3"; Description: ""; Types: full custom

Name: "Russian\Component5"; Description: ""; Types: full custom

Name: "English"; Description: ""; Types: full custom

Name: "English\Component2"; Description: ""; Types: full custom

Name: "English\Component4"; Description: ""; Types: full custom

В программе:


Также мы можем создать секцию [LangOptions] в скрипте и указать нужные нам значения (шрифт, размер и т.п) для каждого языка. Если требуется, конечно. Также перед названием значения пишем префикс - имя языка и точку. Например:

[LangOptions]

russian.DialogFontName= MS Shell Dlg

В программе:


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

[Messages]


То текст на кнопках будет изменён на использованный в секции. Всё достаточно просто.

Давайте скомпилируем наш скрипт.


Проверим русский язык:


На буржуйском:


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

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