Я не являюсь профессиональным разработчиком. Я использую свои навыки как инструмент для своей основной, научной, деятельности, в том смысле, что я не зарабатываю деньги на этом искусстве. В результате все "ремесла" живут во мне только в случае конкретных проектов и не выходят за рамки списка проектов. Более того, Linux был исключен из разработки, используя операционную систему Windows, потому что она более удобна для решения моих задач.
Однако ученые хотят есть, прилично одеваться и заправлять свои автомобили. Поэтому (не так уж редко) я чувствую необходимость работать самостоятельно.
Недавно я столкнулся с задачей, когда компании не хотят писать подобные программы — иначе они бы этого не делали. Немного обратного механизма, немного кодирования, и в целом проекты очень распространены. Однако возник вопрос, связанный с созданием инсталляторов. Клиент хочет получить продукт "ключ в руке", нажимает кнопку "Настройка", нажимает кнопку "Далее" и позволяет программе работать.
Мы никогда не создавали программу установки. Таким образом, этот вопрос был "досконально" ‘Gouge’, включая статью Хабра. Выбор инструментов для этого вида работ очень велик и включает как частные продукты, так и продукты с открытым исходным кодом. Вот список того, что я испытал
-
— Классический тип, достаточно фиксированные частные продукты — частные инструменты с множеством вариантов адаптации графического интерфейса. На сайте говорится, что если вы блогер и написали много хороших слов против этого продукта, есть возможность получить бесплатную лицензию — бесплатный продукт на основе открытого исходного кода. Это мощный, хорошо документированный материал. Время стоит того, и я пока не собираюсь его использовать (мне также не нравится XML). Может быть, когда-нибудь я к нему вернусь. Да, в нем есть добавки visual studio, но это неоспоримое преимущество. — Это проект с открытым исходным кодом, код которого доступен на Githab. Благодаря бесплатности и низкому лимиту входа, я выбрал его как инструмент, который может быстро и эффективно выполнить работу.
Поэтому в этой статье я буду использовать Inno Setup с Inno Script Studio, полезным FrontTend. Это позволяет создать простую программу установки с помощью руководства и изменить настройки через графическую среду. Сначала мне нужен был графический интерфейс для представления продукта, но мы не уделяем ему много внимания — "Linux-мозг" хочет использовать все виды "волшебников" в наши дни (это субъективно, не надо. ‘kick me’). Мы рассмотрим жестокий способ написания скриптов с нуля.
Я считаю, что вы можете легко загрузить и установить программу с официального сайта. Когда вы запустите компилятор Inno Setup, вы увидите следующее окно
Inno Setup сильно наскучивает.
Что это такое; по сути, это простой процессор для серии сценариев, с кнопками для маркировки и редактирования аннуитетов и их запуска. Именно в этом окне вы должны начать вводить текст луча действия. Это определит логику будущего установщика. Не тратьте наше время.
Прежде всего, давайте определим необходимые нам константы
Поскольку эти строки часто появляются в коде сценария, давайте воспользуемся #define dictation и определим их как c.
Тело пучка действия разделено на секции, каждая из которых имеет свои функции. Обязательный модуль installation определяет общие параметры программы инсталляции и деинсталляции.
Обратите особое внимание на параметр AddId (уникальный идентификатор приложения (GUID), используемый для регистрации приложения в реестре Windows). Вместо того чтобы создавать его с нуля, сгенерируйте его, открыв скобки и выбрав Tools->Generate GUID (или используя горячую клавишу Shift + Ctrl + G). Далее укажите название приложения, которое будет установлено в системе, его версию, информацию о разработчике, адрес сайта разработчика, техническую поддержку и обновления.
Путь по умолчанию, предоставляемый программой установки для установки, задается параметром DefaultDirName. Переменная — это путь к файлу программы нужного размера. Параметр DefaultGroupName задает имя группы программ в меню Пуск. Обратите внимание, что указанное выше макроопределение Name используется для указания имени приложения, заключенного в фигурные скобки и решетку.
Пара опций OutputDir и OutputBaseFileName задают каталог, в который записывается скомпилированная "установка", и ее имя (без расширения). Кроме того, опция SetupIconFile указывает, где должна быть получена иконка для test-setup.exe.
Последний параметр в этом разделе задает алгоритм сжатия (LZMA) и указывает, что все файлы сжимаются сразу, а не по одному (SolidCompression). Это ускоряет распаковку множества файлов одного типа.
Хорошая программа установки должна поддерживать несколько языков. Используйте дополнительный раздел Languages, чтобы включить их в пакет. Если этот раздел отсутствует, используется английский язык.
Каждая строка в этом разделе определяет один из языков, используемых во время установки. Синтаксис строки выглядит следующим образом
В качестве разделителя используется двоеточие. Имя параметра говорит само за себя — это "имя" языка, допускаются обычные двухбуквенные сокращения (‘en’, ‘ru’, ‘de’ и т.д.). Параметр MessagesFile указывает компилятору, где взять шаблоны сообщений, которые будут выводиться при установке. Эти шаблоны извлекаются из каталога компилятора InnoSetup, который обновляется директивами компилятора. Для английского языка компилятор извлекает файл Default.isl, а для русского — LanguagesRussian.isl.
Параметр LicenseFile указывает путь к текстовому файлу лицензии на соответствующем языке.
Обычно программа установки просит вас решить, хотите ли вы создать ярлык, например, на рабочем столе. Такие параметры установки определяются в разделе "Задачи" раздела "Параметры".
Здесь name задает имя функции — ‘desktopicom’ — создает иконку на рабочем столе — Description — описание флажка с опциями, отображаемого пользователю. Строительство.
Определяет стандартный текст сообщения, соответствующий языку, выбранному в начале установки. Параметр GroupDescription — это название группы флажков с опциями. Параметр Flags определяет конкретные действия и состояния элемента управления. В данном случае это указывает на то, что флажок Создать ярлык рабочего стола должен быть отключен.
Далее определите, какие файлы необходимо включить в дистрибутив и где их разместить во время установки. Поэтому раздел "Файлы" является обязательным.
- Source — путь к исходным файлам. Все необходимое для проекта MS VS можно найти в каталоге Release проекта MSVS.
- DestDir — каталог установки. Переменная содержит путь, выбранный пользователем в окне программы установки.
- Флаги — различные флаги. В данном примере для исполняемых файлов, если исполняемый файл уже существует в системе, игнорируйте версию программы (ignorevarsion) — для других файлов и каталогов игнорируйте версию и рекурсивно включайте все подкаталоги и исходные файлы с параметром Включить (recursesubdirs ) подкаталоги, если они не существуют (createallsubdirs)
Наконец, из вежливости, опционально укажите компилятору, где разместить значки в меню программы и на рабочем столе.
Здесь мы указываем, что значки для группы меню Пуск и рабочего стола должны быть взяты из раздела Исполняемый. Конечно, иконки должны быть "скомпилированы". В противном случае стандартные значки галереи Windows будут отображаться там, где это необходимо.
Таким образом, кажется, что все готово. Нажмите Ctrl + F9, чтобы попытаться собрать программу установки. Если синтаксических ошибок нет, процесс сборки запускается
InnoSetup создает программу установки
Если сборка прошла успешно, программу установки можно запустить, нажав F9 Если вы работаете с ограниченной учетной записью (как в Windows), вы должны перейти в каталог, указанный в сценарии, и запустить программу установки с правами администратора.
Запустите программу установки с ограниченной учетной записью.
В результате вы обнаружите, что вам хорошо знакомо лицензионное соглашение в окне приветствия во всех окнах мастера установки языка пользователя Windows.
И т.д. Хорошей новостью является то, что стандартный дизайн руководства лаконичен и не имеет излишеств (которые можно добавить при необходимости).
Что мы можем сказать: слушайте! Мы написали нашу первую "подставу" и могли бы быть счастливы, но
Разве вы не заметили, что мы кое-что забыли? Приложение, построенное на C#, не будет работать без встроенного фреймворка, если он отсутствует в системе. Вам необходимо установить соответствующий фреймворк. Для этого необходимо установить соответствующий фреймворк.
- Укажите, как происходит назначение кадров. Здесь есть два варианта. Отправьте его вместе с дистрибутивом или, если требуется, загрузите его через Интернет на целевой компьютер. Сосредоточьтесь на возможности интегрировать фреймворк в дистрибутив. Сам фреймворк, например, версия 4.0, доступен бесплатно от Microsoft.
- Определить наличие или отсутствие контекста на целевой системе. Это требует создания логики для анализа системного реестра.
Значения реестра, которые необходимо проверить, перечислены в официальной документации Microsoft. В этой статье приводится отрывок.
Таблица 1 . Ключи реестра для проверки версии установленного .NETFramework
3.0 | HKLM Software Microsoft NET Framework Setup NDP v3.0 Setup InstallSuccess | 1 |
3.5 | HKLM/Software/Microsoft/ NETFramework Setup/NDP v3.0/Setup/Install | 1 |
4.0 Профиль клиента | HKLM/Software/Software/Microsoft/NETFramework-Setup/NDPv4.0/ Client/Installation | 1 |
4.0 полный профиль | HKLM/Software/Software/Microsoft/NETFramework-Setup/NDPv4.0/full/installation | 1 |
4.5 | HKLM / Software / Microsoft / NET Framework Setup / NDP v4.0 Full Release | Издание №. |
Inno Setup имеет модуль Code для реализации пользовательской логики программы установки. В этом разделе вы размещаете код функций, реализующих логику на языке Паскаль. Поместите содержимое этого раздела в отдельный файл dotnet.pas и включите его в основной сценарий с помощью #include.
Хотя код можно ввести и непосредственно в разделе Код. Обратите внимание, что в этом разделе используется синтаксис языка Паскаль и что комментарии начинаются с ‘//’, а не с двоеточия, как в теле сценария.
Давайте напишем функцию для определения того, имеет ли система правильную версию .
Несмотря на обширный код, логика работы проста. В зависимости от значения параметра version функция RegQueryDWordValue (.) считывает значение соответствующего ключа реестра и сравнивает его с требуемым значением (см. таблицу 1). Для версии 4.5 в параметре release передается дополнительный номер версии.
Поскольку разрабатываемое приложение требует определенной версии .NET, напишите функцию-обертку для ее поиска на целевой системе.
Используйте функцию обратного вызова InitializeSetup () для проверки наличия ящика и информирования пользователя о действии до начала развертывания
В разделе Files добавьте опции, указывающие, куда компилятор загружает дистрибутив .NET, куда программа установки его распаковывает, и условия, при которых он распаковывается.
Флаг указывает, что дистрибутив .NET должен быть разархивирован после установки (deleteafterinstall). Условия, при которых требуется декомпрессия, задаются опцией check. При использовании этой опции вызывается функция IsRequiredDotNetDetected (), и если возвращается false, выполняется декомпрессия.
Поскольку сама установка может быть выполнена после установки основной программы, в сценарий можно включить раздел Выполнить, чтобы указать, что должно быть выполнено после завершения установки.
Обратите внимание, что сначала вы закрываете раздел Code, указывая имя раздела Run, а затем пишете комментарий, начинающийся с двоеточия. Это необходимо потому, что синтаксис раздела Code отличается от синтаксиса основного сценария. В противном случае во время компиляции возникнет синтаксическая ошибка.
В этом разделе указывается путь к программе установки фреймворка — предварительно извлеченного во временный каталог (переменная содержит путь к временному каталогу) — указываются параметры командной строки. Параметр Проверка определяет условия для начала установки. Это означает, что необходимый фреймворк не установлен на целевой системе. Параметр StatusMsg определяет сообщение, которое пользователь увидит в окне программы установки.
Перекомпилируйте проект. Теперь, при запуске на "чистой" системе, программа установки выдаст сообщение
NET Framework 4.0 требуется и сообщает, что он будет установлен.
После распаковки вы увидите, что дистрибутив .NET извлечен во временную папку.
Затем процесс переходит к установке .NET
Microsoft просит вас принять лицензию .
NET установка.
Затем рабочее приложение C# устанавливается во "взрослый" раздел.
Я не профессионал и могу ошибаться во многом. Пожалуйста, поймите это. Эта статья написана непрофессионалом для непрофессионалов. Его основное назначение — задавать векторы поиска при решении задачи создания инсталлятора. По другим вопросам обращайтесь к документации, поставляемой вместе с InnoSetup.
Код для этого примера можно найти в моем репозитории Github. Красноватый текст" в комментарии вызван несоответствием кодировки кириллицы. Я всегда пишу комментарии на английском языке для себя, но чтобы лучше понять код, я допустил эту ошибку. Простите за этот бред, так как при съемке против ветра все хорошо видно.
В остальном, "как это делается" стоит того, так что спасибо за внимание.