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

Извините, сайт в стадии реконструкции

............Excuse me, site in stage of the reconstructions.................
Показаны сообщения с ярлыком Статьи. Показать все сообщения
Показаны сообщения с ярлыком Статьи. Показать все сообщения

пятница, 30 октября 2009 г.

Создание файлов .msi

posted in SoftWare, Windows |

Как подготовить старые приложения к работе с Windows Installer с помощью WinINSTALL LE

Любой инструмент, облегчающий инсталляцию – а еще важнее, удаление программ – приносит ощутимую пользу. Поэтому мне нравится принцип универсальности, заложенный в файлах Windows Installer (.msi-файлах). Но готовые к работе с Windows 2000, приведенные к типу .msi приложения встречаются редко, поэтому каждый, кто хочет широко использовать файлы.msi, должен научиться создавать их. Это позволяет делать поставляемый вместе с Windows 2000 Server инструмент WinINSTALL Limited Edition (LE) фирмы VERITAS Software, обеспечивающий преобразование в .msi-формат. Однако процесс создания безупречного .msi-файла требует времени и усилий.

Когда-то для установки приложения было достаточно скопировать на жесткий диск пару файлов, возможно, указав при этом другой каталог. Но большинство современных прикладных программ состоит из множества файлов, в том числе отдельной программы специально для установки приложения. Как правило, программы установки выполняют несколько функций. Во-первых, они создают один или два каталога программы для хранения программных файлов и данных. Во-вторых, они размещают динамические библиотеки (DLL) на жестком диске машины, но не всегда в каталогах нового приложения; часто DLL размещаются в каталоге \winnt или \winnt\system32 (несмотря на возможность конфликтов прикладных DLL, сохраненных в этих каталогах, с библиотеками DLL операционной системы и других приложений). В-третьих, большинство приложений ассоциированы с определенными расширениями файлов и должны сохранить ряд параметров конфигурации, поэтому программа установки заносит расширение файла и параметры конфигурации в реестр. Наконец, инсталляторы приложений обычно помещают отдельный пункт в меню Start, Programs. Из этого перечня операций видно, почему программы установки так велики – им необходимо выполнять множество задач.

Администратору неудобно переносить программу установки и сопутствующие файлы на настольный ПК каждого пользователя и лично контролировать процедуру установки, ему нужен централизованный способ установки прикладных программ без вмешательства пользователя. Такой функциональностью располагает Active Directory (AD), но пользоваться файлами установки нелегко; для AD предпочтительны приложения в формате .msi. Но большинство поставщиков пока не выпускает свои продукты в .msi-формате. Поэтому, чтобы использовать AD для развертывания приложений, необходимо преобразовать большинство из них в формат .msi. WinINSTALL LE бесплатно поставляется в составе Windows 2000 Server (в папке \valueadd\3rdparty\mgmt\winstle на компакт-диске с Windows 2000), и многие администраторы отдадут предпочтение именно этому решению.

СТРОИМ ПАКЕТ .MSI

Для создания .msi-файлов в WinINSTALL LE используется метод моментального снимка, проверенный временем способ описания и инкапсуляции приложений. Чтобы сгенерировать .msi-файл для прикладной программы, следует приступать к работе на <чистом>, ранее не эксплуатировавшемся настольном ПК, который я называю прототипом – я всегда пользуюсь утилитой Symantec Ghost или службами Microsoft Remote Installation Services (RIS), чтобы очистить диск прототипа и начать с чистого листа.

Прежде чем инсталлировать приложение, следует запустить программу discoz.exe пакета WinINSTALL LE, которая составляет список файлов, каталогов и элементов реестра на прототипе – другими словами, discoz.exe генерирует моментальный снимок исходного состояния системы. Затем на прототипе устанавливается новое приложение и проводится его настройка в соответствии с требованиями пользователя. Для фиксирования любых изменений реестра компьютер следует перезагрузить – иногда эта операция необязательна, но она никогда не вредит. Затем программа discoz.exe запускается вновь. Она генерирует постинсталляционный моментальный снимок, отмечая все новые файлы, изменения в реестре и программные ярлыки. Discoz.exe собирает всю информацию об изменениях в указанном пользователем месте и строит соответствующий .msi-файл. В .msi-файле содержится информация об изменениях каталогов, файлов и реестра, а также набор инструкций для Windows Installer.

Я опускаю подробности работы Windows Installer, ограничившись двумя рекомендациями. Во-первых, при подготовке WinINSTALL к созданию предварительного моментального снимка программа спрашивает, следует ли выполнить расширенную проверку реестра (Enhanced Registry Scan). Проверка всегда полезна, этот флажок следует отметить. Во-вторых, система подсказки WinINSTALL предлагает не держать discoz.exe на прототипе. Лучше установить discoz.exe на другом ПК и выделить в общее пользование каталог программы в каталоге \Program Files второго компьютера. Следует подсоединиться к этому общему каталогу и запустить discoz.exe из него.

ИНСТАЛЛЯЦИЯ ПАКЕТА

Теперь пришло время взглянуть на каталог .msi-файла, в котором отражены файлы и структура устанавливаемого приложения. Работая над данной статьей, я создал .msi-файл для Lotus Organizer 6. Данный пакет содержал каталог с именем Lotus, и применение .msi-файла заставляет Windows Installer создать и заполнить файлами каталог с этим именем. В моем пакете есть также каталог с именем \winnt, из чего я заключил, что фирма Lotus создала Organizer с нарушением правил установки. Из каталога .msi-файла можно узнать и точный объем пространства, занимаемого приложением на жестком диске – в .msi-файле нет сжатых файлов, которые уменьшают размер установленного приложения.

Получив .msi-версию прикладной программы, можно инсталлировать приложение одним из трех способов. Во-первых, просто дважды щелкнуть на msi-файле. Во-вторых, использовать команду Msiexec /i, чтобы неявно загрузить файл из командной строки. Например, команда, показанная на Экране 1, инсталлирует пакет pilotdesk.msi из каталога \pilotdesk в каталоге приложений на server1 (как и большинство параметров команд в Windows, ключ /i нечувствителен к регистру.) В-третьих, можно воспользоваться политиками Group Policy, чтобы создать политику развертывания программного обеспечения (это тема для отдельной статьи).

После ряда экспериментов я убедился, что Windows Installer нельзя вызвать двойным щелчком на .msi-файле или командой Msiexec /i из командной строки: эти методы не позволили инсталлировать Organizer, когда я зарегистрировался в качестве пользователя без административных полномочий. Но когда я задействовал групповую политику Group Policy для нового .msi-файла, чтобы назначить Organizer тому же пользователю, а затем зарегистрировался от имени этого пользователя, и выбрал пункты меню Start, Programs, Organizer, то Organizer был установлен без проблем.

Почему же мне не удалось инсталлировать .msi-файл Organizer двойным щелчком мыши или по команде Msiexec? Во-первых, программа Setup приложения Organizer размещает некоторые файлы в каталогах \winnt и \winnt\system32, а по умолчанию пользователи без специальных полномочий могут только просматривать файлы в этих каталогах. Во-вторых, программа Setup приложения Organizer производит запись в два раздела реестра: HKEY_LOCAL_MACHINE\SOFTWARE и HKEY_CURRENT_USER\Software. Для каждой учетной записи пользователя имеется собственный раздел HKEY_CURRENT_USER\Software, в который пользователи могут беспрепятственно вносить изменения. Но только владелец учетной записи System и члены локальной группы Administrators могут производить запись в раздел HKEY_LOCAL_MACHINE.

