Распространение Вашего приложения. Инсталляторы.
Иван Никитин

Итак, Ваше приложение работает, и Вы, вроде бы, не находите в нем ошибок. Что дальше? А дальше вот что. Любое приложение пишется и создается для конечного пользователя. Это аксиома, и теперь Ваша задача донести приложение до него. Как, наверно, Вы уже попробовали, простое копирование каталога (папки) Вашего проекта на пользовательскую машину ничего не дает. Чаще всего приложение просто отказывается работать, ссылаясь на отсутствие библиотек поддержки Visual FoxPro. Это не прихоть Visual FoxPro, большинство современного программного обеспечения требует инсталляции - установки на пользовательскую машину.

Здесь мы рассмотрим аспекты этого процесса. Итак, процесс установки включает в себя следующие стадии:

- Копирование файлов самого приложения в папку, указанную пользователем или же выбранную Вами по умолчанию

- Копирование и регистрация в системе необходимых библиотек поддержки Вашего приложения

- Копирование и регистрация в системе элементов ActiveX, используемых Вашим приложением

- Создание ссылок в меню Пуск, на Рабочем столе или иная организация процесса запуска Вашего приложения конечным пользователем

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

Как мы уже отмечали, все (или большинство) пунктов реализуются с помощью специальной программы - инсталлятора Вашего приложения. Visual FoxPro имеет встроенное средство создавать такие инсталляторы с помощью Мастера установки (Setup Wizard), однако, на наш взгляд, этот Мастер реализован далеко не самым удачным образом. И вот почему: Вероятно, Вы, живя в России, создали для Вашего приложения русский интерфейс, и точно также, Вы желаете, чтобы первое же знакомство пользователя с Вашим приложением тоже было на русском языке. К сожалению, Setup Wizard, такую функцию не поддерживает. Во-вторых, опять же, Setup Wizard годится только для очень простых приложений, так как в нем практически полностью отсутствуют возможности выбора пользователем компонентов установки, различные варианты установки и др. Фирма Microsoft прекрасно это понимает, и рекомендует использовать этот мастер установки только новичками и для сравнительно простых приложений. Для более серьезных проектов в состав Microsoft Visual Studio входит специальное средство построения инсталляторов Install Shield Free Edition. Этот инструмент позволяет делать любые типы инсталляторов, но, однако, требует довольно плотного ознакомления с собой. Мы не будем рассматривать построение инсталляторов с помощью Install Shield, по крайней мере, сейчас. С другой стороны, существует масса построителей инсталляторов сторонних фирм, как и Freeware, так и Shareware, и платных. Мы упомянем лишь два из них (сам я довольно долго ими пользуюсь и нахожу их очень удобными, хотя опять же не претендую на абсолютную истину).

Итак, это: GKSetup - построитель инсталляторов, созданный австрийским программистом Gero Kuhn. (В фамилии буква u с двумя точками - кто скажет мне как это правильно читается - буду очень благодарен, мы с ним переписываемся, а вот если придется поговорить по телефону, даже не знаю как его называть). Очень милый и простой в использовании построитель, незаменим при необходимости создания самораспаковывающегося exe и для небольших приложений.

