Проблема Создание инсталлятора свыше 2 ГБ одним файлом

BergForce

Новичок
Доброго времени суток, друзья!

Перерыл кучу форумов, так и не нашёл решение. Тут этот вопрос также задавали, но тем не менее интересно как это реализовать, и если это априори невозможно, то мб какие-то обходные пути есть, я новичок и не совсем понимаю, что нужно сделать...
 

Yaroslav950

Участник
Я советовать не буду ну для начало пользуйтесь 7-z или winrar или Arc. Лучше будет из всех 7-z. В справке все есть Inno setup.
 
Последнее редактирование:

Yaroslav950

Участник
#define PackZIP - нужно открыть
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\data.7z'), ExpandConstant('{app}\'), false, '') then break; data7z- это ваш архив
0 - первый ноль отвечает за тестовой прогон, его можно поставить на 100,если вы не хотите проверить архив на распаковку битый не битый, а второй ноль это отвечает за компонент.
{app}\ - здесь пишется папка куда будет распаковываться файл, false отвечает за удаление в папке tmp файлов, если вы поставите true,то останется tmp.
Всё это есть в справке ISDone.
 

BergForce

Новичок
#define PackZIP - нужно открыть
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\data.7z'), ExpandConstant('{app}\'), false, '') then break; data7z- это ваш архив
0 - первый ноль отвечает за тестовой прогон, его можно поставить на 100,если вы не хотите проверить архив на распаковку битый не битый, а второй ноль это отвечает за компонент.
{app}\ - здесь пишется папка куда будет распаковываться файл, false отвечает за удаление в папке tmp файлов, если вы поставите true,то останется tmp.
Всё это есть в справке ISDone.
И это будет работать у всех юзеров без всяких программ?
 

Yaroslav950

Участник
Ну да нужно скачать 7-zip и сжимать ти. Потом просто вставляй сжатый архив возле setup и все дела.
 

BergForce

Новичок
Мне надо чтоб всё работало у нейтрального пользователя, даже если у него чистая винда, а не изобретать велосипед.
 

Yaroslav950

Участник
Этим методом который я прописал ты распаковываешь, а сжимать можешь чем хочешь главное ,чтобы твой архив был 7z. В Inno setup уже все собрано для распаковки
 

Yaroslav950

Участник
Всему в жизни надо учиться, а не лениться, но и не всем дано писать скрипты и прочее. Я выше все четко написал,что нужно для упаковки и распаковки.7-zip архиватор есть в интернете. Скачивай его и упаковывай файлы. Потом этот упакованный файл надо положить возле setup и все дела.
 

BergForce

Новичок
Всему в жизни надо учиться, а не лениться, но и не всем дано писать скрипты и прочее. Я выше все четко написал,что нужно для упаковки и распаковки.7-zip архиватор есть в интернете. Скачивай его и упаковывай файлы. Потом этот упакованный файл надо положить возле setup и все дела.
не умничал бы, а помог лучше, объяснив нормально. Я новичок в этом деле. Походу придётся по старинке Smart Install Maker юзать.

Я не программист вообще. Неужели нормально объяснить нельзя и дать готовый кусок кода? Мне не нужно архив прикладывать к инсталлятору, мне нужно чтоб только один инсталлятор был. 7-Zip-то есть у меня, чё толку? У конечного пользователя его может не быть. Зачем мне тогда InnoSetup, если бы я мог игру тупо в архиве распространять? Мне не это надо...
 

Yaroslav950

Участник
Я нечего не давал, я не смеюсь, я ж говорю не всем дано писать скрипты. Вот сам Isdone тут все для распаковки есть:
 

Вложения

Cyberworm

Новичок
Первым делом создаёте архив в 7-Zip нужного объёма. Потом переименовываете его по желанию в Data.bin и прописываете точный размер в NeedSize. Ещё не стоит забывать про команду ExtractTemporaryFile, которая вытаскивает Data.bin из тела инсталлятора. Следовательно дальше дело остаётся за малым и плагин 7-Zip извлекает из него файлы в нужную папку. Объяснил по колхозному, но это условие для инсталлятора с одним exe файлом библиотеки ISDone. Вот на эти строчки обратите пристальное внимание.
"Пример"
Код:
#define NeedSize "точный размер в байтах"
#define NeedMem 1024
#define SecondProgressBar

[Setup]
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

[Files]
Source: "Example/Include/7z.dll"; DestDir: {tmp}; MinVersion: 0.0,6.1sp1; Flags: dontcopy
Source: "Example/ISDone.dll"; DestDir: "{tmp}"; MinVersion: 0.0,6.1sp1; Flags: dontcopy
Source: "Example/Data.bin"; DestDir: "{tmp}"; MinVersion: 0.0,6.1sp1; Flags: dontcopy

[Code]
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';

// Распаковка всех необходимых файлов в папку {tmp}
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
#endif

    ExtractTemporaryFile('Data.bin');

    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
      repeat
         
        if not FileSearchInit(true) then break;

    if not IS7ZipExtract   ( 0, 0, ExpandConstant('{tmp}\Data.bin'), ExpandConstant('{app}\Artemis\Content\Paks'), false, '') then break;

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;
 
Сверху