Декомпрессия и установка файлов, страница 2

Информация о версии

Информацию о версии необходимо включать в исполняемые файлы, библиотеки и элементы управления. Эта информация создается подобно любому другому ресург су Windows, такому как растровые изображения и меню — с помощью редактора ресурсов. Если в процессе установки файлов возникает сбой, приложение может извлечь информацию о версии для вывода информативных сообщений об ошибках. Приложение может извлекать информацию о версии для любого файла с использованием функций GetFileVersionlnfoSize, GetFileVersionlnfo и VerQueryValue. Пример задействования информации о версии демонстрируется в листинге 29.2.

Листинг 29.2 Информация о версии

См.    \local-sources\chap29\t29-02. txt

После извлечения информации о версии при помощи функции VerQuerylnfo можно получить определенные значения. Подробности извлечения данных из информации о версии содержатся в описании VerQueryValue.

Декомпрессия файлов

Рассмотренные выше функции поддержки версий могут автоматически обрабатывать сжатые файлы. Иногда для приложения желательна возможность выполнять декомпрессию файлов независимо от функций управления версиями. Для этой цели в Windows реализован набор функций.

Для декомпрессии файла приложение может задействовать функцию LZCopy. До применения этой функции приложение должно открыть исходный и целевой файлы с помощью LZOpenFile. Эта функция подобна CreateFile и возвращает дескрипторы, применяемые в функциях LZCopy, LZRead и LZSeek. Если файл уже открыт с помощью CreateFile, этот дескриптор файла может использоваться совместно с LZInit для получения дескриптора, эквивалентного тому, что возвращает функция LZOpenFile. Наконец, после копирования файлов приложение использует функцию LZClose для закрытия ссылок на файл. В сжатый файл можно внедрить имя распакованного файла.

Для извлечения этого имени используется функция GetExpandedName. Если в сжатый файл не внедрено имя исходного файла, функция просто возвращает имя сжатого файла.

Если для приложения необходим файл большого размера, который предназначен только для чтения, с целью экономии дискового пространства его можно хранить в пользовательской системе в сжатом виде. Интерфейс Win32 API предоставляет функции LZRead и LZSeek, позволяющие считывать данные из сжатого файла, как если бы он был распакован. По принципу действия они подобны ReadFile и SetFilePointer. Однако Win32 API не предоставляет функций сжатия файлов. Для этого применяется утилита COMPRESS.EXE — консольное приложение, которое сжимает файлы с использованием схемы, совместимой с рассмотренными в данной главе функциями.

Описание функций декомпрессии и установки файлов

Таблица 29.1 содержит перечень функций декомпрессии и установки. Затем следует подробное описание каждой функции.