Wise Installation System (версии 6 и 7) - на мой взгляд, лучшая альтернатива Visual FoxPro Setup Wizard. Необычайно мощный и гибкий инструмент, также как и Install Shield представляет собой компилятор некоего подобия языка программирования (похож на C или Pascal), специально созданного для построения инсталляторов. Но в отличие от Install Shield в 99 случаях из 100 позволяет создать инсталлятор, вообще не прибегая к программированию. Никаких рекомендаций по поиску, сливанию и возможно адаптации этих продуктов (попросту говоря, взлому) мы давать здесь не собираемся, чтобы не нарушать законы, а также во избежание обвинений в скрытой рекламе. Отправим лишь читателя к первому попавшемуся поисковику (например, http://www.altavista.com) или софтовому сайту (http://www.freesoft.ru)

Итак, давайте более подробно рассмотрим следующее:

Определение необходимых пользователю файлов Вашего приложения

Создание инсталлятора с помощью GKSetup

Создание инсталлятора с помощью Wise Installation System

Определение необходимых пользователю файлов Вашего приложения

Конечно же, копировать пользователю весь Ваш проект не надо. Во-первых, это слишком большой объем (у меня были проекты, которые занимали по 40 - 60 Mb), во-вторых, пользователю нужно приложение, а не его исходный код. Как мы уже отмечали, Ваш проект может быть построен (откомпилирован) и передан пользователю тремя способами:

В виде исполняемого файла (exe)

В виде файла VFP приложения (app)

В виде OLE сервера (dll)

Сейчас мы не будем рассматривать различия между этими видами приложений, остановимся лишь на наиболее часто используемом способе распространения Вашего приложения: в виде исполняемого файла exe.

Ваш проект состоит из большого количества форм, классов, отчетов, программ, процедур и функций, рисунков и проч. Большинство из них Visual FoxPro при построении проекта "заливает" в результирующий exe файл. Поэтому, передавать их пользователю не надо, они уже есть в Вашем приложении. Определить, какие файлы Вашего проекта будут "залиты" в exe очень просто. В диспетчере проекта против файлов, которые не будут включены в результирующий файл стоит значок "перечеркнутый нолик". Все остальное будет включено. Как правило, в результирующий exe не включаются:

Контейнер базы данных, таблицы и индексы (хотя есть исключения!)

Свободные таблицы (опять же есть исключения!)

Файлы внешних библиотек (fll, dll)

Файлы хелпа (hlp, если Вы его тоже строите)

Файлы VFP RunTime (кстати, в FoxPro 2.x это было возможно)

Файлы ActiveX и другие внешние (системные) файлы

Конечно же, все эти файлы необходимо также передать пользователю вместе с Вашим приложением. Рассмотрим каждый этот тип.

Контейнер базы данных, ее таблицы и индексы обычно хранятся в Вашем проекте в папке \DATA (если Вы строили каркас Вашего проекта с помощью Мастера приложений - Visual FoxPro Application Wizard). Здесь особых комментариев не требуется - вместе с приложением Вы должны передать пользователю и базу данных. Причем, если даже Ваши данные "лежат" на SQL сервере, то, наверняка, в контейнере прописаны соединения с сервером и, возможно, удаленные просмотры - так что, в любом случае эту папку Вы должны передать пользователю.

Свободные таблицы часто появляются, если Вы любите команду SELECT INTO TABLE, в принципе, такие таблицы создаются у пользователя автоматически, и их можно не передавать, но, все же, я рекомендую Вам создать в проекте папку, скажем, \LOCAL и создавать свободные таблицы в ней и также их передавать пользователю. В этом случае инсталлятор запомнит, что эти файлы были при инсталляции, и соответственно удалит их при деинсталляции. Не надо загрязнять пользовательский винчестер. К этому типу можно отнести и таблицы настроек (ресурсов) VFP (файлы FoxUser.*), которые лежат у Вас в каталоге VFP. Если у пользователя этих файлов не будет - они создадутся автоматически, но уже не удалятся деинсталлятором. Поэтому сделайте так. В окне Command VFP введите следующие команды:

SET RESOURCE OFF
USE FOXUSER
COPY STRUCTURE TO C:\TEMP\FOXUSER
USE
SET RESOURCE ON

И из папки C:\Temp скопируйте два файла FoxUser.* в папку Вашего приложения перед построением инсталлятора. Если Вы использовали в проекте какие либо внешние модули, библиотеки или чужие классы - внимательно посмотрите их описание. Довольно часто могут использоваться внешние библиотеки (файлы с расширением *.dll, *.fll). Причем, желательно сверится с описанием Windows API (может используемая Вами DLL входит в состав Windows и ее копировать пользователю не надо). Если в описании компонентов Вашего приложения говорится об использовании библиотек *.FLL - обязательно найдите эти файлы у себя на HDD и скопируйте их пользователю. Это же относится и к файлам хелпа (если Вы его сделали). Об элементах ActiveX разговор особый.

Элементы ActiveX представляют собой in-progress OLE сервера, обычно выполненные в виде фалов с расширением OCX, и хранимые в папке C:\Windows\System (System32). Эти элементы требуют обязательной регистрации в реестре Windows. Если Вы их использовали в своем проекте ActiveX, рекомендую Вам щелкнуть по каждому из них правой кнопкой, выбрать пункт Help и прочитать в каком именно файле хранится этот элемент. Эти имена файлов желательно выписать куда нибудь себе, этот список пригодится Вам при создании инсталлятора. Как мы уже отмечали, любое VFP exe-приложение требует наличия на пользовательской машине VFP run-time Support Library (библиотеку поддержки VFP). Полностью описания всех файлов, входящих в VFP run-time можно найти в VFP Online Documentation. Но, в большинстве случаев, можно поступить так: скопируйте все файлы vfp*.dll из своей папки C:\Windows\System куда нибудь - это и есть библиотека поддержки. Для версии 5, в большинстве случаев достаточно файлов VFP500.DLL и VFP5ENU.DLL. Итак, Вы собрали всю необходимую информацию для построения своего инсталлятора (не средствами VFP Setup Wizard!).

Теперь необходимо создать папки для построения самого инсталлятора. Обычно я это делаю прямо в проекте, чтобы потом все файлы, относящиеся к проекту, были в одном месте. Создайте в проекте папку с именем Setup и вот такой структурой:

MyProj :
SETUP
    -DISTRIB
    -DATA
LOCAL
SYSTEM

В папке Setup Вы разместите позже Ваш проект инсталлятора и сами файлы инсталлятора. Папка DISTRIB послужит образом Вашего приложения на пользовательской машине (обратите внимание - в ней есть папки DATA и LOCAL для базы данных и свободных таблиц). Папка SYSTEM служит для библиотеки поддержки, ActiveX-ов и всего того, что требует регистрации в реестре. Скопируйте в эти папки Ваше приложение, помня о том, что мы обсуждали чуть выше:

SETUP\DISTRIB:
Ваше приложение - файл *.exe
Файлы ресурса - файлы Foxuser.*
Файлы библиотек - файлы *.fll Файлы помощи - файлы *.hlp
Файл "Прочти меня" - Readme.txt (напишите, не поленитесь, юзер потом спасибо скажет)

SETUP\DISTRIB\DATA:
Контейнер БД - *.dbc, *.dct, *.dcx
Таблицы БД и индексы - *.dbf, *.cdx


SETUP\DISTRIB\LOCAL:
Свободные таблицы (если Вы их использовали) и их индексы - *.dbf, *.cdx

SETUP\SYSTEM:
Библиотеки поддержки VFP - vfp*.dll Элементы ActiveX - *.ocx

Теперь Вы готовы для создания своего инсталлятора.

Создание инсталлятора с помощью GKSetup

Запустите GKSetup и выберите в меню команду File -> New Project, в меню Project -> Step 1. General Information. Заполните необходимые графы: Название приложения, его версию, каталог для установки на машине пользователя, операционные системы, под которыми будет работать приложение (все выбирать не надо - Вы только увеличите размер инсталлятора).

Далее на вкладке Visual Вы можете оставить все как есть по умолчанию, или же изменить установки (например, добавить графический логотип на экран) На вкладке Features установите флажки против тех диалогов, которые Вы хотите видеть в своем инсталляторе (например, Приветствие (Welcome), Важная информация (ReadMe) - укажите написанный Вами файл Readme.txt, и проч.) Примечание: Если Вы хотите использовать функцию Uninstall, то не забудьте скопировать файл GKSUI16.EXE из папки C:\Program Files\GKSetup в папку SETUP\SYSTEM своего приложения.

Далее, выберите в меню пункт Project -> Step2. Files and Groups. Здесь, напротив строчки Application Files Directory щелкните кнопкой Browse 1 и укажите папку SETUP\DISTRIB Вашего проекта. Установите флажок (отметку) против строчки System Files Directory, щелкните кнопкой Browse 2 и укажите папку SETUP\SYSTEM. Далее, если Вы не используете различные виды установки (типичную, компактную и проч.) - то снова щелкните в меню Project -> Step 1, и на вкладке Features уберите флажок Setup Types.

Шаг 3 теперь можно пропустить. Если у Вас написан файл ReadMe.txt - то на шаге 4 укажите его. Иначе, опять вернитесь на шаг 1 (Project -> Step 1) и на вкладке Features уберите флажок Readme. Точно также управляется и шаг 6 - если Вам нужна в приложении информация о пользователе, то отметьте в окне шага 6 (Project -> Step 6. User Information) те пункты, которые Вам нужно знать о пользователе. Если это не обязательно - заблокируйте в окне шага 1 (вкладка Features) этот диалог.

GKSetup прописывает информацию о пользователе в реестр Windows при установке Вашего приложения. Считать ее оттуда при определенном навыке несложно. Шаг 7. Щелкните в меню Project -> Step 7. Start Menu Items. Здесь Вы должны добавить к списку те пункты, которые появятся у пользователя в меню "Пуск -> Программы -> Имя_Вашего_Приложения". Например, наберите:

Name to appear in Program Manager menu Мое приложение Executable w. path (relative to installdir) MyApp.exe (имя Вашего exe файла)

И нажмите кнопку Add. Точно также вы можете добавить и пункт "Readme" (командная строка: notepad.exe Readme.txt), пункт "Справочная информация" (командная строка: winhelp MyHelp.hlp) и др. Все! Оставшиеся шаги пока можно не трогать.

Сохраните Ваш проект инсталлятора на диск (File -> Save As) в папку SETUP Вашего проекта. Теперь можно построить сам инсталлятор. Вы можете построить самораспаковывающийся exe-инсталлятор (один единственный файл exe) или сделать инсталлятор, разбитый на диски. В последнем случае, объем дисков указывается в меню Options -> Disk Spanner. Настоятельно рекомендую Вам указывать емкость меньшую, чем полная емкость диска (например, для диска 3.5" укажите емкость 1440 Kb). Такой нехитрый прием позволит: записать Ваш инсталлятор на диски, имеющие 1-2 сбойных секторов, и помеченных как плохие сектора, а не обязательно на новые, абсолютно хорошие диски (всякое бывает!); восстановить (иногда получается) пользователю инсталлятор при сбое диска с помощью программы Scandisk - для этого требуется свободное место на диске. Теперь выберите в меню пункт Build -> Build Self-Extractor для создания самораспаковывающегося exe или Build -> Build Disk Spanned Setup для создания инсталлятора на дискеты. Построение занимает некоторое время. После построения Вы можете найти Проводником Windows в папке C:\Program Files\GKSetup\Output или файл *.exe (если Вы строили самораспаковывающийся инсталлятор) или файлы setup.* - если вы строили инсталлятор для дисков. Перенесите их к себе в проект в папку SETUP и можете их распространять пользователям (после проверки на своей машине, естественно!)

Русификация GKSetup

GKSetup русифицируется с помощью библиотек поддержки языков (dll). Эти библиотеки можно найти на домашней странице GKSetup в Интернете (она пару раз переезжала, поэтому посмотрите в хелпе:) Русских переводов даже несколько (один из них - мой). Если Вы не найдете нужной поддержки - Вы можете написать автору, Gero Kuhn, и попросить его выслать Вам эти файлы. Обычно Gero просит за регистрацию копии GKSetup (и для поддержки Вашей копии) регистрированную копию любого Вашего приложения - вышлите ему свое приложение, не жадничайте (Gero по-русски знает всего несколько слов: BOLSHEE SPASEBO, ZDRASTVI и MOSKVA - проверено! Как он будет его использовать? ). Кстати, Gero Kuhn может выслать Вам исходный код этой библиотеки на языке С. Если Вы сами не можете ее откомпилировать, то можно просто перевести текстовые строки на русский язык, отослать обратно его автору и попросить его откомпилировать (я так и сделал!).

Недостатки GKSetup

На мой взгляд, GKSetup имеет только один существенный недостаток. При запуске инсталлятора GKSetup разворачивает сжатые файлы во временной папке и только потом их инсталлирует. В этот момент никаких окон на экране пользователя не появляется. Однажды я сделал инсталлятор, в котором была база данных объемом 15 Mb (сам инсталлятор занимал 8 дисков) - так вот, даже на сравнительно быстрых машинах процесс разворачивания занимал около минуты - двух:. Сидит юзер, смотрит на пустой экран недоуменно, винт жужжит вовсю, а юзер ежится и думает: "Наверно, зловредные вирусы!" Поэтому я и рекомендую использовать GKSetup для сравнительно небольших приложений (скажем, не более 5-8 дисков инсталлятора).

Создание инсталлятора с помощью Wise Installation System

Как я уже говорил, Wise Installation System, на мой взгляд, лучшая альтернатива VFP Setup Wizard. Если Вы уже имели дело с тем же GKSetup, то Wise Installation Вы освоите за полчаса, настолько он удачно и интуитивно понятно сделан. Среди неоспоримых достоинств Wise Installation можно отметить: крайне простая русификация (украинизация, белорусофикация, латвинизация, ивритизация. суахилизация и проч.); Окно Wise появляется сразу же после старта инсталлятора (см. недостатки GKSetup); Встроенная поддержка Visual FoxPro, Visual Basic и Delphi. Причем, это сделано какой-то интересной ссылкой, так как Wise автоматом берет именно ту версию продукта, которая у Вас установлена; В отличие от GKSetup, который поддерживает до 3 различных типов установки, Wise предлагает выбрать компоненты установки (их может быть много), то есть инсталлятор более гибкий; Целая куча эффектов для показа заставок и рекламы продукта в момент инсталляции; В версии 7 есть специальный мастер, который отслеживает работу Вашего приложения и сам (!) определяет необходимые файлы поддержки и ActiveX; Может автоматически генерировать случайные серийные номера для Вашего приложения (соответственно, инсталлятор срабатывает только на свой номер!) Может делать инсталляции для установки из Интернета (ни разу не пробовал!) Мне известны две версии продукта: 6 и 7. Последняя - очень крутая, но и правда, занимает что-то около 70 Mb (6-я версия - 10 Mb). Вот внешний вид Wise Installation System 7: В принципе, построение инсталлятора с помощью Wise Installation не сильно отличается от GKSetup: нужно просто пройти через 6 основных этапов (на рисунке они хорошо видны вверху), на каждом из них проверяя, устанавливая и корректируя различные свойства Вашего инсталлятора. После чего нажать кнопку Compile. И все! Для желающих, можно переключится в Script Editor и посмотреть, как выглядит программа Вашего инсталлятора (можно также подкорректировать) Русификация Wise installation System Как мы уже отмечали, крайне простая. Нужно просто зайти в Edit Dialog Templates (редактор шаблонов диалога) и последовательно выбирая каждый диалог, просто перевести на нужный язык все элементы. Очень похоже на Visual Basic, на формы VFP тоже похоже: Потом зайти в установки компилятора и перевести два - три десятка строковых констант - и все! Все Ваши инсталляции будут полностью на желаемом языке. Wise Installation System не является freeware (бесплатным) продуктом, но он настолько хорош, на мой взгляд, что, если Вы серьезно занимаетесь программированием, то мы рекомендуем Вам рассмотреть вопрос об официальном приобретении этого пакета.