Создание дистрибутивов с помощью InstallShield Express. Создание дистрибутива приложения:мастер установки. Создание загрузочной флешки

Рано или поздно каждый пользователь Линукса задумывается над созданием собственного дистрибутива. Некоторые аргументируют это тем, что можно «все настроить под себя». Другие сетуют на то, что среди уже представленных дистрибутивов в Ветке нет идеального. А у них, якобы, есть суперконцептуальные идеи для собственной системы. Зачем я всю эту психологию затеял? Для того, чтобы сразу перекрыть кислород играющимся с Линуксом новичкам, которым делать нечего. Если уж задумались над созданием ОС, думайте до конца. Итак,

Я хочу создать ОС на базе Linux.
Сразу предупреждаю: был бы XVIII век, всех тех, кто для основы своей будущей системы выбирает другой развитый дистрибутив (и, не дай Бог, популярный...) ждала бы виселица. Пост именно про создание системы с нуля, а значит, всякие Slax и Linux Mint мы трогать не будем.

Шаг 1. Выбор носителя
Вариантов немного: либо ваша ОС запускается с LiveCD, либо с жесткого диска, либо с флеш-устройства. Сразу оговорюсь: не скажу в посте ни слова про жесткий диск, потому что гораздо удобнее создавать гибкий дистрибутив из серии «все свое ношу с собой», либо залоченный дистрибутив на оптическом диске. Если вы научитесь создавать LiveCD или LiveUSB систему, с установкой на жесткий диск проблем не будет.

На всякий случай, приготовьте чистую флешку, CD-диск, и установите, наконец, Virtualbox.

Шаг 2. Компиляция ядра
По поводу выхода третьего ядра Linux, этот шаг воодушевляет на дальнейшие разработки… Итак, нам нужны исходники ядра. Каждый пользователь знает, что их можно достать на сайте kernel.org. Ни в коем случае, слышите?, никогда не прикручивайте к своей системе постороннее ядро, скомпилированное не вами!

Поскольку лень моя зашкаливала, я создал папку /linuxkernel и распаковал туда архив с исходниками. Залогинившись под рутом, я сделал следующее:

Cd /linuxkernel
make menuconfig

В принципе, ядро можно конфигурировать тремя способами: make config (диалоговая конфигурация), make menuconfig (псевдографическая конфигурация через ncurses), а также make xconfig (графическая конфигурация). Суть в том, что make config испортит вам настроение надолго, т.к. он задаст все возможные вопросы по всем аспектам всех тем. Проблема с make xconfig встречается не у всех, но вот у меня встречалась и встречается. Если приспичило сделать через X, разбирайтесь сами. Оптимальный вариант - make menuconfig. Эта штука откроет вам псевдографический интерфейс, через который вы сможете настроить ядро на свой лад. Штука требует библиотеки ncurses, которая легко устанавливается.

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

Однако, направить вас все же придется. Перейдите по адресу File Systems ---> и поставьте необходимые звездочки. Буква M означает, что поддержка того или иного драйвера осуществляется с помощью подключения к ядру внешнего модуля (ненавижу их!). Нам понадобится также поддержка isofs, для чтения дисков. File Systems ---> CD-ROM/DVD Filesystems ---> ISO 9660 CDROM file system support. Можно еще поддержать древнедосовские системы.

Чмошные разработчики Mandriva забыли разрешить File systems ---> DOS/FAT/NT Filesystems ---> NTFS write support, и на одном из их дистрибутивов я мучился с доступом к древневиндовскому разделу.

Посмотрите Processor type and features ---> Processor family, мне порекомендовали выбрать Pentium-MMX.

Еще поройтесь в Device Drivers, полезно. Можете шутки ради понавыбирать там все и скомпилировать ядро весом > 50 Мб.

Далее. Ядро после загрузки себя должно загружать, собственно, систему. Либо из скомпилированных в себе файлов (используются во встраиваемых системах), либо из CPIO архива, сжатого чем-нибудь, либо из Initrd. Здесь вам не DOS, здесь не получится сразу сослаться на какой-нибудь init"овый файл в корневом каталоге диска или флешки. На самом деле получится, не слушайте дядю Анникса! Неправильно это, хоть в Интернете по этому поводу уже нехилая полемика ведется. В своей системе мы будем использовать initrd, т.к. это удобно, и не вызовет нецензурных выражений от сторонних разработчиков, в отличие от CPIO архива.

Ах, да, скомпилируйте ядро командой

Если у вас x86, найдете его по адресу /linuxkernel/arch/x86/boot/bzImage.

Для суровых челябинских программистов можно использовать Кросс-компайлинг…

Создание Ramdisk.

Теперь нам нужен initrd с установленной там простейшей оболочкой. Мы будем использовать busybox, потому что эта няша может все. Способ мы украдем у Роберто де Лео, создателя Movix (я бы даже уважать его начал, если бы не запредельная любовь к Perl):

Dd if=/dev/zero of=/dev/ram0 bs=1k count=5000 - Создаем Ramdisk в оперативной памяти нашего компьютера.
mke2fs -m0 /dev/ram0 5000 - Форматируем Ramdisk в системе Ext2
mkdir /distro - Создаем папку
mount /dev/ram0 /distro - Монтируем в папку /distro

Все, теперь у нас есть Ramdisk, емкостью в 5 Мб. Можно и больше, только не нужно. В отличие от Томаса Матеджисека, я не собираюсь пичкать initrd модулями в Squashfs, сжатыми LZMA. Все, что необходимо, будет скомпилировано вместе с ядром. Да, это не очень логично и правильно, но мороки в сто раз меньше. А специально для тех, кто осуждает такой подход, можно разрешить опцию модульности в ядре: Enable loadable module support.

В нашем Ramdisk"е, смонтированном в /distro, есть такая папка, lost+found. Это потому, что мы отформатировали его в ext2. Ни в коем случае нельзя ее удалять, хоть она здесь вряд ли поможет, образ-то фиксированный. Нам бы busybox сначала поставить…

Установка Busybox
Вот почему у таких классных проектов такие отстойные сайты? Хотя… это уже не суть важно, если исходники скачаны и успешно распакованы в папку /busybox.

