Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar winrecab.rar
(1.4 Kb, 389 просмотров)

Уменьшение размера дистрибутива. Переупаковка файлов.

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

Обработка CAB-файлов может проводиться двумя способами - штатным MakeCab, или же CabArc из CAB SDK, оба варианта доступны в скрипте. CabArc (в отличие от MakeCab) поддерживает вложенные каталоги, зато архивы упакованные MakeCAB имеют более короткое время доступа (по данным msfn.org). Поэтому в скрипте предпочтение отдано именно 1-му способу, в случае неудачи (наличие подкаталогов) вызывается 2-й способ.

Для получения краткой справки запустите пакетный файл без параметров.

Внимание! Windows XP/2003 комплектуется версией MakeCab, изменяющей метку времени исходного файла и устанавливающей ее равной времени архива! Совершенно не понимаю чем вызвано такое поведение… если дело пойдет так и дальше, то атрибут метки времени может вовсе утратить свою значимость. В результате работы скрипта с таким MakeCab может случиться ситуация когда метка архива актуальней метки самого файла. Воизбежание проблем для операций с архивами лучше всегда использовать один набор утилит, например из Microsoft CAB SDK.

Предостережение! Командные файлы содержат процедуры по массовой обработке файлов и каталогов, в том числе команды удаления, перемещения и т.д. Нет гарантий, что в разных условиях скрипт будет вести себя одинаково. Поэтому крайне рекомендую все операции с дистрибутивами проводить только на виртуальном диске, перенаправив рабочую папку при помощи штатной команды SUBST, например:
Код: Выделить весь код
subst w: c:\WRK

Последний раз редактировалось amel27, 19-02-2006 в 04:34. Причина: обновление скрипта


Отправлено: 07:26, 12-02-2006 | #27