Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)

Модерирует : gyra, Maz

Widok (23-11-2010 10:55): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

nik1967



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ISDone.dll v 0.4.2
 
 
 Библиотека, включающая в себя все необходимое для распаковки и подготовки файлов с помощью
прекомпрессоров посредством инсталлятора InnoSetup, с равномерным отображением всех идущих
операций на одном прогрессбаре. Поддерживаются arc, 7zip, rar, pcf, srep архивы. На будущее
планируется добавить некоторые необходимые функции, а так же возможность параллелизации операций
на многоядерных системах.
 
 Для осуществения работоспособности библиотеки есть 2 вида определения приоритета для каждой
операции на всем прогрессбаре
 
1) Ручная расстановка процентного отношения времни выполения каждой операции относительно общего.
Заполняется третий параметр каждой функции процентным значением.
Некоторые правила:
  -в данном режиме необходимо удалить или закомментировать команды
StartRecord(ExpandConstant('{src}\records.inf'),ChComp);    и    StopRecord;
  -сумма процентов учитывая ветвления (использование компонентов, условий) в скрипте  должна
составлять 100, иначе отображение будет неверным;
  -у компонентов, для которых возможен выбор только одного из нескольких, должны быть одинаковые
значения процентов;
  -компоненты, которые можно выбирать одновременно с другими в одной группе (например несколько
рядом стоящих компонент без флага exclusive) НЕ БУДУТ КОРРЕКТНО ОТОБРАЖАТЬСЯ НА ПРОГРЕССБАРЕ!
Потому что сумма процентов может отличаться от 100.  
 
 
2) Автоматическая расстановка процентных соотношений в операциях.
 
правила:
  -все третьи параметры функций выставляются нулями;
  -до команды "repeat" должна быть  StartRecord(ExpandConstant('{src}\records.inf'),ChComp);
имя файла можно менять по своему вкусу;
  -после "until true"  должна быть команда  StopRecord;
  -в начале скрипта необходимо закомментировать или удалить строку #define records
 
инструкция:
  -компилится проект и запускается на установку. Все операции должны дойти до конца и завершиться удачно
(прогрессбар будет зашкаливать, так и должно быть);
  -после тестового прогона создастся файл records.inf (или какой указали) в указанной папке, его
необходимо добавить в проект, раскомметировав или добавив в начале скрипта #define records  
  -не удаляйте и не редактируйте команды StartRecord и StopRecord! Без них ничего работать не будет!
  -скомпилировать проект
 
Примечание: при тестовом прогоне вне зависимости от выбранных компонентов, они все будут установлены.
Это сделано для определения времени распаковки каждого из них.
 
 После этого проект готов. При запуске процесс выполнения операций будут равномерно и корректно
отображаться на прогрессбаре.
 
 
Для справки: Закомментировать строку - значит добавить в ее начало ";" или "//" без кавычек. Если в
компиляторе строка зеленая - значит она закомментирована, и не будет выполняться.
#ifdef и #endif - это условные операторы. Если до них было например задано #define records, то все
команды в промежутке #ifdef records ..... #endif будут скомпилированы, если же закомментировать
#define records, то эти команды компилятор просто пропустит.  
 
 
В данном архиве также Вы можете найти папку Modules, содержащую различные комбинации включеных в библиотеку
модулей. Это сделано для уменьшения размера инсталляций, если какие-то модули не требуются в проекте. Чтобы
использовать какой-либо из этих вариантов, необходимо переименовать его в isdone.dll и заменить полученным
файлом исходную isdone.dll.
 
 
 
Описание функций библиотеки:
 
описание значений, которые используются в большинсте функций:
 
