Как сделать установщик для программы

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. «Кракозябры» в комментах вызваны несовпадением кирилических кодировок. Для себя всегда пишу английские комментарии, но для лучшего понимания кода допустил этот ляп. При скачивании в винде всё просматривается замечательно, так что прошу простить мне и эту несуразность.

В остальном, полагаю «хаутушка» вышла достойной и благодарю за уделенное мне внимание.

Источник

Создание файла Установщика приложений в Visual Studio

Местоположение файла установщика приложений

Настройка проекта для подходящей версии Windows

Можно настроить свойство TargetPlatformMinVersion при создании проекта или изменить его позже в свойствах проекта.

файл установщика приложения создается только при TargetPlatformMinVersion Windows 10 версии 1803 или более поздней.

Создание пакетов

Чтобы распространить приложение с помощью загрузки неопубликованных приложений, необходимо создать пакет приложения (Appx/. msix) или набор приложений (. appxbundle/. msixbundle) и опубликовать его в общем расположении.

Для этого используйте мастер создания пакетов приложения в Visual Studio и выполните следующие шаги.

Щелкните проект правой кнопкой мыши и выберите магазинсоздать пакеты приложений.

Как сделать установщик для программы. Смотреть фото Как сделать установщик для программы. Смотреть картинку Как сделать установщик для программы. Картинка про Как сделать установщик для программы. Фото Как сделать установщик для программы

Откроется мастер Создание пакетов приложения.

Как сделать установщик для программы. Смотреть фото Как сделать установщик для программы. Смотреть картинку Как сделать установщик для программы. Картинка про Как сделать установщик для программы. Фото Как сделать установщик для программы

Включить автоматические обновления включается, только если для проекта указана подходящая версия Windows 10.

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

Настройте любые дополнительные сведения, включая номер версии и выходное расположение пакета.

Как сделать установщик для программы. Смотреть фото Как сделать установщик для программы. Смотреть картинку Как сделать установщик для программы. Картинка про Как сделать установщик для программы. Фото Как сделать установщик для программы

Если установлен флажок Включить автоматические обновления в шаге 2, отобразится диалоговое окно Настройка параметров обновления. Здесь можно указать URL-адрес установки и периодичность проверки обновлений.

Как сделать установщик для программы. Смотреть фото Как сделать установщик для программы. Смотреть картинку Как сделать установщик для программы. Картинка про Как сделать установщик для программы. Фото Как сделать установщик для программы

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

Публикация пакетов

Чтобы сделать приложение доступным, необходимо опубликовать созданные файлы в указанном местоположении:

Публикация в общие папки (UNC)

Если требуется опубликовать пакеты с помощью общих папок UNC, укажите один и тот же путь для выходной папки пакета приложения и URL-адреса установки (см. подробные сведения в шаге 6). Мастер создаст файлы в правильном местоположении, а пользователи будут получать приложение и будущие обновления к нему по тому же пути.

Публикация в местоположении в Интернете (HTTP)

Чтобы выполнить публикацию в местоположении в Интернете, требуется доступ, позволяющий публиковать содержимое на веб-сервере. Убедитесь, что окончательный URL-адрес соответствует URL-адресу установки, определенному в мастере (см. подробные сведения в шаге 6). Как правило, для отправки файлов используется протокол FTP или SFTP, однако существуют и другие методы публикации, например MSDeploy, SSH или хранилище BLOB-объектов (в зависимости от вашего интернет-провайдера).

Источник

Мануал «Создание инсталлятора при помощи 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.

Как сделать установщик для программы. Смотреть фото Как сделать установщик для программы. Смотреть картинку Как сделать установщик для программы. Картинка про Как сделать установщик для программы. Фото Как сделать установщик для программы

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

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

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

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

Скрипт 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 констант:

Заключение

Как сделать установщик для программы. Смотреть фото Как сделать установщик для программы. Смотреть картинку Как сделать установщик для программы. Картинка про Как сделать установщик для программы. Фото Как сделать установщик для программы

Источник

Добавить комментарий

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