Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]
ToBeLife
06-12-2018, 17:18
Всем привет.
Подскажите пожалуйста, как реализуется рабочий вариант бэкапа и возможность отключать деинсталлятор через task.
Прошу готовый пример. Как в этом русификаторе (примеры из справки не очень подходят).
Спасибо.
Доброго,
подскажите, есть ли возможность установить разные значения для VersionInfoDescription (в разделе [Setup]) в зависимости от локализации
данное поле отображается в описании установщика, если выбрать "Свойства", по клику ПКМ
TROY Diamond
22-12-2018, 14:05
Здравствуйте!
Прошу прощения если создал тему НЕ в том разделе, просьба перенести её в соответствующий!
Подскажите, пожалуйста, аналог кода ниже, с использованием консольных библиотек от 7-Zip, WinRAR? библиотек Inno Setup и т.п. , для упаковки, БОЛЬШОГО количества имеющихся папок, в отдельные архивы ZIP, с заданием ОПРЕДЕЛЁННОГО расширения и обычной степенью сжатия, в процессе установки, с последовательным удалением каждой папки СРАЗУ ЖЕ ПОСЛЕ СОЗДАНИЯ АРХИВА, из секции CODE, в Inno Setup, а НЕ с использованием батника и т.п. из секции RUN!
Либо посоветуйте, как модифицировать и доработать данный код, желательно помочь и прислать ПОЛНЫЙ код для секции CODE и Files в Inno Setup:
Секция Files
Source: "Data\Папка_pak\*"; DestDir: "{app}\DATA\ПАПКА_pak"; BeforeInstall: ChangeCaption('Распаковка файлов...'); AfterInstall: ExtLog(); Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs sortfilesbyextension
Source: "{app}\Файл-пустышка"; DestDir: "{tmp}\"; BeforeInstall: ChangeCaption('Создание ФАЙЛА(архива).pk5...'); AfterInstall: Pack('ПАПКА_pak'); Flags: ignoreversion overwritereadonly
Source: "{app}\Файл-пусиышка"; DestDir: "{tmp}\"; BeforeInstall: ChangeCaption('Удаление временных файлов...'); AfterInstall: RF(ExpandConstant('{app}\Main\pkzip.exe')); Flags: ignoreversion overwritereadonly
Секция Code
procedure Pack(str: string);
var
res : Integer;
begin
Exec(ExpandConstant('{app}\Main\pkzip.exe'), ' -add -dir=relative -NoZipExtension '+str+'.pk3' + ' ' + str + '\*.*', ExpandConstant('{app}\Main\'), SW_HIDE, ewWaitUntilTerminated, Res);
RD(ExpandConstant('{app}\Main\')+str);
end;
procedure RD(Dir:string);
var
res : integer;
begin
Exec('cmd.exe', ' /c rd /S /Q ' + AddQuotes(Dir),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
Exec('cmd.exe', ' /c rd /S /Q ' + '"'+Dir+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;
procedure RF(file:string);
var
res : Integer;
begin
Exec('cmd.exe', ' /c del /F /Q ' + AddQuotes(file),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
Exec('cmd.exe', ' /c del /F /Q ' + '"'+file+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;
Всё это нужно для создания "игровых" архивов. Все "игровые" - это Архивы ZIP, с переименованным расширением. Сжатие ZIP-архивов - НЕ благодарное дело и НЕ приносит большого выигрыша в весе!
Поэтому я распаковал все, в отдельные, одноимённые папки - всё сжал, теперь нужно чтобы в процессе извлечения (копирования) установщиком Inno Setup, этих папок по окончанию копирования каждой папки создавался архив, а эта папка удалялась, потом копировалась следующая - создавался архив и папка после сразу же удалялась! А НЕ в конце всей установки!
для упаковки, БОЛЬШОГО количества имеющихся папок, в отдельные архивы ZIP, с заданием ОПРЕДЕЛЁННОГО расширения и обычной степенью сжатия, в процессе установки, с последовательным удалением каждой папки СРАЗУ ЖЕ ПОСЛЕ СОЗДАНИЯ АРХИВА, »
Вы что — решили очередного вымогателя «запилить», коллега ;)?
TROY Diamond
22-12-2018, 15:06
Iska, давайте по существу, я же написал для чего!
TROY Diamond, эта шутка была.
По существу — я хотел бы уяснить смысл сих действий, которые по существу приводят лишь к увеличению времени установки. В чём глубинный смысл? Чем Вам так не нравятся архивы внутри инсталляции?
P.S. На выбор смотрите раз (http://forum.oszone.net/post-2012750.html#post2012750), два (https://soar.name/ru/portfolio/inno-setup-archive-manager/).
TROY Diamond
22-12-2018, 19:19
Iska, что-то вообще не то! Написал вам в Личку - ваш ящик переполнен, посмотрите, пожалуйста!
El Sanchez
23-12-2018, 12:05
подскажите, есть ли возможность установить разные значения для VersionInfoDescription (в разделе [Setup]) в зависимости от локализации
данное поле отображается в описании установщика, если выбрать "Свойства", по клику ПКМ »
ADRebus, локализации чего?
Подскажите, пожалуйста, аналог кода ниже, с использованием консольных библиотек от 7-Zip, WinRAR? библиотек Inno Setup и т.п. , для упаковки, БОЛЬШОГО количества имеющихся папок, в отдельные архивы ZIP, с заданием ОПРЕДЕЛЁННОГО расширения и обычной степенью сжатия, в процессе установки, с последовательным удалением каждой папки СРАЗУ ЖЕ ПОСЛЕ СОЗДАНИЯ АРХИВА, из секции CODE, в Inno Setup, а НЕ с использованием батника и т.п. из секции RUN! »
TROY Diamond,
[Files]
Source: 7za.exe; Flags: dontcopy
; {app}\data\test01
Source: {app}\test01\*; DestDir: {app}\data\test01; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs sortfilesbyextension
Source: dummy; DestDir: {app}\data; AfterInstall: Pack(ExpandConstant('{app}\data\test01')); Flags: deleteafterinstall
; {app}\data\test02
Source: {app}\test02\*; DestDir: {app}\data\test02; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs sortfilesbyextension
Source: dummy; DestDir: {app}\data; AfterInstall: Pack(ExpandConstant('{app}\data\test02')); Flags: deleteafterinstall
[Code]
procedure Pack(const APath: string);
var
ResultCode: Integer;
begin
if not FileExists(ExpandConstant('{tmp}\7za.exe')) then
ExtractTemporaryFile('7za.exe');
if not Exec(ExpandConstant('{tmp}\7za.exe'), Format('a -tzip -sdel -y "%0:s.pk3" .\%0:s\*', [ExtractFileName(APath)]), ExtractFileDir(APath), SW_HIDE, ewWaitUntilTerminated, ResultCode) then
RaiseException(Format('Add new data from ''%s'' to archive ''%s.pk3'' failed with error 0x%.8x (%s)', [APath, ExtractFileName(APath), ResultCode, SysErrorMessage(ResultCode)]));
if not RemoveDir(APath) then
begin
ResultCode := DLLGetLastError;
RaiseException(Format('Unable to delete empty folder ''%s''. Error code: 0x%.8x (%s)', [APath, ResultCode, SysErrorMessage(ResultCode)]));
end;
end;
По существу — я хотел бы уяснить смысл сих действий, которые по существу приводят лишь к увеличению времени установки. В чём глубинный смысл? Чем Вам так не нравятся архивы внутри инсталляции? »
Iska, размер инсталлятора по схеме zip + LZMA больше, чем просто LZMA. Хочет сэкономить на размере в ущерб времени установки.
Iska, размер инсталлятора по схеме zip + LZMA больше, чем просто LZMA. »
El Sanchez, сильно больше?
Кстати, почему не рекомендуете коллеге TROY Diamond Вашу собственную разработку, на которую я ссылался выше (http://forum.oszone.net/post-2012750.html#post2012750)?!
Написал вам в Личку - ваш ящик переполнен, посмотрите, пожалуйста! »
Пишите прямо здесь.
TROY Diamond
23-12-2018, 13:13
Iska!
Iska, размер инсталлятора по схеме zip + LZMA больше, чем просто LZMA. Хочет сэкономить на размере в ущерб времени установки.
Да так и есть! Если пытаться сжать уже сжатое в ZIP, с помощью стандартных средств Inno Setup в LZMA, то почти вообще НЕ сжимается, а если распаковать все ZIP-архивы в отдельные папки, то сжимается существенно в LZMA.
Я привёл вам пример рабочего скрипта! НО там используется старый консольный pkzip, который давным-давно НЕ поддерживается и НЕ развивается разработчиками! ((( На некоторых компах он почему-то НЕ "отрабатывает", (видимо из-за старости или какой-то неправильности скрипта), а также некоторые антивирусы на него "ругаются"! ((
Я просил усовершенствовать-доработать данный скрипт или предложить аналог вместо pkzip, использовать иные библиотеки от RAR, 7-Zip или ещё откуда-то. Сжать в Zip не так сложно ведь? Просто папок 100-ни!
Пример, есть папки Pack01, Pack02, Pack03 - это распакованные одноимённые архивы ZIP (Pack01.pack, Pack02.pack., Pack03.pack) - условно для примера.
Нужно чтобы из установщика Inno Setup папка Pack01 - извлеклась скопировалась в папку установки, после чего заархивировалась в необходимый архив ZIP с обычной степенью сжатия - и именем и расширением, какое нужно, например, Pack01.pack, после чего папка Pack01, была сразу же удалена, и только после этого началось копирование Pack02... - создание из неё архива Pack02.pack, удаление папки Pack02 и т.д...
TROY Diamond, Вам тот же вопрос: «существенно» — это сколько?
El Sanchez
23-12-2018, 15:59
El Sanchez, сильно больше? »
Iska, будет зависеть от степени сжимаемости исходных файлов. Я пока пример писал потестировал на кошках:
1. Берем пару папок с файлами, каждую из них пакуем в zip-архив. Полученные архивы пакуем в test01.7z (LZMA2, Ultra). Тут эмулируем инсталлятор с максимальным сжатием с zip-архивами внутри. Размер архива test01.7z - 241141 байт.
2. Эту же пару папок пакуем в test02.7z (LZMA2, Ultra). Тут эмулируем инсталлятор с максимальным сжатием с файлами внутри. Размер архива test02.7z - 193102 байт.
Кстати, почему не рекомендуете коллеге TROY Diamond Вашу собственную разработку, на которую я ссылался выше?! »
Iska, старьё и много букв для TROY Diamond :)
TROY Diamond
23-12-2018, 19:24
El Sanchez, Iska, так как сделать-то?
По поводу размера - игра в установленном конечном виде с игровыми ZIP-архивами занимает 15 ГБ, примерно, если ничего НЕ менять и прям так с этими архивами создать установщик в Inno Setup, с максимальным сжатием (LZMA - LZMA2), то получается около 14 -14,5 ГБ. И то там кроме архивов есть ещё и не запакованные файлы, вот они и сжимаются, - от этого и размер уменьшается!
Кроме того, если НЕ использовать сжатие LZMA - LZMA2, а выбрать сжатие ZIP, то разница НЕ большая, 14,7 ГБ, зато время на сборку (компиляцию) установщика экономится!
А если распаковать все архивы в папки и собрать установщик в Inno Setup, сжав даже просто (LZMA), то получится около 11 ГБ!
А если ещё поставить флаги: сортировать по имени, по расширению все файлы, - то получается около 10,5 ГБ!
TROY Diamond,
Скачай ISDone 0.6 final там есть возможность распаковать архивы 7zip и FreeArc и поддержка упаковки файлов в архивы zip. многое другое
ну так распакуй zip архивы и запакуй файлы в архив 7zip или FreeArc
после установки укажи за запаковать
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Pack01\*'), ExpandConstant('{app}\Pack01.pack'), 2, false ) then break;
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Pack02\*'), ExpandConstant('{app}\Pack02.pack'), 2, false ) then break;
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Pack03\*'), ExpandConstant('{app}\Pack03.pack'), 2, false ) then break;
TROY Diamond
29-12-2018, 02:25
vint56, мне всё это нужно стандартным установщиком Inno Setup, а не чтобы рядом с setup.exe лежали архивы в 7-zip или FreeArc, переименованные в *.bin! И уж НЕ в коем случае (как многие сборщики делают) - сжать всё что нужно внешним архиваторами 7-zip или FreeArc, и другими, потом всё это "загнать" в Inno Setup, потмо в процессе установки игры, всё это начнёт копироваться на ЖД, потом распаковываться, потом перепаковываться в "игровые архивы" и только потом удаляться! ВОТ ЭТОГО НЕ НАДО!
Это во-первых требует на ЖД раза в 2-3 больше свободного места на ЖД и требует намного больше времени на установку!
Мне нужно по другому! Пример:
В папке Game у меня лежат все файлы игры и все распакованные игровые архивы (по папкам) и я всё это содержимое просто скомпилирую Inno Setup, - стандартного метода сжатия LZMA - вполне хватит!
Начнётся ОБЫЧНЫЙ процесс установки игры (копирование файлов), вот всё что мне нужно, чтобы в процессе установки копирования всех файлов игры, каждая скопированная ОПРЕДЕЛЁННАЯ папка, сразу же после копирования - архивировалась в zip, с конкретным названием, после чего сразу же удалялась, потом копировалась следующая папка...
El Sanchez, Iska, так как сделать-то? »
TROY Diamond, пинайте про «много букв» коллегу El Sanchez, если сами не разобрались.
El Sanchez
29-12-2018, 13:00
Мне нужно по другому! Пример:
В папке Game у меня лежат все файлы игры и все распакованные игровые архивы (по папкам) и я всё это содержимое просто скомпилирую Inno Setup, - стандартного метода сжатия LZMA - вполне хватит!
Начнётся ОБЫЧНЫЙ процесс установки игры (копирование файлов), вот всё что мне нужно, чтобы в процессе установки копирования всех файлов игры, каждая скопированная ОПРЕДЕЛЁННАЯ папка, сразу же после копирования - архивировалась в zip, с конкретным названием, после чего сразу же удалялась, потом копировалась следующая папка... »
TROY Diamond, рабочий пример я привел в предыдущем своем сообщении, осталось увидеть.
Неправильно ты, Дядя Фёдор, бутерброд ешь Вы, коллега, ссылку приводите ;), вот так:
TROY Diamond, рабочий пример я привел в предыдущем своем сообщении (http://forum.oszone.net/post-2847715.html#post2847715), осталось увидеть. »
надо.
TROY Diamond
30-12-2018, 00:44
El Sanchez, вот теперь увидел, благодаря - Iska! Спасибо!
7za.exe - какой брать и ещё вопрос Inno Setup ANSI или Unicode - имеет значение, какой брать?
7za.exe - какой брать »
Последний.
Inno Setup ANSI или Unicode - имеет значение, какой брать? »
Разумеется, будет иметь значение. Берите Unicode, не прогадаете.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.