Тогда почему же удалось успешно провести инсталляцию с помощью Group Policy? Потому что операционной системе не было известно, что Msiexec выполнялась по запросу от имени моей учетной записи. Windows 2000 исходила из того, что Msiexec была запущена с учетной записью System, которая имеет право выполнять запись в каталоги \winnt и \winnt\system32. Windows Installer организован в виде службы отчасти потому, что Windows Installer может работать с учетной записью пользователя, отличной от записи пользователя, зарегистрировавшегося на рабочей станции в данный момент. Windows Installer может работать даже в случаях, когда на компьютере не зарегистрирован никто, например, в случае с такими службами, как Microsoft IIS.

После того, как .msi-файл Organizer был связан с моей учетной записью с помощью политик Group Policy, обнаружилось досадное обстоятельство: инсталляция Organizer происходила всякий раз, когда я регистрировался, независимо от того, была запущена программа или нет. Это случилось потому, что Organizer не только внес свое имя в стандартное меню программ, но и поместил свой ярлык в мою папку Startup. В процессе регистрации ярлык активизировался, и начиналась установка Organizer. Поэтому я перестроил систему на прототипе и удалил элемент Organizer из папки Startup.

Автоматический вызов некоторых других приложений, для которых мною были созданы .msi-файлы, происходил по другой причине: им соответствовали элементы в менее известном разделе HKEY_CURRENT_USER\Software\Microsoft\ Windows\CurrentVersion\Run (элементы некоторых программ могут размещаться и в файле параметров конфигурирования win.ini, хотя я не встречал их уже несколько лет). Из всего сказанного можно сделать вывод, что нужно быть готовым несколько раз перестраивать .msi-файл, не забывая каждый раз проверять его.

ИСПОЛЬЗОВАНИЕ ПОДРУЧНЫХ СРЕДСТВ

Мне часто задают вопрос, зачем нужно предоставлять учетные записи уровня Administrator пользователям, разрешая им устанавливать программы на своих машинах. Теперь ответ на этот вопрос очевиден: подобно Lotus Organizer, многие программы установки приложений производят запись в каталоги и разделы реестра, недоступные пользователям, не имеющим административных прав. Но приложениям нет необходимости размещать DLL в системных каталогах или записывать элементы в раздел реестра HKEY_LOCAL_MACHINE.

Если необходимо использовать приложение, которое инсталлирует DLL в системном каталоге, можно попробовать два приема. Во-первых, следует попытаться переместить все файлы, записанные приложением в каталоги \winnt и \winnt\system32, в каталог приложения. После того, как я проделал эту операцию, Organizer продолжал работать. Во-вторых, можно переименовать раздел приложения в разделе HKEY_LOCAL_MACHINE\SOFTWARE (если программа установки переименовала какие-нибудь разделы) и посмотреть, будет ли приложение работать по-прежнему. Organizer не работал. Другой вариант – добавить локальную группу Authenticated Users в группу пользователей, имеющих право вносить изменения в HKEY_LOCAL_MACHINE\SOFTWARE, хотя при этом несколько понизится уровень безопасности системы. Но самое лучшее решение – известить поставщиков ПО, что вы не купите следующую версию программы, если она не будет выполнена в соответствии со спецификациями Windows 2000.

Марк Минаси
16.10.2001

Марк Минаси – редактор Windows NT Magazine, имеет сертификат MCSE; является автором книги “Mastering Windows NT Server 4.0″ (издательство Sybex). С ним можно связаться по адресу: mark@minasi.com.

пятница, 18 июля 2008 г.

Самонадевающиеся Шаровары

Автор: Алексей Павленко
Опубликовано в журнале "Компьютерра" №17-18 от 15 мая 2002 года

Тема разработки shareware и freeware, о которой шла речь в моей предыдущей статье («Шаровары наших дней», «КТ» #432), воистину бесконечна. Но на этот раз я хочу коснуться не философских и экономических аспектов, а конкретного инструментария шареварщика. Как известно, встречают по одежке, а провожают по уму. Глупо, а что делать? «Жизнь сейчас такая тяжелая», как любит говорить мой начальник. Что, собственно, видит человек, прежде чем начинает непосредственно пользоваться программой? Опустим процесс поиска, выбора и скачивания конкретного продукта, предположим, что на винчестере пользователя уже лежит нужный файлик…

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

Что и говорить, запакованный файл - несомненное благо. Но чтобы извлечь из него десяток файлов, нужно запустить архиватор, создать каталог и переписать туда содержимое, да еще и сделать ярлыки для быстрого запуска программы. Неудобно и долго.

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

Вы можете возразить, что давным-давно существуют самораспаковывающиеся архивы и что тот же WinRAR может делать их так, что при открытии и текст лицензии показывается, и ярлыки создаются. Но, как писал когда-то Сергей Лукьяненко, «есть игры, а есть Игры». Точно так же дело обстоит и с инсталляторами. WinRAR выглядит неумехой рядом с монстром под названием InstallShield. Если название вам ничего не говорит, то напомню: градиентный синий экран и панелька с тремя вертикальными индикаторами прогресса 1. По части создания инсталляционных файлов этот продукт может ВСЕ! Услугами InstallShield пользуются многие крупные производители софта. И даже Microsoft им не брезгует.
   Похожими возможностями обладает Wise Installation System. Впрочем, мелкие фирмы, а тем более шареварщики все же предпочитают более легкие продукты, не обремененные лишними функциями, - и, разумеется, более дешевые, поскольку цена монстров прямо пропорциональна их возможностям.
Справедливости ради уточню, что существует облегченная версия InstallShield Express, которая бесплатно поставляется со многими языками программирования. Но мне она показалась слишком упрощенной.

Весь процесс создания дистрибутива в ней сводится к последовательным шагам:

заносится общая информация (название программного продукта, его версия, адрес сайта, телефон);

задаются режимы установки (полная, минимальная) и принадлежащие им файлы;

указываются дополнительные библиотеки и драйверы, которые надо установить (MFC, MS Chart, MS Access Driver);

производится настройка изменений реестра, INI-файлов и другой системной информации;

создаются ярлыки;

указываются диалоги, которые будут отображаться во время установки;

задаются требования к компьютеру (1024 Мбайт памяти, Pentium-V) и программному обеспечению (Windows 3000 Beta 17 with SP 8) и др.

После этого можно собрать установочную программу и протестировать ее.

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

Третья утилита из весовой категории «монстры» - Installer VISE. Функциональность практически такая же, что и у InstallShield, но вот «интуитивная понятность» интерфейса, увы, подкачала. Не считая себя тормозом или отставшим от современных принципов софтостроения человеком, я, по привычке отказавшись от визарда, битый час тупо кликал мышью, чтобы собрать дистрибутив.
Впрочем, у этого инсталлятора есть «экономическое» преимущество перед InstallShield: шареварщики могут пользоваться им бесплатно - за показ окошка во время установки. Свой альтруизм разработчики объяснили в нескольких проникновенных строчках: «Наша фирма начиналась с двух друзей, занимающихся shareware. Мы помним, как тяжело начинать создавать продукты, не имея бюджета. Поэтому мы решили дать возможность создателям утилит пользоваться Installer VISE бесплатно».

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

Начну с Inno Setup. Очень простая утилита, которая подойдет практически всем. Если пользоваться визардом, то покажется около восьми диалоговых окон, после заполнения которых будет готов дистрибутив. Все настройки хранятся в текстовом файле, который нетрудно отредактировать. Программа бесплатная - и, думаю, большинству шареварщиков возможностей Inno Setup хватит с головой. Впрочем, если вас что-то не устроит, можно скачать исходники на Delphi и сконфигурировать ее «под себя».

Следующий бесплатный и простой продукт - Setup Generator. Понятный графический интерфейс, возможность менять язык интерфейса инсталлятора, и, что особенно ценно, размер получаемого файла дистрибутива меньше, чем у всех прочих просмотренных мною программ. Я даже знаю почему - там нет заставочных картинок!

Наконец, дошла очередь до инсталлятора, который я считаю самым лучшим с точки зрения предоставляемых возможностей, но с которым постоянно возникают проблемы у пользователей моего скромного детища - программы mp3Tag 4. Называется он Ghost Installer. Насколько можно судить по информации, размещенной на сайте разработчика, инсталлятор очень популярен и поставляется в нескольких вариантах.
Продукт умеет все то же, что и Setup Generator, плюс имеет кучу дополнительных функций. Может быть, это связано с особенностями моего мышления, но я не представляю идеальный инсталлятор без переменных. Здесь они реализованы 5. Еще одним большим достоинством Ghost Installer я считаю возможность выбора языка общения в процессе установки. Иначе получается нелогично: я написал программу с поддержкой многоязыкового интерфейса, а ее инсталляция проходит только на одном. Встречают-то по одежке...
А теперь о минусах. Недостаток первый: в Ghost Installer отсутствует графическая среда. Приходится использовать скриптовый язык, который редактируется в текстовом редакторе. Не хватает и кое-каких нужных в хозяйстве вещей, например вопроса о создании ярлыков на рабочем столе: можно только «жестко» их туда поместить, что многих пользователей раздражает (знаю по себе). Зато «безвозмездно, то есть даром».
У той же фирмы есть и «альтернативный» инсталлятор - Ghost Installer Studio, в который входит визуальная оболочка gDesigner. Работать с ним, конечно, удобнее - можно пользоваться графической средой, а можно все тем же скриптовым языком, который хранится в формате XML. Но в бесплатной версии некоторые возможности отсутствуют.

У всех описанных мною инсталляторов есть и достоинства, и недостатки - как, впрочем, у любых программ. Но если в вас живет неистребимая тяга к перфекционизму, попробуйте создать свой инсталлятор. Ежели он получится хорошим, я готов им пользоваться и написать еще одну статью.
1 (обратно к тексту) - Я до сих пор не знаю, что означает правый, у которого постоянно горит «Low».
2 (обратно к тексту) - При запуске программы установки сразу можно определить тип инсталлятора. Если компьютер уходит в своп, не переставая мигать лампочками, это скорее всего - InstallShield.
3 (обратно к тексту) - У меня получилось более 4 мегабайт против 600 килобайт.
4 (обратно к тексту) - См. «Домашний компьютер» №4 за этот год.
5 (обратно к тексту) - Конечно, «монстры» тоже имеют развитый скриптовый язык, в котором есть не только переменные. Читайте на сайте тему номера Штатский советник и другие статьи из журнала "Компьютерра" от 15 мая 2002 года.

четверг, 17 июля 2008 г.

Использование InstallShield

Создание программы-установщика за 10 минут.

[29.08.2002, Денис Колисниченко, dhsilabs@mail.ru] 

Рано или поздно любой разработчик должен создать программу установки для своего программного продукта. Не запакуешь же программу вместе со всеми библиотеками в Zip-архив, а в файле install.txt не поместишь сведения – этот файл скопируйте туда-то, в реестре пропишите то-то? Некоторые разработчики пишут собственные программы-инсталляторы, однако это не очень удобно – для каждого нового проекта писать программу установки. А если попытаться сделать этот инсталлятор универсальным, то получится аналог того или иного уже написанного кем-то средства для создания дистрибутивов программного обеспечения. Зачем заново изобретать велосипед?

Программы создания дистрибутивов (или проще – инсталляторы) предназначены для автоматизации всего процесса установки программного обеспечения. Существуют два основных типа инсталляторов – скриптовые и те, которые основаны на бесскриптовой технологии. В первом случае вам нужно написать скрипт, иногда очень длинный, данный сценарий будет выполнен программой установки, то есть последовательность действий инсталлятора определяете вы сами. По-моему, это чем-то похоже на написание собственного инсталлятора. К первому типу относятся много программ, самой популярной из которых является, наверное, Wise.

Программы, основанные на бесскриптовой технологии, намного проще в использовании, однако имеют ряд ограничений, например, с помощью Borland InstallShield вы можете создать инсталлятор только для программы, разработанной в одной из IDE Borland, например, Delphi или CBuilder. Конечно, с их помощью можно создать программу установку и для любого другого exe-файла и набора библиотек, но это только при условии, что вы точно знаете, какие библиотеки использует программа. При создании с помощью старой версии (до версии 3) InstallShield инсталлятора для VisualBasic-проекта у вас непременно возникнуть сложности. Почему старой версии? Потому что новая версия поддерживает программы, разработанные на VB и VC. Более подробно об этом будет сказано чуть ниже.

К недостаткам скриптовых программ создания дистрибутивов нужно отнести сложность написания этого самого скрипта. В то время как с помощью InstallShield можно создать инсталлятор за какие-нибудь 5-10 минут – как говорится, дважды щелкнув мышью :). Кроме того, специфические проекты, например база данных, требует определенных знаний расположения системных файлов для того или иного проекта. Честно говоря, я до сих пор не знаю, сколько файлов (и какие именно) входят в состав BDE. Как я могу написать программу установки базы данных, не зная даже названия библиотек? Мне и незачем все это знать – InstallShield сама подготовит все необходимые файлы.

Итак, перейдем к непосредственному рассмотрению процесса создания инсталлятора. Как вы уже догадались, я буду использовать Borland InstallShield Express Limited Edition. Почему именно ограниченную версию (Limited), а не полную (Full)? Первая является бесплатной, а вот за вторую нужно заплатить. Поскольку платить деньги за инсталлятор, пусть даже довольно удобный и мощный, у меня особого желания нет, я выбрал Limited Edition. Но это не означает, что в статье не будут описаны возможности полной версии.

Прежде всего, надо определиться, какие файлы нам нужно поместить в дистрибутив и разбить их на группы. Это не первый этап создания инсталлятора – ведь мы еще не запустили InstallShield. Разбить файлы нужно для себя, как говориться, на бумажке, чтобы потом быстро создать нужные группы и поместить в них нужные файлы. Для определенности я использовал три группы:
Always Install – основные файлы, которые всегда должны быть установлены
Plugins – дополнительные возможности программы
Help – справочная система

Запускаем InstallShield и выбираем пункт меню Create a new project. После создания нового проекта в левой части окна InstallShield мы видим все этапы создания инсталлятора. Уже пройденные отмечаются красной птичкой
Переходим в раздел General Information и вводим общую информацию о программном продукте – авторские права, компания, название продукта, пиктограмма, путь для установки и т.д. Если параметр Disable Change button равен Yes, то кнопка Change (Изменить) будет недоступна. Кнопки Change (Изменить или Добавить/Удалить), Remove (Удалить) и Repair (Восстановить) появляются при запуске программы установки вашего программного продукта, если он уже был установлен на компьютере.

Затем нужно определить те самые группы файлов. В терминологии InstallShield эти группы называются Features (Функции). Поэтому переходим в раздел Features и создаем группы. Для создания группы активизируйте корень схемы, то есть надпись Features и нажмите кнопку Insert. Удалить группу можно с помощью клавиши Delete, а переименовать группы можно нажатием F2. Можно также воспользоваться контекстным меню (правая кнопка мыши) и выбрать соответствующие команды из него. Кроме групп вы можете создавать также и подгруппы.

Каждая группа имеет свои параметры Description, Required, Visible, Advertised и Comment. Параметр Описание (Description) задает описание группы файлов. Постарайтесь придумать понятные описания – их ведь увидит пользователь. Если значение параметра Требуется (Required) равно Yes, то данная группа файлов должна быть установлена всегда. Устанавливать значение Yes рекомендуется для основной группы файлов.

Параметр Visible определяет режим отображения группы файлов в режиме выбора компонент (Custom). Значение Visible and Collapsed означает, что данная группа будет отображена вместе со своими подгруппами в свернутом виде. Для ее раскрытия пользователю нужно будет нажать значок плюс рядом с названием группы. Значение Visible and Expanded означает, что данная группа будет отображена вместе со своими подгруппами в развернутом виде. Значение Not Visible запрещает отображение группы в режиме установки по выбору (Custom). Это значение нужно устанавливать для групп, которые всегда должны быть установлены: если нельзя отменить установку группы, так зачем сообщать об этом пользователю, чтобы он безрезультатно пытался снять птичку справа от названия группы?

В разделе Setup Types вы определяете типы установки (режимы) – Typical (Обыкновенная), Minimal (Сокращенная), Custom (По выбору). Для каждого типа установки можно определить группы файлов, которые будут установлены, при условии, что пользователь выберет соответствующую группу. Для типов Typical и Custom обычно выбирают все группы – в первом у пользователя даже и спрашивать никто не будет что устанавливать, а что – нет. А во втором – пользователь сам сможет выбрать, что ему устанавливать. При сокращенной установке обычно выбирается только группа Always Install, хотя это зависит от вашего желания.

В разделе Upgrade Paths можно указать пути для поиска предыдущих версий программы, если такая была установлена. Раздел Upgrade Path доступен только в полной версии InstallShield.

Теперь нужно указать, какие файлы должны входить в ту или иную группу. Перейдите в раздел Files. Окно данного раздела быдут разбито на четыре основные области: Source computer's folders (Каталоги компьютера-источника), Source computer's files (Файлы компьютера-источника), Destination computer's folders (Каталоги компьютера-назначения) и Destination computer's files (Файлы компьютера-назначения).
Обратите внимание на группу, с которой вы работаете (список Feature). Она указывается в верхней части окна раздела Files. Не спешите просто перетаскивать файлы из компьютера-источника на компьютер-назначения! Сначала нужно определить каталоги компьютера-назначения, в которые будут копироваться те или иные файлы. Щелкните правой кнопкой мыши на значке компьютера назначения и выберите команду Show Predefined folder (Показать предопределенный каталог). Выберите каталог INSTALLDIR. Вы должны обязательно выбрать его, иначе инсталлятор не будет знать, куда копировать выбранные вами файлы. Значение данного параметра определяется обычно так:
[ProgramFilesFolder]\\Default

Уточнить это (если вы еще этого не сделали) вы можете в разделе General Information, параметр INSTALLDIR.

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

Раздел Files and Features предоставляет вам информацию о файлах, находящихся в той или иной группе, в виде списка. По сути, это информационный раздел, помогающий вам ориентироваться в проекте, поэтому сразу переходим к следующему разделу.

Раздел Object/Merge Modules очень важен – он позволяет импортировать в проект различные модули. Нам, как разработчикам баз данных, очень важен модуль BDE_ENT, который позволяет добавить BDE в наш проект установки.

После активизации данного модуля будет запущен мастер BDE designer. Сначала нужно указать существующий файл конфигурации BDE или создать новый. Затем нужно запустить Borland/Inprise BDE Merge module – просто нажмите на кнопку Launch. Запуск этого модуля необходим для определения псевдонимов (aliases) баз данных
Выберите драйвер баз данных, я использую базы данных в формате Paradox, поэтому отметил только этот драйвер. Затем нажмите кнопку Add для добавления нового псевдонима
Здесь все просто: укажите название псевдонима, выберите тип драйвера и укажите параметры, если необходимо. Параметры указываются в формате Параметр=Значение.

Осталось только заметить, что BDE не поддерживает сжатых дисков, поэтому если вы попытаетесь построить однодисковый сжатый SingleMedia-релиз, у вас ничего с этого не выйдет.

Нам также может быть полезен модуль BDEClientDataSet – локальный набор BDE.

Кстати, обратите внимание на модули, которые можно добавить в проект. Среди них не только компоненты, предназначенные для Delphi-проектов, но и компоненты, которые позволяют создавать программы установки для проектов MS Visual C и Visual Basic. Это Runtime-библиотеки С++, MFC и даже VB Virtual Machine. Не верите? Посмотрите примеры проектов программ установки и среди них вы найдете VB-проект. В предыдущих версиях InstallShield такого разнообразия не было: теперь я могу установить на компьютер клиента всю библиотеку классов MFC, но вот только зачем???

В версии 3 программы InstallShield появился очень полезный раздел – Dependencies (Зависимости). Зависимости – это связи программы с различными библиотеками (DLL). Существуют два режима определения зависимостей: статический и динамический. В первом случае сканируются все *.exe, *.dll, *.sys, *.ocx, *.com, *.cpl файлы и добавляются зависимости в проект. При динамическом режиме запускается приложение и отслеживается, какие DLL и OCX эта программа использует. По окончании проверки эти библиотеки добавляются в проект. К сожалению оба режима проверки зависимостей доступны только в полной версии программы.

В разделе Shortcuts/Folders определяются ярлыки и программные группы. Вы можете добавить ярлыки не только в меню Пуск, но и в меню SendTo (Отправить в) и Рабочий стол.

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

Выбрать нужные вам ODBC-ресурсы вы можете в одноименном разделе – ODBC Resources. Выберите нужный вам ресурс (я выбрал Paradox) и перейдите к следующему разделу.

Если вам нужно добавить записи в какой-нибудь INI-файл, например, system.ini, то это очень просто сделать в разделе INI File Changes.

Зарегистрировать расширение файла для своей программы можно в разделе File Extensions. В нашем случае в этом нет необходимости – мы используем только DB-файлы, а для их изменения предназначены куда более удобные средства, чем наша программа по начислению заработной платы.

Раздел Environment Variables предназначен для изменения переменных окружения. По правде говоря, я даже приблизительно не знаю как выглядит этот раздел, потому что он доступен только в полной версии.

Определить диалоги программы, а также определить их внешний вид и установить параметры каждого из них вы можете в разделе Dialogs. Теперь для каждого диалога можно определить свой баннер (хотя можно использовать и баннер по умолчанию).

Разделы BillBoards и Text and Messages доступны в полной версии программы. В первом разделе вы можете (или могли бы, будь у вас полная версия :)) определить BMP-файлы, которые будут показываться пользователю во время установки, рекламируя вас, вашу компанию и другие ваши продукты. В разделе Text and Messages вы можете редактировать абсолютно все сообщения, используемые программой-инсталлятором – вплоть до названия кнопки Next.

Раздел Requirements позволяет установить системные требования для вашей программы – операционная система, процессор, объем ОЗУ, разрешение экрана и глубина цветов.

Все, что нам осталось – это построить релиз, протестировать его и записать на какой-нибудь носитель информации. Все это можно сделать в разделе Prepare for Release. Сначала выберите предполагаемый носитель информации, например, CDROM, установите его параметры – объем, сжатие и другие. Будьте осторожны со сжатием: помните, что BDE не поддерживает сжатия.

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

Все ваши комментарии, вопросы и пожелания вы можете отправить по адресу dhsilabs@mail.ru

Такие разные инсталляторы

Татьяна Михно, Издательский Дом "КОМИЗДАТ"

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

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

Для сравнения инсталляторов воспользуемся приложением Ins - это простенький текстовый редактор, за 10 минут созданный в MS Visual C++, MFC. Он состоит из двух файлов: C:\InS.src\ins.exe и C:\InS.src\mfc42.dll. Чтобы корректно установить его на другой компьютер, нужно:
скопировать исполняемый файл ins.exe на жесткий диск;
скопировать в системный каталог Windows файл библиотеки MFC mfc42.dll;
прописать в системном реестре каталог установки и текущий каталог редактора;
создать каталог С:\Мои документы - текущий каталог редактора по умолчанию;
создать ярлык для запуска Ins на рабочем столе и в меню Пуск => Программы панели задач.

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

Семейство InstallShield

Одним из гигантов производства инсталляторов (причем гигантов в мировом масштабе) признана компания InstallShield. На ее сайте (http://www.installshield.com) представлена целая линейка этих продуктов - различных по сложности и стоимости (кстати, после регистрации можно получить пробную 30-дневную версию:
InstallShield Developer (поддержка распараллеленной установки, интеграция с Visual Studio .NET, создание патчей, визуальный редактор диалогов, контроль исходного кода);
InstallShield Professional (скриптовый язык, средства отладки, многочисленные настройки пользовательского интерфейса, возможность создания дистрибутивов под Web);
InstallShield Express - облегченная версия, простая в использовании, поставляется с Delphi 5 и Visual Studio 6;
InstallShield MultiPlatform (поддержка Linux, Solaris, HP-UX, AIX, OS/2, Windows и OS/400, функционирование на основе Java VM);
InstallShield AdminStudio (системное администрирование, управление рабочим процессом, разрешение конфликта приложений, поддержка модулей MSI (Microsoft Installer));
InstallShield DemoShield - средство создания итерактивных презентаций, каталогов на компакт-диске;
InstallShield Update Service - инструмент для создания и управления обновлениями программного обеспечения на компьютерах клиентов;
InstallShield Package for the Web - средство для распространения приложений через интернет, для доставки и цифровой подписи интернет-модулей.
InstallShield for Windows Installer

Среди разработчиков особую популярность приобрел InstallShield for Windows Installer. У этого продукта понятный интерфейс, подсказки на каждом шагу, да и занимает он на жестком диске всего 66 Mб.
Мастера в InstallShield for Windows Installer удобны и продвинуты; кроме того, предусмотрена возможность изменения настроек дистрибутива в следующих секциях раздела Workspace:
Project (общие настройки проекта, пути, переменные проекта, строковые ресурсы инсталлятора);
Setup Design (файлы, включенные в проект (см. рис. 2), пути реестра, ярлыки, регистрация COM-объектов и типов файлов, управление службами Windows NT);
Sequences (последовательность инсталляции);
Actions/Scripts (комментарии к действиям, добавление скриптов);
User Interface (настройка интерфейса: диалогов и сообщений);
Release — результат (дистрибутивы и log-файлы их создания (рис. 1); подстройка под физический носитель (сеть, компакт-диск), посредством которого будет распространяться приложение; языки интерфейса).
Мастер (wizard) создания дистрибутива (кстати, достаточно длинный: 11 шагов, в каждом из которых несколько настроек) справился с поставленной задачей. Дистрибутив InS занял 872 Mб (с компрессией, без модулей MSI).
InstallShield Professional
Наиболее весомое (267 Mб в полной установке) и наиболее сложное средство создания дистрибутивов. InstallShield Professional 6.2 (рис. 3) имеет собственный скриптовый язык, большое количество настроек и предназначен для создания дистрибутивов крупных корпоративных приложений.
При создании нового проекта основную работу (как и в случае с предыдущим продуктом) можно поручить мастеру - для обычного проекта или для проекта Visual Basic. Мастер задаст много вопросов, потом немного попыхтит и, в конце концов, покажет проект инсталляции, скомпилировав который, мы и получим дистрибутив.
На левой панели InstallShield Professional видны семь вкладок, каждая из которых отвечает за свою группу настроек инсталляции:
Scripts - здесь находится основной скрипт процесса инсталляции - файл setup.rul, который можно создать с помощью мастера, а после редактировать вручную, отлаживать и компилировать. Скриптовый язык InstallShield немного похож на VB, но вполне поддается пониманию;
File Groups - на этой вкладке в проект добавляются файлы: исполняемые, библиотеки, файлы помощи и примеров;
Components - здесь перечислены компоненты проекта. Они обязательно должны включать группы файлов из предыдущего раздела;
Setup Types - тут описываются типы установки (компактная, обычная, пользовательская) и то, какие компоненты из предыдущего раздела включаются в каждый тип установки;
Setup Files - здесь перечислены файлы, включенные в инсталляцию, настраиваются зависимости от операционной системы и языка. Тут же можно отредактировать или заменить заставку;
Resources - ресурсные файлы инсталляции: таблица переменных проекта (для каждого языка своя), записи в реестр, включение в меню Пуск => Программы => Автозагрузка, добавление объектов различных сред исполнения;
Media - на этой вкладке находится результат нашей работы: дистрибутив, файлы журнала и отчета. Широко варьируется способ распространения дистрибутива: на компакт-диске, дискетах 3,5", через интернет и пр.
Размер дистрибутива InS занял 2 Mб.

Wise InstallMaster

Wise InstallMaster 8.1 - произведение компании Wise Solutions (http://www.wise.com) - обладает не меньшей функциональностью, чем предыдущий продукт. Однако его интерфейс более понятен простому человеку.
Процесс создания дистрибутива разбит на 6 этапов:

1. files and components - задается список файлов и компонент, составляющих наше приложение. В этом разделе нужно указать, откуда и какие файлы помещать в дистрибутив, куда их класть при инсталляции. Задаются также настройки для патчей, деинсталляции, шрифтов, сред исполнения (runtime) Visual Basic, Visual Foxpro, BDE, Crystall Reports, Windows и баз данных;

2. system additions - в этом разделе задаются настройки для иконок, ключей реестра, INI-файлов и регистрации типов файлов Windows. Здесь же добавляются службы Windows NT и устройства Windows 3.1х и 9х, необходимые для работы приложения. Кроме того, задаются изменения, которые необходимо добавить в файлы autoexec.bat и config.sys, а также информация о том, в каком каталоге создавать log-файл инсталляции нашего приложения;

3. user system checks - этот раздел отвечает за системные требования нашего приложения к компьютеру пользователя и ранее установленные версии нашего приложения;

4. wizard appearance - в этом разделе описывается, как будет выглядеть процесс инсталляции. Редактированию поддаются фон и диалоговые окна, можно добавить свою рекламу, которая будет показываться в процессе инсталляции;

5. advanced functionality - в раздел включены возможности защиты дистрибутива паролем, online-регистрации и поддержки Windows CE;

6. finish - здесь указывается, в каком виде будет создан дистрибутив (в одном файле или в нескольких), и создавать ли CAB-файл. В этом же разделе находятся настройки для распространения приложения через интернет, контроля версий и специальные настройки для установки и удаления в Windows 2000.

Дистрибутив приложения InS, созданный в Wise, занял 600 Kб.

Следует заметить, что с сайта компании-изготовителя можно загрузить не только 30-дневную демонстрационную версию инсталлятора под Windows, но и надстройки для нескольких сред исполнения (runtime) и руководство пользователя. Дистрибутив Wise InstallMaster 8.1 занимает 9 Мб, а после установки на жесткий диск - 15,5 Мб.

Inno Setup

Далее в нашем хит-параде — Inno Setup. Это небольшой (1,1 Мб - дистрибутив, 2 Мб - в установке), но очень шустрый (а главное, бесплатный) продукт. Разработчик - Jordan Russel (http://www.jrsoftware.org/isdl.php).
Inno Setup может стать хорошим решением для распространения совсем простых программ. Имеет 2 режима - мастер установки и редактирование скрипта. Позволяет показать файл лицензии, добавить ярлык нашей программы в меню Пуск и на рабочий стол, запустить программу после установки, но не может работать с реестром.

За 2 минуты (в нем действительно просто разобраться!) Inno Setup создал файл setup.exe - дистрибутив нашей программки размером 700 Кб. Но, к сожалению, он справился не со всеми пунктами поставленной задачи.

Quick Install Maker 2000

Программа компании MJK Software Writers, Inc (http://www.mjksw.com) сразу очаровывает приятным и нестандартным интерфейсом.
Большие и с красивыми рисунками кнопки расположены удобно; ничего лишнего (кроме назойливых приглашений зарегистрироваться) нет. Четыре правые кнопки отвечают за следующие аспекты создания инсталляции:
Main Screen - настройка внешнего вида инсталляции нашего приложения: фон или изображение на экране, надписи, а также начальные параметры установки;
Install Files - включение в инсталляцию файлов, добавление ярлыков на рабочий стол и в меню Пуск * Программы;
INI\REG - добавление ключей реестра или INI-файла, строк в файлы autoexec.bat и config.sys;
Disk Builder - создание дистрибутива, его архивирование и копирование на дискеты.

Демо-версия Quick Install Maker 2000, которую можно загрузить с сайта производителя, весит 2,2 Мб, а установка программы занимает 2,8 Мб.

Дистрибутив InS занял 754 Kб, с поставленной задачей справился полностью. Правда, при установке несколько раз сообщил о том, что он не зарегистрирован и вообще является демо-версией.

Конечно, инсталляторов существует намного больше, чем рассмотрено в этой статье. Бесплатные и условно-бесплатные продукты различных компаний и отдельных разработчиков можно загрузить с сервера SoftArea.ru или SoftPC.ru. Если уж на то пошло, инсталлятор можно написать самостоятельно.

Инсталляторы.

 Иван Никитин


Итак, Ваше приложение работает, и Вы, вроде бы, не находите в нем ошибок. Что дальше? А дальше вот что. Любое приложение пишется и создается для конечного пользователя. Это аксиома, и теперь Ваша задача донести приложение до него. Как, наверно, Вы уже попробовали, простое копирование каталога (папки) Вашего проекта на пользовательскую машину ничего не дает. Чаще всего приложение просто отказывается работать, ссылаясь на отсутствие библиотек поддержки 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 (бесплатным) продуктом, но он настолько хорош, на мой взгляд, что, если Вы серьезно занимаетесь программированием, то мы рекомендуем Вам рассмотреть вопрос об официальном приобретении этого пакета.

вторник, 8 июля 2008 г.

Создание инсталлятора

Создание инсталлятора


Созданную новую версию программы, в принципе, уже можно распространять среди пользователей. Запаковать ЕХЕ-файл ZlP-архиватором, добавить в этот архив readme-файл и файл справки, и разместить получившийся ZIP-файл в Интернете. Однако для серьезной shareware-программы этого мало. Нужно создать к своему продукту специальную программу установки, или, как ее еще называют, инсталлятор ("install" - устанавливать)

Почему shareware-программе необходим инсталлятор? На это есть несколько причин:
Большинство крупных архивов программного обеспечения и обозревателей компьютерных журналов даже не рассматривают программы, не имеющие инсталлятора. Если же они все-таки обратят внимание на такую программу, то о присуждении ей высоких оценок или наград, как правило, не может быть и речи.
Программа установки, конечно же, помогает пользователю начать работу с shareware-продуктом, избавляет его от необходимости вручную копировать файлы и создавать ярлыки в меню Пуск.
Инсталлятор - своеобразная "упаковка" программы, имеет большое значение для оповещения пользователя об условиях лицензионного соглашения.
Инсталлятор служит еще одним свидетельством того, что данный продукт - серьезная разработка, а не поделка любителя.

Некоторые авторы программ, начав распространение своих продуктов на российском рынке и как freeware, привыкли к тому, что инсталлятор к ним делать не нужно. Некоторые из разработчиков даже с гордостью делают приписку к описанию своей программы: "Не требует инсталляции". Это с одной стороны, оправданно: пользователь может быть уверен, что процесс копирования программы на диск его компьютера будет под его контролем системные настройки будут отредактированы без его ведома или в папку WINDOWS/SYSTEM не будет записано никаких "левых" файлов. Правда, все это может быть сделано уже самой программой при первом запуске ее ЕХЕ-файла. С другой стороны, недоверие к инсталляторам со стороны пользователей в основном обусловлено низкой надежностью старых версий Windows (например, 3.х) и плохим качеством программ сторонних разработчиков, появившихся на рынке в то время, - например, механизм удаления уже установленной под Windows программы работал малоэффективно. Сейчас, по прошествии очень большого для индустрии информационных технологий периода времени, ситуация сильно изменилась, и большинство пользователей рассматривают инсталлятор как помощника в работе, а не обузу, придуманную авторами программ для засорения жестких дисков пользователей.

С увеличением объема продаж через Интернет, бумом shareware, сокращением доли "коробочных" продуктов на рынке и переход некоторой их части в разряд shareware, инсталлятор стал играть роль не только программы установки, но и "упаковки" программного продукта, что имеет большое значение в деле зашиты авторских прав.

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

После того как все больше программ стало распространяться по компьютерным сетям, в том числе и по Интернету, термин "оберточная лицензия" стал терять смысл - ведь "обертки" как таковой уже не было! И тогда роль упаковки стал играть инсталлятор: перед началом процесса установки продукта он демонстрирует пользователю текст соглашения и требует поставить флажок или переключатель Согласен для продолжения установки. А слова "Вскрывая упаковку данного программного продукта..." заменились на "Устанавливая данный программный продукт..." Таким образом, лицензионное соглашение, оформленное в электронном виде, продолжают называть "оберточной лицензией".

Конечно, нельзя не упомянуть о том, что иногда без инсталлятора просто не обойтись - например, когда для нормальной работы устанавливаемой программы требуется скопировать в папку WINDOWS/SYSTEM и зарегистрировать в системе ActiveX- и DLL-библиотеки, типы файлов и т. п.

Самостоятельная подготовка инсталлятор - довольно простое дело. Существует огромное количество продуктов независимых разработчиков (как бесплатных, так и shareware и коммерческих), позволяющих создавать программы установки. Какую из них предпочесть? Давайте посмотрим, на какие параметры нужно обратить внимание при выборе программы создания инсталляторов.

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

Эта разница между "обычным" архивом и инсталлятором существует и при использовании различных программ может оказаться очень значительной. Например, известнейший пакет InstallShield (облегченные версии которого, кстати, входят в комплекты поставки многих систем разработки приложе­ний), "добавляет" к дистрибутиву программы более мегабайта! Конечно, использовать InstallShield можно разве что в том случае, если готовую программу планируется распространять не через Иптернет, где у более компактных программ есть больше шансов привлечь к себе внимание пользователей. Тем не менее, некоторые shareware-разработчики все равно применяют InstallShield. Например, я иногда спрашиваю авторов, присылающих мне заявки на публикацию своих программ в каталоге SoftList: "Почему Ваша программа, являясь вроде бы небольшой утилитой, имеет архив размером почти 2 Мбайта?" "Да не беспокойтесь, - слышу я в ответ, - сама программа занимает всего 500 Кбайт, а все остальное - инсталлятор!" Нет, программа установки, "съедающая" втрое больший объем, чем непосредственно "основной" продукт - слишком большая роскошь для shareware. Итак, как я уже упоминал, InstallShield, на мой взгляд, разумно использовать для "обертки" к программам, которые не планируется распространять по компьютерным сетям - например, написанных под конкретный заказ или рассчитанных на публикацию на CD-ROM и ему подобных носителях.

Другие программы по созданию инсталляторов гораздо более умеренны в своих аппетитах. Собственно, громоздкость InstallShield явилась своеобразным катализатором появления аналогичных, но более компактных продуктов: shareware-разработчики, которым для распространения своих продуктов через Интернет требовался более экономичный инсталлятор, писали собственные генераторы программ установки, а затем некоторые из них, в свою очередь, были оформлены как самостоятельные shareware-продукты.

Одним из самых популярных среди разработчиков shareware-программ является пакет Installer Wise (http://www.mindvision.com). Помимо широких возможностей, о которых вы прочтете ниже, он создает достаточно компактные программы установки: разница между ZIP-архивом с файлами программы и инсталлятором будет всего около 180 Кбайт. Createlnstall 2000 российской фирмы Gentee (http://www.gentee.com) еще более экономичен - после его работы дистрибутив программы увеличивается всего лишь на 40 Кбайт. Есть, конечно, еще немало программ для генерации инсталляторов, но большинство из них создают относительно компактные установочные программы - в пределах 200 Кбайт. Более "прожорливые" аналоги практически не имеют шансов выжить на рынке shareware (тот же InstallShield, например, в основном применяется при оформлении больших коммерческих продуктов), а их появление в дистрибутивах shareware-программ обусловлено в основном неопытностью автора соответствующей программы.

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

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

Если же в процессе установки требуется еще и регистрировать DLL-библиотеки и ActiveX, предоставлять пользователю выбор языка интерфейса или устанавливаемых компонентов программы, выводить определяемые автором программы диалоговые окна и обрабатывать результат действий пользователя, изменять ассоциации файлов, делать записи в реестре, перегружать компьютер по окончании установки и т. п., требуется более продвинутый генератор инсталляции. Это уже упомянутые мной Installer Wise, Create Install и др.

И наконец, немаловажным вопросом при выборе программы создания инсталляторов является удобство работы с ней. Часть программ этого типа (к счастью, небольшая), например уже упоминавшийся выше InstallShield, a также InnoSetup (http://www.doniain.com), для описания инсталлятора (вид диалоговых окон, обработка событий и т. д.) используют специальные скриптовые языки, вследствие чего освоение такого продукта замедляется. Для преодоления этой проблемы другими авторами написаны специальные визуальные конструкторы, генерирующие текст скриптов по параметрам, указанным пользователем в диалоговом режиме - например, ISTool (http://www.bhenden.org/istool), создающий скрипты для InnoSetup.

Впрочем, являются ли скрипты недостатком или нет - зависит от взглядов и предпочтений самого shareware-разработчика. Некоторым авторам программ больше нравятся как раз работать со скриптами, к тому же в этом случае часто имеется возможность более тонко настроить параметры инсталлятора, чем при использовании диалоговых окон.

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

Работать с такими программами, конечно, гораздо проще, чем с теми, которые используют скрипты.

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

Как уже говорилось выше, согласие с условиями лицензионного соглашения - это условие, при котором инсталляция программы может быть продолжена. В этом - суть лицензионного соглашения как "оберточной" лицензии. Значит в инсталлятор нужно не забыть включить окно с текстом License Agreement, чтобы пользователь мог продолжить установку, только нажав кнопку Согласен или установив соответствующий флажок (переключатель).

Папка для установки по умолчанию

Мне до сих пор попадаются программы, инсталляторы которых предлагают создать папку программы для копирования файлов не в папке C:\Program Files, а в корневом каталоге диска С:. Конечно, в большинстве случаев можно выбрать для установки любую другую папку, в том числе и Program Files, но, во-первых, это раздражает, т. к. приходится совершать лишние операции, а во-вторых, приходится все равно устанавливать такую программу в каталоге С:\, т. к, никогда нельзя быть уверенным в том, что программа будет нормально работать в папке Program Files - например, из-за проблем с длинными именами файлов. Кто-то может удивиться тому, что в наше время, когда на рынке господствуют 32-разрядные операционные системы, какие-то программы "не понимают" длинные имена файлов, но на самом деле такие программы встречаются, и я бы не сказал, что очень редко.

Создание ярлыков в Главном меню

Я уже говорил "Не трогайте системные файлы и настройки" о том, что группа с ярлыками для установленной программы должна находиться исключительно в папке Программы Главного меню, а не в его первом уровне или где-то еще. Если же вы считаете, что ярлык к вашей программе пригодится пользователю и на Рабочем столе или, например, в первом уровне Главного меню, то инсталлятор программы должен создавать такие ярлыки только с разрешения пользователя.

Если ярлык программы помещается не в собственную группу в меню Программы, а в одну из стандартных групп - например, Автозагрузка или Стандартные, то нужно учитывать, что в локализованных версиях Windows их названия различаются, и не повторять ошибок разработчиков пакета утилит Microsoft PowerToys, в процессе установки которых даже под русской версией Windows ярлыки создаются в группах "Accessories" и "Startup", которые, конечно, в данной локализации Windows игнорируются.

Помимо установки, программа должна иметь возможность деинсталляции, т. е. удаления себя из системы. Программа, производящая эту операцию -

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

Деинсталляция - это не просто удаление файлов с компьютера, которое, в общем-то, может произвести любой пользователь вручную. Деинсталляция подразумевает удаление всех следов пребывания программы в системе (записей в реестре и других системных файлах, DLL-библиотек в папке WINDOWS/SYSTEM и т. п). Если же вся эта информация остается в системе, то она по мере установки на компьютер все новых и новых приложений накапливается, что отрицательно сказывается на стабильности работы операционной системы.

Да и удаление файлов деинсталлятором не такой уж и простой процесс. Дело в том, что по умолчанию деинсталлятор настраивается так, чтобы удалить только те файлы, которые были установлены ранее. Если при удалении - файлов программы деинсталлятор обнаруживает в ее папке файлы, которые не были туда установлены инсталлятором, то он пропускает их, а иногда (это зависит от того, какой программой был создан деинсталлятор) вообще прекращает свою работу, чтобы не удалить важные файлы, например документы, созданные пользователем. Но на практике не все "новые" файлы могут действительно являться документами пользователя: вполне возможно, что это файлы, созданные операционной системой в связи с работой данной программы на этом компьютере.

Например, если справочная система продукта выполнена в формате WinHelp, то обычно программа установки копирует на диск компьютера файлы с расширением hip и cnt (основной файл и файл с оглавлением Справки). Но стоит пользователю хоть один раз посмотреть справочную систему, как на диске будет создан файл с расширением gid, а если пользователь проведет расширенный поиск- создаются файлы FTS и FTG (см. табл. 7.1). Поэтому файлы с этим расширением также нужно включить в настройки программы деинсталлятора.

То же самое относится и к ключам в системном реестре с настройками программы. Часто эти ключи создаются не инсталлятором, а самой программой, в процессе работы пользователя с ней. В результате эти записи не удаляются деинсталлятором и остаются в реестре, увеличивая его объем и ухудшая скорость работы Windows. Вследствие этого нужно настроить деинсталлятор на удаление всех ключей, которые могут быть созданы программой в процессе ее использования.

Как известно, деинсталлятор приложения для Windows может быть запущен двумя способами: посредством выбора соответствующего пункта в группе с ярлыками программы в меню Пуск и при помощи апплета "Установка и удаление программ" Панели управления Windows. Некоторые программы генерации инсталляторов, например уже упоминавшийся InstallWise, предоставляют пользователю возможность при удалении программы воспользоваться любым из этих способов на свой выбор: соответствующие пункты присутствуют как в меню Пуск, так и в апплете "Установка и удаление программ" Панели управления. Однако некоторые shareware-продукты можно удалить только одним способом. Нельзя сказать, что это удачный ход, с точки зрения удобства работы с программой. Можно испытать сильно, раздражение, например, последовательно вызвав Панель управления, апплет "Установка и удаление программ", прокрутить длинный список и не найти ту программу, которая вам требуется, прокрутить этот список более медленно, тщательно вчитываясь в названия продуктов, чтобы не пропустить интересующую программу, задуматься, как же все-таки удалить эту злосчастную программу и т. д.

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

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

Итак, инсталлятор программного продукта готов: файл setup.exe лежит в папке вашего shareware-проекта. В принципе, этот файл уже является дистрибутивом программы, и его можно смело распространять через Интернет. Многие авторы так и делают: переименовывают файл setup.exe так, чтобы его название было созвучно названию программы, и размещают его на Web-сернере.

Это распространенный, но не совсем правильный подход к выбору варианта оформления дистрибутива. Лучше всего - упаковать ЕХЕ-файл инсталлятора ZIP-архиватором. Помимо файла setup.exe, в архив нужно включить еще и файл readme.txt, содержащий наиболее важную информацию о программе и се текущей версии, а также файл file_id.diz, в который записывается название программы, ее версия и короткое (10-20 слов) описание.

Главный недостаток распространения "голого" файла setup.exe, без его "оборачивания" архиватором, состоит в том, что пользователь может узнать, какую именно программу содержит дистрибутив, только установив ее. Хотя авторы обычно дают файлу дистрибутива имя, производное от названия программы, оно нередко совершенно ничего не говорит пользователю, т. к. выглядит как аббревиатура и номер версии - например, ср32е45.ехе: попробуйте догадайтесь, что за этим малопонятным набором букв скрывается Netscape Communicator версии 4.5 для Windows 9.X/NT/2000.

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

Некоторые читатели, возможно, спросят: "А зачем в архив нужно еще включать и файл file_id.diz? Ведь много информации уже есть в readme.txt?" Это действительно гак, однако file_id.diz более удобен для чтения, если пользователю всего лишь нужно узнать название программы и ее версию. Но самое главное - многие архиваторы, файловые менеджеры, каталогизаторы автоматически извлекают из архивов файлы file_id.diz (традиция снабжать дистрибутивы файлами file_id.diz идет еще со времен DOS) и показывают (или обрабатывают другим образом) их содержимое. В результате пользователь получает описания упакованных файлов из таких архивов без необходимости открывать их вручную и самостоятельно читать файлы readme.txt. Не случайно текст в файле file_id.diz принято записывать небольшими по длине строками, чтобы описание помещалось в информационные окна соответствующих программ.

По свидетельству тех shareware-разработчиков, которые размещают на своих Web-сайтах программы сразу в двух вариантах - ехе и zip, оба варианта скачивают примерно равное количество пользователей. Тем не менее, с ZIP-архивами работать удобнее, что подтверждают письма от посетителей архива SoftList: в некоторых из них содержатся довольно эмоциональные просьбы публиковать на сайте только программы, дистрибутивы которых оформлены в виде ZIP-файлов, и даже обязать авторов программ распространять свои программы только упакованными в архив. Конечно, выполнить такие просьбы по разным причинам невозможно, но сам по себе факт наличия подобных просьб со стороны пользователей показателен, тем более, что просьб искоренить формат ZIP в области распространения дистрибутивен программ не поступало.

Читатели, наверное, обратили внимание на то, что, говоря об использовании архиватора, я все время упоминаю об одном формате - ZIP. Ведь существует множество других архивных форматов, некоторые из которых более эффективны, чем ZIP - например, широко распространенный в России RAR Евгения Рошаля (http://www.rarsoft.com). Дело в том, что ZIP является стандартом де-факто для распространения файлов в Интернете, чего о других архивных форматах не скажешь. Конечно, существуют исключения, обусловленные, в частности, спецификой платформы, для которой предназначен файл: например, программы для Linux традиционно упаковываются в архивы tar.gz. Но когда речь идет о распространении через Интернет программного обеспечения для Windows, здесь выбора нет: только ZIP, и никакой другой архиватор.

Большое значение для распространения программ среди зарубежных пользователей имеет и тот факт, что существует большое количество бесплатных ZIP-архиваторов, а вот тот же RAR (как его версия для Windows- WinRAR) - shareware-продукт, за использование которого (в данном случае - всего лишь для того, чтобы распаковать чужую программу) нужно платить. И, хотя в комплект поставки RAR входит бесплатная утилита UnRar, которая предназначена только для распаковки файлов, большинство пользователей о ней ничего не знают, т. к. автором RAR она не особо рекламируется. Получается, что автор shareware-продукта, упакованной RAR (или другим небесплатным архиватором), вынуждает пользователя заплатить деньги только за право разархивировать программу. Один из российских shareware-разработчиков рассказывал, что в то время, когда он пользовался архиватором RAR для упаковки дистрибутива своих программ, он как-то даже получил письмо с упреком. "Чтобы запустить Вашу программу, я должен зарегистрировать RAR!" - писал пользователь.

Примечание

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

Пожалуй, единственный тип программ, дистрибутивам которых противопоказана упаковка любым архиватором и которые должны распространяться только в виде исполняемого файла ("голый" инсталлятор или самораспаковывающийся архив), - это... ZIP-архиваторы. Очень часто пользователь скачивает из Интернета дистрибутив, одной из таких программ как раз для того, чтобы разархивировать другие ZIP-файлы, и поэтому ему, скорее всего, будет просто нечем распаковать дистрибутив, сжатый ZIP-архивом.

Наконец последний вопрос, который мне хотелось бы рассмотреть в данном разделе, - это вопрос о том, какое имя должен иметь готовый файл дистрибутива, т. е. файл, который пользователи будут качать из Интернета. Есть три возможных варианта: оставить ему стандартное имя вроде setup.zip, дать имя на основе названия программы (предположим, abc.zip) и добавить ко второму варианту номер версии - например, abc20.zip будет означать версию 2.0.

Первый вариант, конечно, отпадает: имя файла setup.zip ничего не скажет пользователю о названии программы, когда он скачает этот файл, а через некоторое время (например, наводя порядок на жестком диске) решит выяснить, что же он содержит.

Последний, третий по счету вариант представляется идеальным: в имени файла содержится указание не только на название программы, но и на номер ее версии. Пользователь, едва взглянув на имя файла, может сделать вывод о назначении этого дистрибутива. Кроме того, при таком методе наименования файлов соответствующий дистрибутив - нужной программы и нужной версии - легко найти на специализированных файловых поисковых системах наподобие www.filesearch.ru.

Однако, при всех достоинствах, этот способ имеет большой недостаток. После выпуска очередной версии программы ссылки на ее файл быстро расползаются по всему Интернету: автор регистрирует программу в различных online-архивах, а некоторые архивы сами добавляют эту программу в свои базы данных. Но после того, как в свет выходит новая версия программы, имя файла меняется: ведь версия программы тоже изменилась. В результате все ссылки, которые стоят на файл программы на страницах интернет-каталогов программного обеспечения, компьютерных обозрений и других информационных ресурсов, перестают работать, и соответственно посетители не могут скачать программу по этим ссылкам. С помощью небольшой настройки Web-сервера эту проблему можно решить , но не все авторы shareware-программ имеют возможность произвести такую настройку. Чтобы хоть как-то поправить положение, разработчику приходится писать письма администраторам соответствующих архивов или заполнять Web-формы с просьбой изменить ссылку на файл программы. Беда в том, что крупные архивы, как уже упоминалось (см. разд. "Периодичность выпуска" данной главы), могут обновить информацию о программе в своих базах данных спустя недели и даже месяцы после того, как получат соответствующие запросы, и все это время файл программы не будет доступен для посетителей данных сайтов. И никто не знает, сколько зарегистрированных пользователей из-за этого недосчитается программа. Учитывая сказанное выше, мне наиболее оптимальным представляется вариант номер два: имя файла включает только название (или его аббревиатуру) программы, без номера версии. В таком случае название оста­ется более-менее понятным, а внешние ссылки на файл программы остаются рабочими при выходе новых версий программы. Правда, при поиске в файловых системах трудно будет найти конкретную версию данной программы. Однако этим стоит пожертвовать ради того, чтобы внешние ссылки на файл программы сохраняли свою работоспособность после выхода ее новой версии: это окажется гораздо более выгодным в плане увеличения числа зарегистрированных пользователей.

Станислав Жарков