CurComponent - порядковый номер компонента, при отметке которого выполнится данная функция. Если этот компонент
будет не активен, dll пропустит данную фунцию и приступит к следующей. Ноль указывает на то, что выполнение
текущей функции не будет зависеть от компонентов;
OveralPct - переменная, которая передается от функции в функции, содержит текущее значение выполненного процента
распаковки, умноженное на 10;
PctOfTotal - используется при ручном задании процентов, иначе ставится ноль. Указывает какую часть прогрессбара
займет текущая операция;
DeleteInFile - определяет удалять ли входной файл после завершения операции. Если true - удалять, false - нет;
callback - функция куда dll передает управление раз в определенный промежуток времени. Служит для обновления
информации на прогрессбаре;
Password - пароль для распаковки arc, 7zip, rar архивов. На данный момент для .arc не поддерживается;
 
все возращаемые функциями значения имеют тип BOOL, т.е. если функция вернула false, значит что-то прошло не так
и надо отменять распаковку. Если вернула true - все ок.
 
 
function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: string;
                           DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: String):BOOL;
 Распаковывает .arc архив, заданный именем файла и каталогом в InName, в каталог, указанный в OutPath.
CfgFile - путь и имя конфигурационного файла (arc.ini). Обычно не требуется;
WorkPath - рабочий путь для распаковки временных файлов freearc'ом. Обычно не требуется;
 
 
 
function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: string;
                                               DeleteInFile:boolean; callback: longword; Password: String):BOOL;
 
 Распаковывает 7-zip архив, заданный именем файла и каталогом в InName, в каталог, указанный в OutPath.
 
 
function ISRarExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: string;
                                               DeleteInFile:boolean; callback: longword; Password: String):BOOL;
 Распаковывает .rar архив, заданный именем файла и каталогом в InName, в каталог, указанный в OutPath.
Поддерживаются multi-volume архивы. Все тома должны находится рядом с первым.
Для работы требуется библиотека unrar.dll. Чтобы ее включить в проект в начале скрипта необходимо
раскомментировать или дописать строку: #define unrar
 
 
function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName,
                                                 OutFile: string;DeleteInFile:boolean; callback: longword):BOOL;
 Распаковывает pcf архив, заданный именем файла и каталогом в InName, в файл, указанный в OutFile.
Поддерживаются версии pcf файлов, созданные precomp v0.38 и precomp v0.4. Для работы требуются дополнительные
файлы. Если пользуетесь первым варинтом в начале скрипта необходимо прописать #define precomp038 и
закомментировать или удалить #define precomp04. Если же пользщуетесь precomp v0.4,  в начале скрипта
прописываете #define precomp04 и комментируете или удаляете #define precomp038
 
 
function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile,
                                                IdxFile: string; DeleteInFile:boolean; callback: longword):BOOL;
 Распаковывает srep архив версии 1.5, заданный именем файла и каталогом в InName, в файл, указанный в OutFile.
IdxFile - указывается индексный файл для srep. Если еще в момент упаковки был активирован этот параметр, кроме
srep файла будет создан отдельно индексный файлб вот его то здесь и указываем. Если же такая опция не была
использована, подставляем пустую строку
 
 
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:string):BOOL;
 
 Показывает диалог с запросом Следующего диска и ожиданием появления в DefaultPath файла, указанного SearchFile.
Свой текст можно указать значением Text;
DefaultPath - должен обязательно указывать {src}, иначе работоспособность не гарантируется;
SearchFile - файл, который каждые 0,2 секунды ищется по указанному пути;
Существует возможность в запросе сменить путь на другой, и если там будет найден SearchFile, то все последующие
{src} в функциях будут идентифицироваться как указанный в данном диалоге путь.
 
 
function StartRecord(RecordFileName:string; AllComponents:longword):BOOL;
 
 Необходим для автоматического определения приоритета в расположении на прогрессбаре для каждой операции.
В тестовом прогоне RecordFileName задает путь и файл куда будут сохранены приоритеты. Просле тестового прогона
и подключеном в проект файле RecordFileName данная команда указывает какой файл искать рядом с dll, пути
игнорируются.
AllComponents - данные для dll о выбранных компонентах, зашифрованные в двоичную систему. В тестовом прогоне
не используются, т.к. там в любом случае распаковываются все компоненты. После тестового прогона совместно с
recods.inf (или любым заданным в RecordFileName) служит для определения какие операции пропустятся и сколько %
будет распределено на все операции, которые будут точно выполнены в процессе установки.
 
 
function CheckPoint(CurComponent:Integer):BOOL;
 
 На текущий момент не требуется. Все контрольные точки при автоматическом распределении процентов делаются