Сконфигурировать busybox можно так же:

Cd /busybox
make menuconfig

Если вы еще не поняли, что это, объясню. Busybox заменяет тонны UNIX приложений, хранящихся в папках /bin, /sbin, /usr/bin, /usr/sbin. Вместо этого, создается только одно приложение: /bin/busybox, а на него создается куча ссылок в указанных выше папках. Установим busybox следующей командой:

Make CONFIG_PREFIX=/distro install

Еще Busybox создаст файлы /sbin/init и зачем-то /linuxrc, чтобы ваша система корректно запустилась. Но не все необходимые папки были созданы. Так что завершаем все руками и создаем:

/distro/etc
/distro/lib
/distro/dev
/distro/mnt
distro/proc
/distro/root
/distro/tmp
/distro/root

Если что забыл - вспомните, т.к. директории эти забыть сложно.

Все бы хорошо, вот только busybox для работы требует библиотеки, которые нужно скопировать в наш дистрибутив. Очень легко узнать, какие:

Ldd /distro/bin/busybox

Программа покажет нам библиотеки, требуемые для нашей оболочки. Сразу говорю: linux gate создается ядром и скопирован быть не может.

При копировании библиотек можно отсекать отладочную информацию (так Роберто советует):

Objcopy --strip-debug откуда куда

Делаем из Линукса Линукс

Надо создать несколько системных текстовых файлов:

Нам нужен /etc/inittab. Удивлю вас: в начале жизни система даже не знает, что такое Root. У нас даже пользователь безымянный, но вот файл общесистемных низкоуровневых фич (ОНФ) должен присутствовать. Пилотное содержание файла следующее:

::sysinit:/etc/rc.d/rc.S

# Запустить оболочку в консоли.
::respawn:-/bin/sh

# Команды, выполняемые перед выключением и перезагрузкой.
::shutdown:/sbin/swapoff -a >/dev/null 2>&1
::shutdown:/bin/umount -a -r >/dev/null 2>&1

Следующий файл - /etc/fstab. Это таблица, в которой описано, что и куда монтировать при загрузке. Вещь бесполезная! Нам нужно обязательно смонтировать proc, иначе вообще ничего работать не будет, так что в файле пишем:

None /proc proc defaults 0 0

Для mount нужен также файл /etc/mtab. Создайте его и оставьте пустым.

Но mount сделает все необходимое только тогда, когда мы явно его об этом попросим. А просить мы будем в том самом первозагрузочном файле /etc/rc.d/rc.S (rc.d - папка). Вежливо попросим:

/bin/mount -av -t nonfs

Еще нам необходим файл профиля (b)(a)sh, тут вообще раздолье для фантазии. Создаем файл /etc/profile и заполняем следующим:

PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:"
LESS=-MM
TERM=linux
HOME=/root
PS1="> "
PS2="> "
ignoreeof=10
export PATH DISPLAY LESS TERM PS1 PS2 HOME ignoreeof

Понадобится также файл /etc/shell, в котором указано, что есть оболочка:

/bin/sh
/bin/ash
/bin/bash

Вот собственно и все. Можно записывать наш Ramdisk в файл.

Mkdir /os - папка для "готового".
umount /dev/ram0 - размонтируем кусочек оперативной памяти.
dd if=/dev/ram0 of=/os/initrd bs=1k count=5000 - создаем файл.
gzip /os/initrd - сжимаем файл initrd

Создание загрузочной флешки

«Финишная прямая» нашей маленькой разработки. Берем флешку, вставляем, форматируем в vfat (можно и в ext, но не забывайте, что еще не все пользователи Windows застрелились).

На флешке создаем папку boot, в ней папки initrd и kernel.

Из папки /os копируем сжатый Ramdisk в папку boot/initrd на флешке, называем «main.gz». Из папки с исходниками ядра копируем bzImage в папку boot/kernel на флешке, называем «main.lk». Достаем файлы загрузчика Syslinux (в Интернете, либо из другого дистрибутива: тут не принципиально), а именно syslinux.bin, syslinux.boot, syslinux.cfg. Копируем их в корневой каталог нашей флешки. В файле syslinux.cfg пишем что-то подобное:

Default mm
prompt 1
timeout 100
label mm
kernel /boot/kernel/main.lk

label mc
kernel /boot/kernel/main.lk

label cm

append initrd=/boot/initrd/main.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
label cc
kernel /boot/kernel/custom.lk
append initrd=/boot/initrd/custom.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
label hd
localboot 0x80

Тем самым мы поддержали кастомные initrd и ядро, которые, эксперимента ради, можно подключить к нашему дистрибутиву.

Узнаем, каким девайсом в системе является наша флешка (можно запустить mount без параметров и посмотреть). Это либо /dev/sdb1, либо /dev/sdc1, либо /dev/sdd1. Стоит отмонтировать флешку перед началом установки.

Устанавливаем syslinux (если пакета в системе нет, apt-get install syslinux):

Syslinux -d путь_к_устройству

В корневом каталоге флешки должен появиться файл ldlinux.sys. Если он есть, значит syslinux.bin, syslinux.boot больше не нужны.

Как настроить BIOS на загрузку из флешки, я вам рассказывать не буду - это легко. Скажу только, что очень удобно создать папку /boot/initrd/init, в которую можно будет смонтировать /boot/initrd/main, для последующей работы с ним. Только не забудьте разжимать и сжимать его gzip"ом.

Ну вот и все.

Как-бы я только что рассказал вам, как создать с нуля систему на Linux. Легко, не правда ли? Далее вы можете редактировать скрипт /sbin/init, ведь у вас еще много работы! Вы должны будете написать скрипт для монтирования флешки, который делает chroot в корневой каталог. В противном случае, вы вынуждены будете работать с ReadOnly разделом, величиной в 5 Мб. Но это уже совсем другая история.

Как создать свою эталонную сборку Windows 10 – дистрибутив с проведенными настройками системы, внедренными твиками и установленным десктопным ПО? Этот процесс в деталях будет рассмотрен ниже, но прежде поговорим об особенностях собственных сборок системы.

1. Плюсы и минусы собственных сборок Windows

