Как сделать дистрибутив установленной программы
Создание установочного дистрибутива программы
Если Вы решили заняться распространением своих программ, то без установочного дистрибутива не обойтись. В настоящее время практически все программы имеют инсталлятор, обычно он называется Setup.exe. В этой статье мы рассмотрим на примере, как собрать инсталлятор для приложения Access и разберем некоторые особенности, которые необходимо при этом знать.
В пакет ODE входит «создатель дистрибутивов» который включает в диистибутив Вашу MDB и Run-time версию. Все библиотеки необходимые для создания Run-time уже есть в полной версии Аccess (даже без ODE). Но тут есть одно НО (это для тех, кого беспокоит лицензионная «читота»):
Если Вы его не купите официально, то у клиентов все равно не будет права использовать даже Run-time версию.
Может возникнуть такая мысль: А что, если узнать какие файлы нужны Access для работы и включить их в установочный дистрибутив? Можно, но это не решает проблемы с лицензией. К тому же придется создавать достаточно сложную программу установки с проверкой имеющихся компонентов и установкой/регистрацией отсутсвующих. Причем в последнем случае можно при неумелых действиях даже разрушить систему.
«C:\Program Files\Microsoft Office\Office10\MSACCESS.EXE» «D: \Базы\Моя База.mdb»/runtime
а в поле «Рабочая папка»:
Так же начиная с версии 2.0.6 Inno Setup включает в себя полную поддержку для MBCS. В более ранние версии последнее свойство не входит. А вот Web-инсталяцию не поддерживает.
Комментарии начинаются с точки с запятой в начале строки и могут быть помещены в любое место скрипта. Коментарии блоком не возможны, как впрочем и вынесение коментария в середину строки. Последнее допускается компилятором, но впоследтвие, при выполнение, ведет к ошибке.
Порядок секций не имеет значения. Все они (за исключением [Setup] ) являются произвольными. Ключевому слову значение присваивается при помощи знака равенства (=).
Рассмотрим в кратце основные секции:
Inno Setup работает внутри скрипта с различными предопределеными константами, которые, как правило, содержат пути (path). Способ написания: <имя>. Некоторые константы, такие как
Вот основные константы Inno Setup:
Итак, рассмотрим задачи, которые нужно решить (определим только минимальные). Наш инсталлятор должен сделать следующее:
Это необходимый минимум. Но, разумеется, это далеко не все возможности Inno Setup. Ведь не зря его используют многие разработчики. Но в данной статье я ограничусь только этим, желающие глубже изучить возможности программы могут обратиться к справочной системе. В Интернет есть множество ссылок как на программу, так и на переводы справки. Например, Inno Setup 5.1.6. и справку к нему Вы можете скачать здесь… Английский сайт программы http://www.innosetup.com
Для начала попробуйте поэкспериментировать, создавая инсталлятор при помощи мастера, а затем изучая структуру полученного скрипта. В принципе, я думаю нет нужды подробно описывать, что где нажимать. Inno Setup настолько прост в освоении, что без проблем изучается, что называется «методом научного тыка». Вот например скрипт инсталятора, который делает определенные ранее задачи (все файлы дистрибутива находятся в каталоге D:\Setup.)
[Setup]
AppName=Моя программа
AppVerName=Моя программа. Версия 1.0.
AppPublisher=MyProgram, Inc.
AppPublisherURL=http://MyMySoft.ru/
AppSupportURL=http://MyMySoft.ru/
AppUpdatesURL=http://MyMySoft.ru/
DefaultDirName=
DisableDirPage=no
DefaultGroupName=Моя программа
DisableProgramGroupPage=yes
LicenseFile=D:\Setup\license.txt
InfoAfterFile=D:\Setup\readme.txt
AlwaysCreateUninstallIcon=yes
[Tasks]
Name: «desktopicon»; Description: «Создать ярлык на &Рабочем столе»; GroupDescription: «Дополнительные ярлыки:»
[Files]
Source: «D:\Setup\Сервер.mdb»; DestDir: «
Source: «D:\Setup\license.txt»; DestDir: «
Source: «D:\Setup\readme.txt»; DestDir: «
Source: «D:\Setup\Log.JPG»; DestDir: «
Source: «D:\Setup\Log.ico»; DestDir: «
Source: «D:\Setup\База.mdb»; DestDir: «
[INI]
Filename: «
[Icons]
Name: «
Name: «
Name: «
Пример, как это все работает, Вы можете скачать ниже.
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. «Кракозябры» в комментах вызваны несовпадением кирилических кодировок. Для себя всегда пишу английские комментарии, но для лучшего понимания кода допустил этот ляп. При скачивании в винде всё просматривается замечательно, так что прошу простить мне и эту несуразность.
В остальном, полагаю «хаутушка» вышла достойной и благодарю за уделенное мне внимание.
Как установить Windows 10
Создание дистрибутива Windows 10 с предустановленным программным обеспечением
Создание дистрибутива Windows 10 с предустановленным программным обеспечением
Загружаем виртуальную машину с ISO-образа Windows 10 и как обычно устанавливаем ОС на виртуалку.
Операционная система переходит в режим аудита.
Можете нажать на крестик и закрыть данное окно (после установки всех необходимых программ мы откроем его снова). В режиме аудита вы можете устанавливать и удалять программы, перезагружаться и завершать работу компьютера, одним словом экспериментируйте с Windows как хотите.
Устанавливаем все те программы, которые мы хотим иметь в дистрибутиве Win 10.
Программы устанавливаем, но не запускаем, нужно чтобы они не прописались в папке Appdata, которой не будет после sysprep.
После установки софта запускаем командную строку от имени администратора и вводим команду:
Запускается утилита «sysprep»
В появившемся окне с параметрами выставляем всё так, как на скришноте
Перевод системы в режим (OOBE).
Windows 10 подготавливается утилитой «sysprep» несколько минут и затем виртуальная машина выключается.
Опять загружаем виртуальную машину с ISO-образа Windows 10.
В начальном окне установки Windows 10 жмём клавиатурное сочетание «Shift+F10»,
открывается командная строка Среды предустановки Windows PE.
На данном этапе подсоедините USB- флешку к вашему компьютеру.
в командной строке вводим команды:
lis vol (данной командой выводим список разделов жёсткого диска, видим, что разделу с установленной Windows 10 присвоена буква диска C:, а USB-флешке буква (F:).
exit (выходим из DiskPart)
вводим следующую команду, которая произведёт захват диска (C:) с установленной Windows 10 в файл-образ формата ESD и сохранит его на USB-флешке (буква диска (F:).
Dism /Capture-Image /ImageFile:F:\install.esd /CaptureDir:C:\ /Name:Windows /compress:max
install.esd: — это название будущего ESD-образа диска (C:) с Windows 10.
F :\ — место сохранения ESD-образа.
C:\ — раздел с установленной Windows 10.
сжатие /compress:maximum (максимальное сжатие)
Выключаем виртуальную машину.
Создание дистрибутива Windows 10
Compress:recovery
Собираем ISO-образ Windows 10 с новым файлом install.esd
открываем его (подсоединяем к виртуальному дисководу) и копируем его содержимое.
Затем создаём папку на флешке (K:) и называем её 10.
Вставляем в неё скопированное содержимое ISO-образа Windows 10.
После того, как файлы cкопировались, заходим на диск (K:) и копируем файл install.esd.
Заходим в папку K:\10\sources, щёлкаем правой мышью и выбираем Вставить.
Выбираем Заменить файл в папке назначения.
Оригинальный файл install.esd из дистрибутива Windows 10 заменён нашим файлом install.esd, содержащим программное обеспечение.
Комплект средств для развертывания Windows (Windows ADK)
Нам осталось превратить папку 10 с файлами Windows 10 в установочный ISO-дистрибутив с предустановленным программным обеспечением.
Если Вы опытный пользователь, то наверняка на вашем компьютере установлен Комплект средств для развертывания Windows (Windows ADK), если нет, то скачайте его по ссылке и установите.
После установки запускаем среду средств развёртывания и работы с образами.
Oscdimg /u2 /m /bootdata:2#p0,e,bK:\10\boot\Etfsboot.com#pef,e,bK:\10\efi\microsoft\boot\Efisys.bin K:\10 K:\Windows.iso