внутри выполняемых операций. Оставил на всякий случай
 
 
function StopRecord:BOOL;
 При тестовом проходе рассчитывает все данные по чекпоинтам и записывает в файл, заданный в StartRecord.
 
 
 
История версий:
 
ISDone.dll v 0.4.2.5
 
  Unarc модуль (ISArcExtract):
     - обновлен unarc.dll до версии 0,67a;
     - в соответствии с предыдущим пунктом стало возможным выводить более подробный отчет о возникшей
             проблеме в случае возникновения ошибки при распаковке .arc архивов.
 
 
 
ISDone.dll v 0.4.2
 
  ОБЩЕЕ:
     - исправлено отображение запроса следующего диска со скинами цветами отличным от стандартных
             (На черных скинах не видно было текста окна запроса);
     - снова вставил свои переделанные системные библиотеки для уменьшения размера. Вроде на этот раз должно
             обойтись без происшествий  
  Unarc модуль (ISArcExtract):
     - добавлен вывод основных сообщений об ошибках, при некорректном завершении операции в unarc.dll.
  7ZIP модуль (IS7ZipExtract):
     - добавлено корректное отображение распаковываемых в текущий момент файлов при извлечении 7z-архивов
             (спасибо Expeditor'у за подсказку (пинок), а то так руки (ноги) до этого и не дошли бы)
  Скрипт:
     - все строковые параметры заменены на AnsiString. Без этого библиотека отказывалась работать на unicode
             версии InnoSetup (за совет спасибо K9000);
     - сделал хоть какую-то финишную страницу при ошибке, а то некоторые прям и используют этот тестовый
             скрипт в своих репаках).  
 
 
 
ISDone.dll v 0.4.1
 
  7ZIP модуль (IS7ZipExtract):
     - обновил 7z.dll до версии 9.15b
 
  ОБЩЕЕ:
     - исправлен баг с нежеланием dll'ки выводить окно запроса следующего диска при более чем 2х дисках
             в проекте (за баг-репорт спасибо TechneS);
     - увеличена в 1000 раз точность внутренней переменной, содержащей общее текущее количество процентов
             и передаваемой от операции к операции (OveralPct). Позволяет избежать погрешность в расчетах
             процентов (за баг-репорт спасибо TechneS);
     - увеличена в 100 раз точность записей в records.inf в автоматическом распределении процентов.
             Сделано для подгонки точности с предыдущим пунктом. Осторожней при смене на новую dll в готовых
             проектах со старым records.inf. Тестовый прогон придется делать заново!
     - в архив добавлена папка Modules, содержащая различные комбинации включеных в библиотеку модулей;
             Сделано для уменьшения размера инсталляций, если какие-то модули не требуются в проекте.
             Чтобы использовать какой-либо из этих вариантов, необходимо переименовать его в isdone.dll и
             заменить полученным файлом стандартную isdone.dll.
 
 
ISDone.dll v 0.4
 
  RAR модуль (ISRarExtract):
     - добавлена поддержка .rar архивов, включая multi-volume. Все тома должны находиться рядом с
             первым на одном диске;
 
  Unarc модуль (ISArcExtract):
     - добавлена возможность задавать рабочий каталог для распаковки freearc;
     - изменено название функции с ISUnarcExtract на ISArcExtract. Осторожней со старыми скриптами!
 
  Скрипт:
     - процесс установки перенесен в момент ssInstall, в связи с чем возникла необходимость в следующем
             пункте;
     - с помощью TechneS (спасибо ему за это) был упрощен скрипт добавлением условных операторов
             #define, #ifdef, #endif и некоторых других мелких деталей. Теперь нет необходимости менять
             в нескольких местах компилить ли в проект файлы records.inf, precomp04.exe и т.д. или нет;
     - практически все комментарии перенесены в файл readme.txt, так же туда добавлено более подробное
             описание каждой функции;
 
  ОБЩЕЕ:
     - добалена поддержка компонентов. Отключить использование компонентов можно просто закомментировав
             в начале скрипта строку: #define Components;
     - добавлена функция на запрос следующего диска с автоматическим слежением за входным путем на
             предмет появления там заданного файла;
     - полностью пеработан блок создания автоматического распределения процентов на прогрессбар, в
             связи с чем исправлены небольшие баги;
 
 
