ISDone.dll
Библиотека, включающая в себя все необходимое для распаковки и подготовки файлов с помощью прекомпрессоров посредством инсталлятора InnoSetup, с равномерным отображением всех идущих операций на одном или двух прогрессбаров. Поддерживаются arc, 7zip, rar, pcf, srep архивы. Создана в основном в помощь репакерам игр.
[more=предыдущие версии:]
[b]ISDone 0.4.2.5 (03.08.2010)
ISDone 0.5e beta (17.10.2010)
ISDone 0.5f beta (21.10.2010)
Изменения: небольшие поправки в коде и в скрипте.
ISDone 0.5g beta (22.10.2010)
Изменения:
-разделил скорость обновления окна инсталлера и инфы на нем (50 раз в сек обновление окна, 10 раз в сек обновление инфы на нем (вызов callback));
-убрал из RTConsole выставление приоритета своему процессу.
ISDone 0.5h beta (23.10.2010)
Изменения:
-сделал таймеры обновления окна и инфы малозависимыми друг от друга, и от других выполняемых операций (на разные потоки разбивать нельзя, потому как innosetup не умеет работать с потоками, отличными от того, который он сам создал, поэтому приходится извращаться) Обновление окна 50 раз/с, инфы - 15 раз/с.
ISDone 0.5i beta (30.10.2010)
Изменения:
-немного подкорректировал отображение второго прогресса в распаковке pcf "на лету";
-при задании нуля в поле для версии precomp'а в функции инициализации если не удается получить доступ к pcf-файлу, попытки открытия pcf-файлов для проверки версии теперь будут продолжаться до 1 секнуды. В случае если и в течение этой секунды доступ к файлу невозможен, выдается сообщение об ошибке чтения.
-из скрипта удалил давно забытую строку, выводящую проценты кроме созданного основного прогрессбара еще и на дефолтовый (хоть он и невидим на время установки).
ISDone 0.5j beta (06.11.2010)
Количество параметров и их тип в некоторых функциях изменилось, поэтому скрипт от предыдущей версии к этой бибилиотеке не подойдет!
Изменения:
-увеличил максимально возможное для использования в isdone количество компонентов с 32 до 96 (жаль inno не умеет передавать в функцию указатель на массив данных, а то можно было бы увеличить до бесконечности);
-поменял все строковые типы, приходящие из библиотеки в скрипт с AnsiString на PAnsiChar. По идее должна исправиться ошибка, возникающая на некоторых машинах, "Invalid pointer operation" (или ошибка 204);
-подкрутил немного счетчик обноввления окна.
ISDone 0.5k beta (06.11.2010)
Изменения:
избавился от всех глобальных переменных типа String в коде dll'ки. Под управлением Inno с ними изначально были проблемы, хотя если запускаю из-под управления своего exe'шника, никаких ошибок и глюков нет. Видимо у Inno его мини-виртуальная машина не дружит с подобными динамически создаваемыми объектами (хотя с GetMem норм все). Первое обращение к такому объекту проходит нормально, а с последующим - генерится ошибка. знать бы еще из-за чего..
В общем в данном случае избавился от ошибки при распаковке второго srep'а, и надеюсь от остальных подобных..хотя еще остались локальные переменные string..посмотрим как оно будет дальше.
ISDone 0.5L beta (21.11.2010)
Количество параметров и их тип в некоторых функциях изменилось, поэтому скрипт от предыдущих версий к этой бибилиотеке не подойдет!
Изменения:
-избавился от необходимости innocallback.dll, соответственно поменялся тип переменных в некоторых функциях;
-исправил ошибку, которая не давала распаковать rar-архивы, находящиеся в папке с русскими символами;
-исправил некорректное отображение при распаковке arc-архивов с русскими файлами внутри;
-исправил слишком высокие требования к входному файлу для 7zip (если торрент, к примеру, раздавал этот файл, то установка приложения, использующая этот файл, выдавала ошибку, типа не может открыть файловый поток);
-исключил всякую задержку на ожидание завершения потока распаковки для всех функций (переход между распаковками теперь без паразитных задержек).
ISDone 0.5m beta (05.12.2010)
Изменения:
заменил стандартную распаковку srep на свою оптимизированную версию. При распаковке небольших srep-архивов (где не оказывает влияния скорость операций ввода/вывода винта) на 2х-ядерных и более процессорах скорость обработки в 2 раза выше, на 1-ядерных - на 15-25% (оптимизировал алгоритм md5 по скорости на 15-25% и саму функцию распаковки srep, перенёс проверку контр. суммы в параллельный поток, сделал подстраиваемый размер буфера под входные данные). При этом размер библиотеки уменьшился на 90кб. Данная фитча находится в режиме тестирования. При ошибках отписывайтесь в данной теме!(я тестировал в основном распаковку srep-архивов, упакованных с параметром -m3);
добавил функцию WrapCallback, аналогичную innocalback.dll, чтобы не таскать эту библиотеку, если необходима ее поддержка для других функций скрипта (в скрипте примера добавлена соответствующая строка импорта данной функции);
исправил некорректное движение прогресса при распаковке *.pcf файлов (после распаковки некоторого количества файлов, он начинал двигаться рывками);
обновил библиотеку 7zxa.dll до версии 9.20;
обновил библиотеки unarc.dll и facompress.dll до версии 0.67а от 17.11.2010г.
ISDone 0.5n beta (12.12.2010)
Изменения:
устранил ошибку контрольной суммы, возникающую в самом конце распаковки некоторых srep-файлов;
исправил некорректное отображение прогресса при распаковке архивов с маской типа *.arc со включенной опцией распаковки pcf на лету;
уменьшил время обновления оставшегося времени с 1 сек до 0.5 сек.
Всем спасибо за тестирование библиотеки!
ISDone.dll v0.5 final
Включает в себя модули(функции) для распаковки
ISArc - распаковка arc-архивов
IS7Zip - распаковка 7zip-архивов
ISRar - распаковка rar-архивов
ISPrecomp - распаковка Precomp версий 0.38 и v0.4
ISSRep - распаковка SRep v2.0 (и младше)
ИЗМЕНЕНИЯ В МОДУЛЯХ (относительно v 0.4.2.5)ОБЩЕЕ:добавлен подсчет оставшегося, прошедшего и общего времени распаковки с возможностью выбора типа их отображения и отображением % и оставшегося времени на панели задач;во всех функциях распаковки реализована групповая распаковка архивов по маске файлов с возможностью так же сканировать и все подкаталоги;добавлен второй прогрессбар для отображения прогресса текущей операции;написан более подробный readme к библиотеке. Для более удобного использования скомпонован и откомпилен в chm, за что спасибо Krinkels;добавлена проверка на наличие необходимой для распаковки свободной оперативной памяти;уменьшен размер dll на 55кб. Спасибо daemon за подсказкупри этом стало возможным избавиться от всех рандомных ошибок, возникавших ранее (появилась возможность поставить другой менеджер памяти вместо штатного delphi);при перелопачивании кода исправлены некоторые мелкие баги, которые еще не успели вылезти;разделены обновление окна инсталлера (50 раз в сек) и инфы на нем (15 раз в сек);(надеюсь) исправлена ошибка, иногда возникающая в RTConsole при распаковке кучи pcf файлов (благодарю troyan90 за багрепорт);перевел все строковые типы, приходящие из библиотеки в скрипт, с AnsiString в PAnsiChar. Должны пофикситься иногда возникающие на некоторых машинах ошибки "Invalid pointer operation" (или ошибка 204);увеличено максимально возможное количество используемых компонентов до 96 (подробнее в справке в описании работы скрипта);исключил потери времени при переходе между функциями распаковки;избавился от необходимости библиотеки innocallback.dll;добавил функцию wrapcallback, аналогичную innocallback.dll, чтобы не таскать эту библиотеку, если для других частей скрипта все же требуется эта функция.Unarc модуль (ISArcExtract):обновлен unarc.dll до версии 0,67a (от 17.11.2010);к файлам инсталлера добавлена опциональая библиотека facompress.dll, предназначенная для ускорения распаковки .arc архивов на 10-20%. За содействие и возможность подобной реализации, да и вообще за все труды, большое спасибо Булату;добавлена возможность распаковывать .pcf файлы "на лету". Т.е. как только файл с расширением .pcf распаковывается из arc архива, он тут же обрабатывается precomp'ом, а затем распаковка arc-архива продолжается (Пока параллельную распаковку не стал делать). И пока она на стадии тестирования, потому на 100% работоспособность не гарантируется;исправлено некорректное отображение при распаковке файлов с русскими именами.7ZIP модуль (IS7ZipExtract):обновлена 7z.dll до версии 9.20bкакой-то рандомный баг был, прерывающий распаковку 7z архивов. Исправился автоматом при смене менеджера памяти;еще благодаря Ultra исправлен баг с закрытием распакованных файлов после извлечения (они не закрывались до завершения всего процесса установки, что не давало доступа к ним из других функций);исправлена ошибка, возникающая при открытии 7z-архива, если он уже используется какой-либо программой.Precomp модуль (ISPrecompExtract):для уменьшения потерь времени убрана проверка наличия необходимых файлов для распаковки;так же для уменьшения потерь теперь можете отключить проверку pcf файлов на валидность, но тогда при инициализации указывается используемая версия (0,38 или 0,4). В скрипте примера версия ставится в соответствии с тем, кокой из #define Precomp038 или #define Precomp04 указан в начале скрипта.SRep модуль (ISSrepExtract):заменена стандартная функция распаковки srep архивов на ассемблерно-оптимизированную, так же с некоторой оптимизацией самого алгоритма, что дало выигрыш в скорости на 2х-ядерных и более системах в 2 раза, на одноядерных - на 15-25% (без учета затрат на операции ввода/вывода). При этом размер библиотеки уменьшился на 90кб;добавлено отображение ошибок.RAR модуль (ISRarExtract):исправлена ошибка, возникающая при распаковке архивов, находящихся в папках с русскими именами;Скрипт:добавлен пример создания записей в реестре, создание иконок, запуск установки дополнительного ПО с игнорированием этого всего, если в процессе распаковки возникла ошибка;добавлено определение #define SecondProgressBar, включающее второй прогрессбар;обновление окна убрано в библиотеку, что позволило вырезать из скрипта десяток строк лишнего кода;некоторые фенечки в скрипте добавлены Nik1967.
Ссылки:
http://rghost.ru/3822959
ISDone.dll v0.6b beta
Включает в себя модули для распаковки
ISArc - распаковка arc-архивов
IS7Zip - распаковка 7zip-архивов
ISRar - распаковка rar-архивов
ISPrecomp - распаковка Precomp версий 0.38, v0.4 и v0.41
ISSRep - распаковка SRep v2.95 (и младше)
XDelta3 - распаковка diff-файлов, созданных xdelta3.exe
PazkZIP - упаковка данных в стандартные zip-архивы
Exec(включает Exec2, ISExec, ISFindFiles, ISPickFilename, ISGetName, ISFindFree) - запуск и контроль внешних приложений
ИЗМЕНЕНИЯ В МОДУЛЯХ (относительно v 0.5 final)[b]ОБЩЕЕ:парсинг строки входного файла, поиск файлов по маске и сортировка во всех функциях теперь не ступорит окно инсталла при большом количестве входных файлов.Unarc модуль (ISArcExtract):обновлен unarc.dll до версии 0,67a (от 18.03.2011), что дало возможность корректно отображать прогресс при распаковке архивов со srep внутри алгоритма сжатия FreeArc. Прилично увеличивается скорость распаковки srep+lzma архивов;
добавлен параметр для распаковки конкретной папки из архива.Precomp модуль (ISPrecompExtract):добавлена поддержка precomp 0.41 версии;все версии precomp'а собраны в единые exe, чтобы постоянно не таскать с собой их dll'ки;изменен принцип чтения текущего состояния прогресса с консоли precomp (прогресс стал более плавный). Теперь требуется использование именно данных в архиве версий precomp'а;добавлены варианты precomp'а без использования библиотеки перепаковки jpg (precomp_noJPG.exe. Заменять обычные precomp.exe соответствующих версий). Немного уменьшает размер инсталла, но при наличии в pcf-файлах перепакованных картинок в jpg может возникнуть непредвиденная ситуация. Для использвания данных кастрированных версий при создании pcf-файла желательно указывать параметр -t-j, чтобы отключить обработку jpg.SRep модуль (ISSrepExtract):добавлена поддержка 2.95 версии. Но все же на много эффективнее использовать srep -f + lzma внутри алгоритма архиватора FreeArc;добавлена функция SrepInit, которая инициализирует некоторые параметры для распаковки srep-архивов как отдельных, так и тех, что внутри алгоритма freearc (автоматически правится arc.ini, указанный в соответствующем параметре команды ISArcExtract).Exec модуль:Содержит функции:Exec2 - замена обычному Exec в Inno. Просто запускает указанное приложение, и ожидая его завершения оставляет "живым" окно инсталла;ISExec - запускает указанное приложение с необходимыми параметрами с плавным отображением прогресса. Время выполнения считается либо автоматически на основе тестового прохода и времени выполнения предыдущих операций, либо задается вручную, как и процент текущей операции относительно общего прогресса. Чем дальше от начала установки, тем точнее отображение прогресса. При желании есть возможность убрать плавность изменений значений и сделать прогресс "скачущим";ISFindFiles - ищет и создает сортированный список файлов по указанной маске. Необходим для групповой распаковки файлов через внешние приложения (например подойдет для распаковки *.ogg, *.tak, *.bmf и т.д.);ISPickFilename и ISGetName (чтобы обойти баг в Inno с типом переменной var PChar пришось делать 2 функции вместо одной) - берут очередной файл из списка, созданного командой ISFindFiles. Необходимы для задания парамтеров функции ISExec;ISFindFree - очищает список файлов.PackZIP модуль (ISPackZIP):добавлен модуль упаковки указанных файлов в стандартный zip архив.XDelta3 модуль (ISxDeltaExtract):добавлен модуль распаковки xdelta3 diff-файлов.Скрипт:не помню уж, но много чего по мелочи менял .
Ссылки:
rghost.ru
rapidshare.com
Подробное описание работы и функций находится в файле readme.chm внутри архива.
Чтобы при выходе новой версии библиотеки сто раз не внедрять скрипт работы с isdone в свой, советую воспользоваться этой программой, или аналогичной ей (в Total Commander есть функция "Сравнить по содержимому..") для сравнения текстовых файлов. Закинуть на сравнение скрипт примера от предыдущей версии и новой, и она укажет какие строки поменялись. Соответственно затем в своём скрипте правим нужные строчки.
[/more][/b]
переехал сюда