Какие плюсы у собственных сборок Windows? Своя сборка системы - это экономия времени и усилий при установке системы. Например, можно подготовить дистрибутив Windows 10 со стандартным набором программ для круга близких: браузер, архиватор, торрент-качалка, чистильщик, деинсталлятор и подобного рода софт для широкой аудитории будет устанавливаться вместе с системой. Выгоды по сравнению с обычным дистрибутивом Windows очевидны, а что получим в противовес прочим способам развертывания системы? Своя сборка Windows, эталонный образ которой создавался на GPT-диске, в дальнейшем может быть развернута на MBR-диске и наоборот. Тогда как перенос системы с помощью программ-бэкаперов или менеджеров дискового пространства не поможет при смене стиля разделов диска. В отличие от последних, собственная сборка на установочном носителе не будет привязана к файлу резервной копии на несистемном разделе диска или съемном устройстве, как и не нужно будет подключать жесткий диск назначения для клонирования Windows.

У собственных сборок Windows три минуса. Первый – дистрибутив своей сборки будет занимать больше места, чем чистый дистрибутив Microsoft. Но эта проблема решается использованием флешки с объемом как минимум 8 Гб. Второй минус – процесс установки Windows продлится немного дольше, чем обычно, что связано с развертыванием добавленного софта. Третий минус – это волокита с созданием сборки. Затраченные усилия вряд ли будут оправданы, если система переустанавливается редко.

2. Алгоритм действий

Процесс создания своей сборки Windows 10 будет проходить в несколько основных этапов:

  • Создание эталонного образа системы – подготовленного к развертыванию идеального состояния системы (с проведенными настройками и внедренным ПО, без привязки к комплектующим компьютера);
  • Захват эталонного образа в файл install.esd;
  • Перепаковка оригинального установочного ISO-образа системы с подменой файла install.esd.

3. Эталонный образ Windows 10

Эталонный образ Windows 10 можно подготовить разными способами, это может быть:

  • Наработанная система с удаленной привязкой к комплектующим при помощи утилиты Sysprep (см. п. 7 статьи);
  • Новая Windows 10, установленная на другом разделе диска;
  • Новая Windows 10 на борту виртуальной машины.

Наработанную систему необходимо тщательно почистить – удалить файлы в папках пользовательского профиля, почистить папки «Temp» и т.п. Иначе дистрибутив получится гигантских размеров. С новыми системами проще: во-первых, дистрибутив на их базе будет занимать меньше места, во-вторых, в процессе их установки эталонный образ Windows 10 можно создать с нуля в режиме аудита - специальном режиме работы системы без участия пользовательской учетной записи. Режим аудита предусмотрен компанией Microsoft для внедрения корпоративных настроек и софта OEM-поставщиками и крупными организациями перед поставкой компьютеров, соответственно, покупателям и наемному персоналу. На выходе получим нужным образом настроенною систему с установленным десктопным ПО, на этапе установки которой можно формировать новые учетные записи, задавать региональные параметры, отключать опции отправки данных компании Microsoft и т.п. При этом нигде не будет болтаться старая учетная запись.

В нашем случае эталонный образ Windows 10 создадим с нуля в режиме аудита при помощи Hyper-V. Этот гипервизор был выбран из-за удобства в работе и простоты переноса больших объемов данных с виртуальной машины в основную систему. Диски VHDX и VHD, используемые в работе виртуальных машин Hyper-V, монтируются в основную систему средствами проводника. Сторонники других гипервизоров - VMware Workstation и VirtualBox – могут использовать их. Чтобы упростить доступ к данным виртуального диска с основной системы и не возиться с дополнениями гостевых ОС, виртуальные машины можно создать на базе VHD-дисков. И VMware Workstation, и VirtualBox работают с дисками VHD.

Принявшим решение формировать эталонный образ Windows 10 на втором разделе диска реального компьютера на будущее в помощь инструкции по и полному .

4. Нюансы с активацией

Понятие собственной сборки Windows необходимо отличать от пиратских сборок системы, поставляемых активированными или с активатором на рабочем столе. Цель этой статьи – упростить процесс установки Windows, но не решать вопрос с ее активацией. Эталонный образ Windows 10 будет создан с использованием средств, не противоречащих политике Microsoft - собственно, ее же инструментов. А их использование не гарантирует работоспособность активированных сборок системы. Напомним, требования Microsoft таковы: активация каждой копии Windows, с какого бы дистрибутива она ни устанавливалась, на каждом отдельном компьютере. Если в качестве эталонного образа выступает активированная наработанная Windows, в процессе удаления привязки к комплектующим с помощью утилиты Sysprep необходимо сбросить активацию (см. п. 7 статьи).

Ищущим способ переноса активированной Windows на другие компьютеры .

5. Создание виртуальной машины Hyper-V

Итак, для подготовки эталонного образа Windows 10 создаем виртуальную машину. Условия работы с Hyper-V, активация гипервизора, а также процесс создания виртуальной машины в деталях описываются в статье сайта . Только, в отличие от рассмотренного в п. 5 этой статьи примера, выбор поколения виртуальных машин не принципиален, можно создать и машину 1 поколения. Если не планируется внедрение ресурсоемкого софта типа игр, можем ограничиться объемом создаваемого жесткого диска VHDX в 50-60 Гб. Ну и избитый совет для владельцев SSD – путь хранения файлов виртуальной машины и VHDX-диска нужно указывать на разделе HDD. На последнем этапе создания виртуальной машины указываем ISO-образ , включаем машину и запускаем процесс установки системы. Последний будет отличаться от того, как это происходит обычно.

6. Установка и настройка Windows 10 в режиме аудита

Проходим процесс установки Windows 10 до этапа выбора типа установки и выбираем второй вариант.

Нам понадобится два раздела – один для Windows, другой несистемный, куда впоследствии будет сохранен файл install.esd. Формируем раздел С из 30-40 Гб.

Оставшееся место отдаем другому разделу.

Устанавливаем Windows.

По завершении этапа копирования файлов установочный ISO-образ не извлекаем из виртуальной машины, он нам еще понадобится. На этапе установки, где необходимо задать первые настройки, ничего не трогаем, просто жмем клавиши Ctrl+Shift+F3.