ISDone.dll v 0.3.2
 
  7ZIP модуль (IS7ZipExtract):
     - исправлен баг с невозможностью распаковать архивы более определенной длнины.
            Это было связано с криво переписанными системными библиотеками, чтобы не возиться
            вернул все системные библиотеки на место, что снова увеличило dll на 20кб
 
 
ISDone.dll v 0.3.1
 
  Unarc модуль (ISUnarcExtract):
     - исправил баг с возникающими ошибками при распаковке некоторых архивов
  7ZIP модуль (IS7ZipExtract):
     - исправил баг с ошибкой при распаковке нескольких 7z архивов в одном скрипте
 
  ОБЩЕЕ:
     - мелкие корректировки в коде, удаляющие некоторые дефекты (все ДОЛЖНО работать стабильнее,
            но не факт, что будет )
 
 
ISDone.dll v 0.3
 
  Unarc модуль (ISUnarcExtract):
     - собственно он и добавлен, и включен в состав библиотеки ISDone.dll, соответвенно никаких
            дополнительных файлов не требуется
 
  ОБЩЕЕ:
     - по просьбам трудящихся реализовно 2 типа подготовки процентных соотношений всех операций:
            1)ручная и 2)автоматическая с тестовым прогоном. Подробности внизу скрипта;
     - исправлен баг с путями файла records.inf;
     - исправлен баг с иногда возникающей ошибкой при нажатии отмены в процессе распаковки 7zip;
     - увеличил обновление окна инсталера до 40 раз в секунду.
 
 
ISDone.dll v 0.2
 
  ZIP  модуль (ISZipExtract):
     -удален из-за большого числа багов и из-за сомнительной нужности, вместо него пакуйте 7zip'ом
 
  7ZIP модуль (IS7ZipExtract):
     - 7z.dll включен в состав моей библиотеки, так что теперь не требуется добавлять его в проект
 
  SRep модуль (ISSrepExtract):
     - srep v 1.5 включен в состав моей библиотеки, теперь не требуется добавлять srep.exe в проект
 
  ОБЩЕЕ:
     - практически полностью автоматизирована система процентного распределения прогрессбара на
            каждую операцию относительно общего времени выполнения всех опрераций
     - исправлены баги с вылетающими ошибками в конце установки (По крайней мере при моих испытаниях
            больше ошибок не было. Оказывается при выходе из процедур все динамические переменные
            типа string и др. или хэндлы,с которыми работала dll, должны быть очищены (в смысле
            освобождена используемая ими память)
     - переписал некоторые системные библиотеки в исходниках, что дало выигрыш в размере кода 20Кб
     - сделал постоянное обновление окна инсталера 20раз в секунду во всех модулях независимо от
            действий распаковщика
 
 
ISDone.dll v 0.1
 
  ZIP  модуль (ISZipExtract):
     -не поддерживаются архивы более 4Гб
     -не обрабатываются архивы с паролями
     -не обрабатываются multi volume архивы
  7ZIP модуль (IS7ZipExtract):
     -не поддерживаются multi volume архивы
 
  Скрипт:
     -при запуске скрипта прямо из компилятора InnoSetup после всех операций распаковки и нажатия
            кнопки "Finish" иногда вылетает ошибка о невозможности чтения какого-то адреса.

Всего записей: 1076 | Зарегистр. 11-10-2006 | Отправлено: 02:20 27-08-2010
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)
Widok (23-11-2010 10:55): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru