ISDone

DLL ISDone 0.6 final

Нет прав для скачивания

Crachlow

Старожил
@Dok2. У тебя действительно взят arc.exe из Freearc_protect. Поэтому и пароль не подходит. Когда ты создавал комплект, который рядом лежит, то который там пароль был зашит, тот и надо ставить при распаковке. То что ты мне скидывал, я подправил, запаковал, и через скрипт установил. Работает. Папка Fa - это и есть комплект Freearc_potect.
https://mega.nz/file/GNoSCCSR#Q9mQ5FF-bN4Zk-Z11q3XuOCf-z5kFLaF-vk2U9PZl10
Что не понятно пиши в личку или сюда. Arc.exe я заменил на нормальный.
 
Последнее редактирование:

Dok2

Новичок
@Dok2. У тебя действительно взят arc.exe из Freearc_protect. Поэтому и пароль не подходит. Когда ты создавал комплект, который рядом лежит, то который там пароль был зашит, тот и надо ставить при распаковке. То что ты мне скидывал, я подправил, запаковал, и через скрипт установил. Работает. Папка Fa - это и есть комплект Freearc_potect.
https://mega.nz/file/GNoSCCSR#Q9mQ5FF-bN4Zk-Z11q3XuOCf-z5kFLaF-vk2U9PZl10
Что не понятно пиши в личку или сюда. Arc.exe я заменил на нормальный.
Да, все работает.
Спасибо!
 

robinanis

Новичок
А как сделать так же только для двух файлов? Чтоб он искал не один, а два файла
robinanis
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

Код:
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if CurPageID = wpSelectDir then begin
If not FileExists(ExpandConstant('{app}\d3dcompiler_47.dll')) then begin
MsgBox('Необходимые файлы приложения "d3dcompiler_47.dll" не найдены' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.', mbError, mb_Ok);
Result:= False;
end;
end;
end;
 

xetrin

Мимокрокодил
А как сделать так же только для двух файлов? Чтоб он искал не один, а два файла
Код:
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if CurPageID = wpSelectDir then begin
If not FileExists(ExpandConstant('{app}\d3dcompiler_47.dll')) or not FileExists(ExpandConstant('{app}\d3dcompiler_43.dll')) then begin
MsgBox('Необходимые файлы приложения "d3dcompiler_47.dll и d3dcompiler_43.dll" не найдены' #13#13 'Пожалуйста, выберите правильный путь для установки обновления.', mbError, mb_Ok);
Result:= False;
end;
end;
end;
Если я правильно понял)
 

Den.Scaletta

Новичок
Всем доброго здравия.🙏
При установке инсталлятора созданного в Inno Setup 6.2.1 и распаковке архива через isdone на моём системнике все прекрасно работает:
У меня 8192 RAM(оперативной памяти).
Проверил на ноутбуке с 4096 RAM и получил ошибку:
В инсталляторе участвует внешний архив созданный через xtool+lolz.
Вот с этими параметрами:
[External compressor:xtool]
header = 0
packcmd = xtool.exe precomp { -option} -d1 -mpng -mzlib -mpreflate -c32mb -t100p-1 --mem=75p --dbase --dedup - - <stdin> <stdout>

[External compressor:lolz]
header = 0

packcmd = lolz_x64.exe -mtt1 -mt1 -d208m -mtb208 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp
Выяснилось, что причина нехватка физической оперативной памяти, файл подкачки не учитывается.
Также, выяснилось, что при распаковке через библиотеку cls-lolz.dll, активируется параллельная распаковка lolz и xtool, одновременно, что значительно забивает RAM:
Создал тестовый стенд оставив в системе, вначале 4 гб., ошибка сразу начала появляться, потом снизил до 2 гб. и стал тестировать значения lolz и xtool для параллельной распаковки.

Пришёл к эти результатам:
[External compressor:xtool]
header = 0
unpackcmd = xtool.exe decode -t100p-1 --mem=25p --dedup - - <stdin> <stdout>
[lolz]
Bufsize=512k
transfer_ReadBufSize=512k
transfer_WriteBufSize=512k

MaxThreadsUsage=100%-1
MaxMemoryUsage=25%-50m

ldmfTempPath=.\
ldmfMaxMemoryUsage=32m

ldmfDeleteTmp=1
Ключ (--mem) в xtool должен всегда оканчиваться на (5), для примера:
Допустимые значения для 2 гб. озу (--mem=25p --mem=35p --mem=45p --mem=55p)
Не допустимые значения при 2 гб. озу (--mem=65p --mem=75p --mem=85p --mem=95p) - возможно у вас отработают, у меня приводили к ошибке.
Тоже касается ключа MaxMemoryUsage в CLS.ini.
Ключи -t100p и MaxThreadsUsage всегда должны оканчиваться на 0.
Так как при компрессии через lolz была активирована многопоточность (-mtt1), то при распаковке задействован файл CLS.ini, который регулирует использование ядер процессора и оперативной памяти.
Если многопоточность отключена при компрессии (-mtt0 значение по умолчанию), то lolz оттолкнётся от максимально допустимого значения физической оперативной памяти, не беря в расчёт файл подкачки. И возьмёт лишь столько сколько ему необходимо для распаковки.
С заниженными значениями скорость распаковки снизилась, но зато пропала ошибка unarc.dll -12, и на ноутбуке всё прекрасно распаковалось, а стабильность - это самое главное.
Потому что, то что хорошо отработает на твоей системе, совершенно иначе покажет себя на другой.
В связи с этим пришёл к следующему выводу, что нужно обязательно создавать тестовые условия для своего инсталлятора.
И отталкиваться в этих тестах нужно именно от низких или средних значений, которые рекомендуются для вашего проекта.
Что лучше, если человек при использовании вашего инсталлятора подождёт на 10 минут больше, но в конце получит стабильность и корректность данных crc.
Или турбо распаковку, которая отработает не на всех системах, и 5-ть из 10-ти человек поимеют разочарование с вашим инсталлятором.
Также есть функции, которые можно прописать в скрипте при создании инсталлятора, отвечающие за ограничения расхода памяти, но я с эти пока не знаком.
Поэтому стараюсь реализовать стабильность изначально.:yes:
Будьте дальновидны!;)
Всем удачи!:bye:

P.S. Провёл ещё тесты и выяснилось что для inno setup можно создавать оба варианта архивов, как с включенным ключом (-mtt1) так и с ключом по умолчанию (-mtt0). Также, можно оставлять включенной библиотеку cls-lolz.dll, даже при наличии архива созданного с ключом (-mtt0).
Это не будет приводить к ошибке переполнения памяти. Если в цепи участвует xtool, то именно его поведение нужно корректировать для того чтобы избежать ошибки переполнения памяти.
 
Последнее редактирование:

Edison007

Ветеран
Модератор
Так как при компрессии через lolz была активирована многопоточность (-mtt1), то при распаковке задействован файл CLS.ini, который регулирует использование ядер процессора и оперативной памяти.
Если многопоточность отключена при компрессии (-mtt0 значение по умолчанию)
Вы неправильно интерпретируете этот параметр. Он не отключает-включает многопоточность, а задает тип многопоточности. При значении 1 данные разбиваются на блоки (из параметра mtb) и жмутся независимо друг от друга (что-то типа 4x4 в FreeArc), а при значении 0, для каждого потока сохраняется статистика из предыдущего блока примерно так при -mtt0 -mt2:
Код:
[поток_1_блок_1]                [поток_1_блок_2]                ...
                [поток_2_блок_1]                [поток_2_блок_2]                ...
При значении параметра mtt0 для распаковки будет использоваться столько же потоков, сколько и для сжатия - РЕГУЛИРОВАТЬ НЕЛЬЗЯ. А вот при значении mtt1 уже можно задать кол-во потоков на распаковку.
 

Den.Scaletta

Новичок
Вы неправильно интерпретируете этот параметр. Он не отключает-включает многопоточность, а задает тип многопоточности. При значении 1 данные разбиваются на блоки (из параметра mtb) и жмутся независимо друг от друга (что-то типа 4x4 в FreeArc), а при значении 0, для каждого потока сохраняется статистика из предыдущего блока примерно так при -mtt0 -mt2:
Код:
[поток_1_блок_1]                [поток_1_блок_2]                ...
                [поток_2_блок_1]                [поток_2_блок_2]                ...
При значении параметра mtt0 для распаковки будет использоваться столько же потоков, сколько и для сжатия - РЕГУЛИРОВАТЬ НЕЛЬЗЯ. А вот при значении mtt1 уже можно задать кол-во потоков на распаковку.
Edison007, здравствуйте.
Благодарю вас за это важное уточнение!🙏
Теперь буду понимать корректнее.:yes:
 

ilyaign86

Новичок
К сожалению функция записи в ЛОГ некорректно работает. Это или проблема распаковщика 7Z (я для себя репаки делаю с такими архивами) или в целом Inno, но в лог записываются только файлы с существенным размером, всякие DLL-ки и прочие мелкие файлы просто не замечает при распаковке и не добавляет в лог, соответственно часть файлов остаются при удалении.
 

Andreo Fadio

Ветеран
всякие DLL-ки и прочие мелкие файлы просто не замечает при распаковке и не добавляет в лог, соответственно часть файлов остаются при удалении.
так пропишите удаление этих файлов или свою функцию лога сделайте, по примеру: ссылка на тему
 

Dragonborn

Мимокрокодил
Всем привет! Кто может подсказать, можно ли как-то увеличить производительность распаковки с помощью процедуры IS7zipExtract? Или это ограничение ISDone и никак многопоточность не реализовать?
 

robinanis

Новичок
из-за чего может быть эта ошибка? Ошибка происходит в момент установки 1672335870272.png1672335890574.png
 

Mr-r00t

Новичок
Всем привет! Кто может подсказать, можно ли как-то увеличить производительность распаковки с помощью процедуры IS7zipExtract? Или это ограничение ISDone и никак многопоточность не реализовать?
Переходите на современные алгоритмы упаковки. 7zip там нет.
 
Сверху