5

Войдем в режим аудита с подключением скрытой учетной записи администратора.

На входе в систему в режиме аудита нас встречает окно утилиты Sysprep. Утилита будет дожидаться своей участи, чтобы провести удаление привязки настроенной системы от комплектующих. Можно приступать к настройке системы. Один нюанс: в режиме аудита не работает Microsoft Edge, для доступа к Интернету нужно запустить Internet Explorer.


7

Что касается пределов вмешательства в систему, в режиме аудита можем работать со всем, что не относится к пользовательским учетным записям. Можем устанавливать десктопное ПО, менять системные настройки, применять твики, оставлять папки или файлы на рабочем столе. А вот универсальные приложения из Windows Store установить не получится. Как и Microsoft Edge, магазин не работает в режиме аудита. Не получится даже при условии активации системы сменить тему оформления или прочие параметры персонализации. Для установки универсальных приложений и применения настроек персонализации нужна пользовательская учетная запись, а не скрытая администратора.

Если понадобится перезагрузить систему, например, это требуется для доустановки каких-то программ, этот процесс нужно провести с помощью окна Sysprep: необходимо выставить значения «Переход в режим аудита» и «Перезагрузка». Затем нажать «Ок».

Параллельно с настройкой системы необходимо сделать важную вещь – отформатировать несистемный раздел диска.

7. Удаление привязки к комплектующим (Sysprep)

Итак, эталонный образ системы готов. Теперь можем приступать к процессу удаления привязки к комплектующим. Обращаемся к окну открытой утилиты Sysprep или запускаем ее нажатием клавиш Win+R и вводом:

В открывшейся папке будет содержаться EXE-файл запуска утилиты.

В окне Sysprep выставляем действие «Переход в окно приветствия (OOBE)». Ставим галочку «Подготовка к использованию» для сброса активации. В параметрах завершения работы указываем «Завершение работы». И жмем «Ок».

Дожидаемся окончания работы Sysprep и выключения виртуальной машины.

8. Создание файла install.esd

Проверяем, стоит ли запуск виртуальной машины с ISO-образа установки Windows 10, и загружаемся с него. Установочный диск используем для доступа к командной строке. Если эталонный образ Windows 10 создавался на втором разделе диска реального компьютера, просто заходим в основную операционную систему и открываем там командную строку.

На первом этапе установки системы жмем клавиши Shift+F10.

С помощью утилиты DISM осуществим захват эталонного образа системы и сохраним его в файл install.esd. Но прежде посмотрим, под какими буквами значатся два нужных раздела – системный и раздел назначения, куда будет сохранен install.esd. Вводим:

В нашем случае диск системы значится как D, а несистемный – как E. Потому команда захвата образа системы будет такой:

Dism /capture-image /imagefile:E:\install.esd /capturedir:D:\ /name:windows

В этой команде, соответственно, в каждом отдельном случае необходимо заменить буквы E и D на свои.


12

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

9. Монтирование диска виртуальной машины в основной системе

Чтобы диск виртуальной машины отображался в основной системе, где будут происходить дальнейшие действия, открываем в проводнике файл диска этой машины VHDX (или VHD). В контекстном меню жмем «Подключить».


13

Все разделы виртуального диска отобразятся в проводнике как отдельные диски. В нашем случае выбираем последний диск M, именно там хранится файл install.esd. После перепаковки ISO-образа виртуальный диск нужно будет размонтировать, это делается с помощью опции «Извлечь» в контекстном меню любого из добавленных разделов виртуального диска.


14

Новоиспеченным файлом install.esd заменим оригинал в составе официального дистрибутива Windows 10.

10. Перепаковка ISO-образа дистрибутива Windows 10

Заменять одни файлы на другие в составе загрузочного ISO-образа могут многие программы, в нашем случае для перепаковки выбрана программа UltraISO . Запускаем ее. Жмем меню «Файл», затем – «Открыть» и в проводнике указываем путь к ISO-образу, с которого осуществлялась установка Windows 10 на виртуальную машину.


15

Содержимое ISO-образа отобразится в верхней части окна UltraISO. Здесь открываем папку «sources» и удаляем в ней исходный файл install.esd. В нашем случае он весил 3,7 Гб. Нижняя часть окна UltraISO – это системный проводник, здесь открываем подмонтированный раздел диска (или нужный раздел реального диска), на котором хранится новоиспеченный файл install.esd. В нашем случае он весит 4,09 Гб. Новоиспеченный файл либо перетаскиваем в верхнюю часть окна - туда, где был файл исходный, либо добавляем с помощью контекстного меню.


16

Проверяем: в папке «sources» образа диска должен находится не исходный install.esd с весом в 3,7 Гб, а новоиспеченный install.esd с весом в 4,09 Гб.


17
18

Дожидаемся завершения прогресса операции.

***

Теперь осталось только протестировать свою сборку Windows 10 на новой виртуальной машине.

Отличного Вам дня!

При запуске Install Shield Express появляется окно с радиогруппой, предлагающее открыть существующий проект или создать новый.

При создании нового проекта следует ввести имя проекта и указать каталог, в котором расположены файлы приложения (рис. 4).

Рис. 4. Создание нового дистрибутива

Флажок "Include custom setup type" следует выбрать, если вы планируете предоставить пользователю возможность выбора варианта инсталляции Custom Setup для самостоятельного выбора варианта инсталляции. После этого появится главный экран InstallShield, в котором перечислена последовательность шагов, которые следует выполнить для создания дистрибутива (рис. 5).

Рис. 5. Главный экран InstallShield Express

В разделе Set the Visual Design следует заполнить поля со сведениями о приложении: название приложения, как оно будет выглядеть в программной группе, имя исполняемого файла, каталог, в который следует установить приложение (рис. 6)

Рис. 6. Установка параметров приложения

Отметим, что Install Shield содержит несколько переменных, идентифицирующих диски и каталоги компьютера пользователя, что позволяет не знать реальную систему каталогов и дисков этого компьютера:

    - каталог для установки, указанный пользователем,

    - каталог, в котором содержится Windows

    - каталог Windows\System

    - диск, на котором содержится Windows

    - диск, на котором содержится каталог Windows\System

    Каталог Program Files.

Щелкнув на закладке Main Window, можно установить заголовок инсталляционного приложения, цвет фона и логотип (рис.7).

Рис. 7. Установка внешнего вида экрана инсталлятора

Щелкнув на закладке Features, можно обнаружить одну-единственную опцию - Automatic Uninstaller. Ее рекомендуется оставить выбранной.

Следующий раздел - Specify InstallShield Options for Borland C++ - предназначен для выбора компонентов, часто поставляемых с приложениями: BDE, SQL Links и др. Выбрав нужный компонент (в нашем случае BDE) и нажав кнопку Settings, получим последовательность из четырех диалоговых окон для выбора частей BDE, поставляемых с данным приложением (рис. 8), и создания псевдонимов.

Рис. 8. Определение устанавливаемых частей BDE

При установке параметров псевдонимов можно выбрать тип псевдонима и местоположение данных. Остальные параметры псевдонима (в том числе и языковые драйверы) можно указать в текстовом редакторе в нижней части окна (рис. 9):

Рис. 9. Установка параметров псевдонимов BDE

Щелкнув по закладке Advanced Options, можно ознакомиться со списком файлов дополнительных компонентов (в нашем случае BDE) и сведениями о них.

Следующий раздел - Specify Components and Files - предназначен для определения групп файлов, компонентов приложения и типов установки. Щелкнув на закладке Groups, можно создать группы файлов для создания из них компонентов дистрибутива. Можно также использовать Explorer и переносить из него нужные файлы методом drag-and-drop (для этого нужно нажать кнопку Launch Explorer). Не рекомендуется оставлять группы пустыми.

Рис. 10. Создание групп файлов

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

Рис. 11. Создание компонентов дистрибутива

Следующая закладка - Setup Types - предназначена для определения вариантов установки. Если щелкнуть на ней, может оказаться, что вариант инсталляции его один - Typical (например, вы забыли отметить флажок "Include custom setup type"). В этом случае следует выбрать раздел Select User Interface Components и, щелкнув на закладке Components, в списке Dialog Boxes отметить опции Setup Type и Custom Setup. После этого можно вернуться к закладке Setup Types и определить варианты инсталляции. Как правило, варианты Custom и Typical содержат все возможные компоненты, а вариант Compact - минимальный набор компонентов, пригодный для нормальной работы приложения.

Рис. 12. Определение состава вариантов инсталляции

В разделе Select User Interface Components можно выбрать диалоги, в которых пользователь вводит необходимую информацию во время инсталляции (например, сведения о себе и компании, серийный номер продукта), знакомится с лицензионным соглашением и файлам readme, указывает каталог для инсталляции, выбирает тип установки и т.д. Возможен также предварительный просмотр диалогов при нажатии кнопки Preview.

Следующий раздел - Make Registry Changes - позволяет создавать на компьютере пользователя новые ключи реестра (закладка Keys) и значения ключей (Values). Это может оказаться полезным, если вы используете в вашем приложении компоненты ActiveX или создаете OLE-сервер. Ключи и их значения можно копировать из редактора реестра, если он поддерживает такую опреацию.

Рис.13. Определение ключей и значений реестра компьютера пользователя.

Следующий раздел - Specify Folders and Icons - позволяет определить состав будущей программной группы, а также определить параметры командной строки (закладка Advanced).

Рис. 14. Определение состава программной группы.

Наконец, последний раздел - Run Disk Builder. После сохранения инсталляционного скрипта (с помощью нажатия на кнопку с изображением дискеты на панели инструментов главного окна InstallShield) и выбора типа носителей происходит создание на жестком диске образов дистрибутивных дискет. Выбрав затем раздел Create Distribution Media, можно записать на дискеты созданный дистрибутив.

Рис. 15. Создание образов дискет.

Опцию Test Run можно использовать для проверки работы инсталляционного приложения. Однако не рекомендуется делать это на компьютере, где производится разработка приложений. Лучше провести тестовые испытания на компьютере, похожем на компьютеры ваших пользователей. Кроме того, рекомендуется создать на этом компьютере копию Windows, чтобы в случае некорректной работы инсталлятора можно было вернуть программное обеспечение в исходное состояние.

Запуск инсталляционной программы приводит к последовательному появлению выбранных в разделе Select User Interface Components диалогов, подобных изображенному на рис. 16.

Рис. 16. Так выглядит один из диалогов программы установки

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

Рис. 17. Результат работы инсталляционного приложения.

Если при создании дистрибутива вы выбрали опцию Automatic Uninstaller, то в случае возникновения необходимости деинсталляции установленного приложения следует использовать утилиту "Установка и удаление программ" в панели управления Windows.

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

В заключение отметим, что поставка приложений, созданных с помощью Delphi 2.0 и Delphi 3.0, осуществляется практически точно так же, как и поставка приложений, созданных с помощью C++ Builder.

Перенос приложений C++Builder в архитектуру клиент/сервер

Наталия Елманова

    Введение

    Немного истории

    Особенности архитектуры клиент/сервер

    Серверные СУБД и унаследованные данные

    Перенос унаследованных данных с помощью Data Migration Wizard

    Перенос унаследованных данных с использованием CASE-средств

    Некоторые выводы

В одной из предыдущих статей читатель познакомился с не совсем обычным способом установки операционной системы Windows XP - на флеш-брелок. Сегодняшняя тема тоже касается вопроса облегчения и автоматизации установки.

Приступая к работе

Несмотря на то, что компания Microsoft включила в дистрибутив XP, учитывая обновления Service Pack 1 и 2, достаточно великое количество сертифицированных драйверов, сотни разработчиков по всему миру выпускают драйвера, которые, по понятной причине, не могли быть включены в Windows ранее. Последствия, в большинстве случаев, не печальны, так как необходимые драйвера можно без особых проблем доустановить после установки самой ОС.

Однако бывают и неприятные исключения. Рассмотрим показательный пример. Сейчас большинство современных ноутбуков поставляется с ОС Windows Vista. Компьютеры в бюджетной линейке не очень производительны по современным меркам, еще беря во внимание и то, что в десктоп- и лэптоп- категориях лэптопы заметно проигрывают. 512 Мб оперативной памяти, слабая интегрированная видеокарта - и в результате у покупателя в скором времени появляется желание установить на винчестер «родную» XP. Однако известно, что поверх «Висты» поставить XP стандартным методом (начав установку в среде Windows, без форматирования раздела) невозможно. Если же отформатировать жесткий диск и начать устанавливать XP в MS-DOS , то нередки случаи, когда установщик не может обнаружить SATA -диск. Такая ситуация, в частности, характерна для ноутбуков Acer серии Aspire и Travelmate. «Продвинутые» пользователи в таком случае рекомендуют обновить BIOS или с помощью Norton Ghost попробовать перенести образ тома системного диска с другого Acer’а. Увы, даже на словах эти методы не внушают оптимизма. Третий же способ, самый «безопасный» - прошить в дистрибутив XP драйвера на SATA -накопитель. Мы предлагаем читателю пойти этим путем.

Впрочем, это руководство окажется полезным не только владельцам ноутбуков, но и обладателям устаревшего, конфликтного, «желтого» компьютерного оборудования, которое всяческим образом мешает инсталляции операционной системы. А скомпилировать собственный дистрибутив ОС удобнее всего с помощью утилиты nLite. В умелых руках она придает дистрибутиву XP недостающую этой ОС функциональность и удобство. Принцип схож с тем, каким мы руководствовались при создании install’а с помощью BootPE. Заранее подготавливаем нужные системе драйвера, обновления и программы, что немаловажно, убираем лишние компоненты - и при этом XP занимает всего один CD-диск.

Установка программы

Последнюю версию программы nLite можно скачать на сайте разработчиков . С ее помощью можно модифицировать любой дистрибутив Windows ветки NT: 2000, XP или Server 2003. Поддерживаются также и 64-битные версии. Занимает nLite всего 2,3 Мб, что характерно для подобных программ, использующих библиотеки.NET Framework версии 2.0. Следовательно, для запуска nLite потребуется этот компонент от компании Microsoft, занимающий, в свою очередь, 25 Мб. Если в вашей системе уже установлен.NET Framework 1.1, более поздняя версия все равно обязательна к установке (при этом старые библиотеки лучше не удалять). Файл доступен на сайте Microsoft.com (смотрите раздел «Downloads», полностью ссылку не приводим из-за ее сложности), впрочем, на том же www.nliteos.com имеется облегченный пакет.NET Framework 2.0 ?86, размером чуть более 6.6 MB. После этого установка nLite не составит проблем.

Подготовка дистрибутива ОС

Мало кому известно, что Windows XP имеет около десятка официальных модификаций. Правда, в большинстве случаев разница в составе программного обеспечения невелика. Скорее всего, в вашем распоряжении будет Windows XP Home или Professional - особого значения применительно к nLite это не имеет, лишь бы только это была не Starter Edition или любительская сборка, «исправленная и дополненная». Чтобы не интегрировать в систему MUI (официальный пакет локализации) и второй сервис пак, модифицируйте русскоязычную Windows XP SP2.

Убедившись, что на винчестере есть около 1 Гб свободного места, на время работы с дистрибутивом мы создадим папку, например, «installxp» и cкопируем туда следующие данные: каталог I386 и файлы WIN51, WIN51IP, WIN51IP.SP1 WIN51IP.SP2. Последние два файла могут и отсутствовать: они свидетельствуют о том, что в XP содержится второй (SP2) или первый (SP1) сервис пак. При наличии второго устанавливать первый уже не нужно, так как SP2 содержит предыдущие обновления.

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

Работа с программой nLite

