Декомпрессия и установка файлов
Когда операционные системы были проще, а для рядовых пользователей компьютеры рассматривались, скорее всего, в качестве хобби, установка файлов была довольно простым делом. Большинство приложений сопровождались документацией, в которой пользователям указывалось скопировать все необходимые файлы на жесткий диск. Этим все проблемы исчерпывались.
Среда современной операционной системы Windows 2000 значительно сложнее, а рядовой пользователь более заинтересован в выполнении задач, нежели в изучении принципов работы компьютера. Задача удовлетворения таких пользователей существенно усложнила разработку инсталляционных программ. Современная инсталляционная программа имеет дело с такими тонкостями, как сжатые файлы установки и множество версий системных библиотек. Win32 API содержит функции, которые позволяют приложению справляться с подобными затруднениями. Кроме того, этот интерфейс располагает множеством функций, которые помогают приложению обрабатывать сжатые файлы. Эти функции можно использовать в любой ситуации, тем не менее, чаще всего они применяются совместно с инсталляционными пакетами.
Обзор процесса установки файлов
В качестве примера рассмотрим проблему, связанную с наличием нескольких версий библиотеки COMMDLG.DLL (библиотеки стандартных диалоговых окон). Эта библиотека реализует для приложений стандартные диалоговые окна (common dialog boxes). Предположим, пользователь установил новый программный пакет, где используется последняя версия данной библиотеки. Все работает нормально. Затем пользователь приобретает копию приложения, которая до того пролежала на полке несколько месяцев. В этом приложении также используется библиотека COMMDLG.DLL, но ее старая версия. Если инсталляционная программа просто скопирует файл COMMDLG.DLL в систему, устанавливаемое приложение будет работать нормально, однако прежняя программа, требующая более новой версии библиотеки, в дальнейшем корректно функционировать перестанет. Инсталляционная программа создала для пользователя проблему в результате ошибочной замены новой версии библиотеки COMMDLG.DLL предыдущей версией.
Это лишь один из примеров, когда от инсталляционной программы требуется способность учитывать, что некоторые файлы используются несколькими программами, и никогда не следует заменять новую версию более старой. С другой стороны, перед заменой старой версии на более новую имеет смысл запрашивать подтверждение пользователя. Дело в том, что более новые версии общих файлов могут нарушить работу старых программ, и пользователю необходимо предоставить возможность выбора.
Многие из упомянутых проблем решаются при использовании одного из доступных инсталляционных пакетов независимых разработчиков. Эти программы обычно применяют интерпретируемый сценарий, а программные средства независимых разработчиков осуществляют собственно установку приложения. В данной главе рассматриваются интерфейсы (API) Win32, которые помогают написать собственную инсталляционную программу.
Проверка устанавливаемой версии
Как было показано в предыдущем разделе, инсталляционная программа не должна слепо копировать файлы в систему пользователя. Программа должна определять, существует ли в системе версия данного файла, а также ее старшинство по отношению к версии устанавливаемого файла. Именно для этих целей в Windows существуют функции VerFindFile и VerlnstallFile. VerFindFile определяет место, куда приложение должно установить данный файл. Она проверяет наличие копии файла в системе и возвращает информацию, которая затем используется функцией VerlnstallFile. В листинге 29.1 демонстрируется функция, использующая VerFindFile и VerlnstallFile для определения места установки общего файла и его записи.
Листинг 29.1 Установка файла с проверкой версии___________________________________________
м. \local-sources\chap29\t29-01.txt
Первый параметр функции VerFindFile определяет, является ли файл для данного приложения частным. В листинге 29.1 переменная VFF_ISSHAREDFILE указывает, что данный файл используется несколькими Windows-приложениями. После вызова VerFindFile буфер szDestDir будет содержать рекомендуемое Windows местонахождение нового файла. Буфер szCurDir получит путь предыдущей версии файла. Функция VerFindFile может возвращать одно из значений, перечисленных в табл. 29.5, которая приводится в описании данной функции.
После вызова функции VerFindFile и при отсутствии ошибок приложение может использовать VerlnstallFile для действительной установки файла. Функция VerlnstallFile копирует новый файл во временный, выполняя при необходимости его декомпрессию. Затем она проверяет информацию о версии уже существующего файла. Если VerlnstallFile не обнаруживает проблем, новый файл устанавливается на место исходного. Функция VerlnstallFile возвращает битовую маску, содержащую одно или несколько значений из табл. 29.7. Это значение указывает на успешное завершение либо на сбой процесса установки. Дополнительные сведения содержатся в приводимом ниже описании функции VerlnstallFile.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.