Последняя на сегодня версия программы, с цифрами 1.4.1, порядочно отличается от предыдущих версий. Мы не станем перечислять основные возможности программы (список на русском языке приведен . К чести разработчиков, они сделали удобный wizard - мастер настроек, который поможет быстрее освоиться с функциями программы. Помимо того, что nLite имеет приятную глазу GUI -оболочку и простую навигацию, практически к каждому этапу настройки прилагается справка-рекомендация (вызвать ее можно, кликнув по эмблеме вопросительного знака). Собственно, процесс модификации дистрибутива XP делится на несколько шагов, каждый из которых мы рассмотрим поподробнее.

1 этап. Выбор языка

Первым делом выберите язык мастера настроек. Есть два варианта русского перевода: второй, «Russian Translate», представляет собой транслит, а «Russian» - это обычная кириллическая локализация.

2 этап. Расположение установочных файлов Windows

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

3 этап. Предустановки

Если вы не в первый раз модифицируете дистрибутив, можете загрузить (импортировать) сохраненные ранее настройки, и тогда nLite автоматически отметит предыдущие установки.

4 этап. Выбор задач

Окно выбора задач содержит несколько кнопок-задач. Здесь вы можете отметить, какие этапы настройки будут следовать далее. Если же вы загрузили предыдущие настройки программы, отметки принимают соответствующие цвета: красный (пропуск), желтый (частичное изменение) или зеленый (установка). Рассмотрим каждый пункт поподробнее.

1. Сервис-пак. В случае, если в операционную систему еще не интегрирован сервис пак, скачайте его на сайте www.microsoft.com и попробуйте установить самостоятельно (имея на то желание и «лишний» трафик). Для перехода по точному адресу нажмите на ссылку «Windows XP» внизу окна программы (блок «Официальные пакеты обновлений»).

2. Исправления и пакеты обновлений. Если вы регулярно обновляете Windows посредством установки последних критических обновлений и если таковые на имеются у вас наличии, на этом шаге можете указать эти файлы nLite. В окне выбора можно отметить сразу все пакеты, зажав клавишу Shift, Ctrl либо применив клавиатурную комбинацию Ctrl+A. Обновления должны быть совместимы с модифицируемой версией XP, в ином случае на одном из последних этапов программа оповестит вас о невозможности интеграции данных обновлений. Довольно любопытные настройки открываются по нажатию кнопки «Дополнительно». Здесь можно изменить метод интеграции (первые три настройки) и сэкономить немного места за счет сжатия папки ASMS (последняя опция).

Врезка. Дополнения к nLite

На сайте Nlite доступны дополнения, которые можно включить в состав XP при помощи nLite:

  • RyanVM’s Windows XP Post-SP2 Update Pack 2.1.9 - пакет исправлений для английской версии Windows XP, который включает в себя патчи, вышедшие после SP2.
  • NFM ’s x64 Post-SP1 Update Pack 1.73 - пакет исправлений для английских версий операционных систем Windows XP x64 и 2003 ?64.
  • Xpize MCE 4.6 - пакет для изменения интерфейса системы (заменяет иконки и картинки, добавляет новые элементы оформления).
  • Vista Transformation Pack 6.0 - альтернативный предыдущему набор с уклоном под стилизацию а ля Windows Vista.

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

Как уже говорилось ранее, Access не позволяет сделать исполняемый файл, способный работать без Access. Но в то же время, Microsoft предлагает для решения проблемы воспользоваться пакетом Microsoft Office Developer , в состав которого входит и лицензия на распространение программы Microsoft Access runtime . Остановлюсь на этом подробнее.

Программа Microsoft Access runtime - это версия Access, которая позволяет пользователям выполнять, но не модифицировать приложение Access. Устанавливать Microsoft Access runtime вместо полной версии есть смысл только в том случае, когда нужна лицензионная чистота, а у клиента, у которого исполняется Ваша база, нет лицензии на Access. В этом случае придется покупать ODE (Оffice Developer Edition). Тогда вместе с его покупкой Вы получаете некоторые дополнительные инструменты и самое главное ПРАВО устанавливать клиентам вместе с разработанной вами базой еще и Run-time версии Аccess. В этом случае к клиенту не будет притензий по поводу незаконного использования Аccess. Иначе каждому клиенту необходимо купить лицензию MS AАccess.

В пакет ODE входит "создатель дистрибутивов" который включает в диистибутив Вашу MDB и Run-time версию. Все библиотеки необходимые для создания Run-time уже есть в полной версии Аccess (даже без ODE). Но тут есть одно НО (это для тех, кого беспокоит лицензионная "читота"):

Если Вы его не купите официально, то у клиентов все равно не будет права использовать даже Run-time версию.

Может возникнуть такая мысль: А что, если узнать какие файлы нужны Access для работы и включить их в установочный дистрибутив? Можно, но это не решает проблемы с лицензией. К тому же придется создавать достаточно сложную программу установки с проверкой имеющихся компонентов и установкой/регистрацией отсутсвующих. Причем в последнем случае можно при неумелых действиях даже разрушить систему.

Вообще, если рассматривать реальные ситуации с продажей приложений на Access, то лишь немногие разработчики (речь идет о России) действительно покупают лицензионные пакеты. Как правило это те, для кого "при определенном уровне развития бизнеса вопрос покупать - не покупать теряет свою актуальность" - или говоря проще, кто может себе позволить купить лицензионный пакет за 600$ - 1000$. Интересно потом выслушивать их чертыхания на форумах по поводу работы таких программ. Насколько я понял там те же самые "косяки", что и в пиратских версиях. Поэтому призывать Вас использовать только бесплатные или пиратские версии Office для Ваших программ я не буду, но и рекомендовать пользоваться лицензионным тоже не стал бы (см. выше).

Интересно, что полную версию Access можно запустить в runtime - режиме, задав в командной строке ключ /runtime. Например, создайте на рабочем столе ярлык, кликнете по нему правой кнопкой мыши, в появившемся диалоговом окне в поле объект напишите примерно так: (это для Office 2000 - XP, а для 2003 нужно будет исправить вместо Office10 - Office11)

"C:\Program Files\Microsoft Office\Office10\MSACCESS.EXE" "D: \Базы\Моя База.mdb"/runtime

а в поле «Рабочая папка»:

Теперь запустим приложение через этот ярлык. Откроется окно проекта Access, но ярлыка Access, а так же стандартных панелей инструментов уже там не будет. Это и есть runtime - режим.

Для начинающих разработчиков распространение приложений Access через пакет Microsoft Office Developer вряд ли приемлемо. Ведь он стоит денег, и не малых. Мы рассмотрим другой способ, при помощи бесплатного инсталлятора Inno Setup . Есть конечно и другие как платные, например InstallShield , так и бесплатные инсталляторы. Различаются они по удобству работы, размеру создаваемого дитсрибутива.

Inno Setup - свободно распространяемый инсталлятор для программ Windows. Английские версии появились ещё в 1997, теперь Inno Setup переводится на несколько языков, а инсталляторы может создавать более чем на 20 языках. Inno Setup превосходит многие коммерческие инсталляторы по возможностям, стабильности и размеру создаваемых файлов.

Основные характеристики:

  • программа может сравнивать информацию о версии файла
  • перемещать используемые файлы
  • регистрировать DLL/OCX/FNT/TLB и типовые библиотеки
  • инсталировать шрифты
  • проверяет, активны ли определенные программы
  • создание ярлыков быстрого доступа (например, через старт-меню или на рабочем столе)
  • осуществление записи в ini-файлы
  • встроенная машина для написания скриптов на языке Pascal
  • поддерживает многоязыковую инсталяцию
  • инсталяция и деинсталяция по умолчанию
  • весь код доступен (Borland Delphi 2.0-5.0)
  • защита пароля для setup
  • в случае отмены во время исполнения, все действия будут приведены в исходное состояние
  • поддерживает все 32-х битные версии Windows (95, 98, 2000, 2003, XP, Me, NT 4.0)
  • создает создание одного файла exe, что значительно облегчает процесс инсталяции Вашей программы
  • стандартный интерфейс Windows 2000/XP
  • ориентирован на пользователя (например, полный, минимальный, пользовательский вариант)
  • все инструменты для деинсталяции
  • инсталирование файлов: встроенная поддержка "deflate", bzip2, 7-zip LZMA файлы сжатия

Так же начиная с версии 2.0.6 Inno Setup включает в себя полную поддержку для MBCS. В более ранние версии последнее свойство не входит. А вот Web-инсталяцию не поддерживает.

Особенность создания инсталлятора в Inno Setup - это то, что инсталляторы создаются при помощи скриптов - простых текстовых файлов ASCII, напоминающих.INI файлы. Скрипты редактировать легче, чем, например, работать с интерфейсом Installshield. Скрипты имеют расширение ".iss" (inno setup script). В нём указываются все параметры инсталлятора, и при установке, программа ассоциирует себя с этими файлами. Скрипт разделен на секции, имена которых пишутся в квадратных скобках . Внутри секций существуют ключевые слова и указания, которые компилятор может читать и выполнять.

Комментарии начинаются с точки с запятой в начале строки и могут быть помещены в любое место скрипта. Коментарии блоком не возможны, как впрочем и вынесение коментария в середину строки. Последнее допускается компилятором, но впоследтвие, при выполнение, ведет к ошибке.

; -- Sample1.iss --
; Demonstrates copying 3 files and creating an icon.

Порядок секций не имеет значения. Все они (за исключением ) являются произвольными. Ключевому слову значение присваивается при помощи знака равенства (=).

Указания состоят из одного или нескольких параметров и их опций, а также флагов flags . Параметр же в свою очередь состоит из имени, за которым следует двоеточие : и значения. Параметры, опции и флаги отделяются друг от друга точкой с запятой ;

Рассмотрим в кратце основные секции:

Секция

Значение

сoдержит указания по поведению инсталяционной рутины, а также, как это должно выглядеть. Ключевые слова AppName, AppVerName и DefaultDirName являются обязательными. Все остальные - по необходимости
Здесь содержатся файлы для setup
ярлыки (иконки)
Соотношение компонентов к типу инсталяционной рутины
разрешает создать новые пустые папки
делает записи в INI- файлы
первое действое при инсталяции, cистаксис соответствует секции
разрешает специфические изменения в тексте
делает запись в регист
выполняет другие программы после того как данные успешно были исталированы, но еще до того как будет закрыто диалоговое окно
разрешает дополнитекльные действия в setup
устанавливает тип setup-а
последняя операция при деинсталяции. Таким образом папки и/или файлы будут удалены
первая операция при деинсталяции. Систаксис соответствует секции
содержит информацию о языке. как правило, не используется

Inno Setup работает внутри скрипта с различными предопределеными константами, которые, как правило, содержат пути (path). Способ написания: {имя} . Некоторые константы, такие как {app} и {group} могут/должны быть предопределены пользователем. Тот, кто сам желает определить константы, должен обратиться к припроцессеру Алекса Якимова (Alex Yackimoff).

Вот основные константы Inno Setup:

константа

пример

{win} путь в директорию/папку Windows C:\Windows
{sys} путь в системную папку Windows, в частности папку System32 C:\Windows\System или C:\Windows\System32
{app} путь к собственной аппликации (программе)
{pf} путь к программной папке C:\Programme
{cf} путь к общим данным C:\Programme\Gemeinsame Dateien
{dao} cоответствует{cf}\Microsoft Shared\DAO C:\Programme\Gemeinsame Dateien\Microsoft Shared\DAO
{src} путь к папке инсталявионной рутины, в момент выполнения setup R:\
{group} группа программ для стартового меню

Итак, рассмотрим задачи, которые нужно решить (определим только минимальные). Наш инсталлятор должен сделать следующее:

Распаковать файлы в нужные места
Создать папку в каталоге программы (папка «Коп» - для хранения резервных копий базы)
Создать меню запуска приложения в Пуск - Все программы, а так же иконку на рабочем столе

Это необходимый минимум. Но, разумеется, это далеко не все возможности Inno Setup. Ведь не зря его используют многие разработчики. Но в данной статье я ограничусь только этим, желающие глубже изучить возможности программы могут обратиться к справочной системе. В Интернет есть множество ссылок как на программу, так и на переводы справки. Например, Inno Setup 5.1.6. и справку к нему Вы можете скачать здесь… Английский сайт программы http://www.innosetup.com

Для начала попробуйте поэкспериментировать, создавая инсталлятор при помощи мастера, а затем изучая структуру полученного скрипта. В принципе, я думаю нет нужды подробно описывать, что где нажимать. Inno Setup настолько прост в освоении, что без проблем изучается, что называется «методом научного тыка». Вот например скрипт инсталятора, который делает определенные ранее задачи (все файлы дистрибутива находятся в каталоге D:\Setup.)


AppName=Моя программа
AppVerName=Моя программа. Версия 1.0.
AppPublisher=MyProgram, Inc.
AppPublisherURL=http://MyMySoft.ru/
AppSupportURL=http://MyMySoft.ru/
AppUpdatesURL=http://MyMySoft.ru/
DefaultDirName={pf}\MyProgram
DisableDirPage=no
DefaultGroupName=Моя программа
DisableProgramGroupPage=yes
LicenseFile=D:\Setup\license.txt
InfoAfterFile=D:\Setup\readme.txt
AlwaysCreateUninstallIcon=yes


Name: "desktopicon"; Description: "Создать ярлык на &Рабочем столе"; GroupDescription: "Дополнительные ярлыки:"


Source: "D:\Setup\Сервер.mdb"; DestDir: "{app}"; DestName: "Сервер.mdb";
Source: "D:\Setup\license.txt"; DestDir: "{app}";
Source: "D:\Setup\readme.txt"; DestDir: "{app}";
Source: "D:\Setup\Log.JPG"; DestDir: "{app}";
Source: "D:\Setup\Log.ico"; DestDir: "{app}";
Source: "D:\Setup\База.mdb"; DestDir: "{app}";


Filename: "{app}\MyProg.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://MyMySoft.ru/"


Name: "{app}\Коп"


Name: "{group}\Моя программа"; Filename: "{app}\База.mdb" ;WorkingDir: "{app}";IconFilename:{app}\Log.ico
Name: "{group}\Сайт программы"; Filename: "{app}\MyProg.url"
Name: "{userdesktop}\Моя программа"; Filename: "{app}\База.mdb" ;WorkingDir: "{app}"; IconFilename:{app}\Log.ico;Tasks: desktopicon

Пример, как это все работает, Вы можете скачать ниже.

  • Обратиться в "Интерфейс" за дополнительной информацией/по вопросу приобретения продуктов

Файлы для загрузки

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то