Как заставить Inno setup разархивировать bin-файл во время установки с помощью freeArc

first-s

Мимокрокодил
Привет, я только что открыл для себя мир сжатия и настройки Inno, поэтому у меня есть только основы.

Я хочу создать настройку с помощью Inno Setup, которая позволяет мне при ее запуске разархивировать файл .bin, находящийся в той же папке, что и установка.

Я уже пытался сделать это следующим образом: я взял исполняемый файл бесплатной дуги, который я переименовал в .disk, затем я создал файл bat, который должен извлекать мой файл следующим образом:

short .disk x file.bin >null

Это работает, но я не знаю, как заставить InnoSetup понять, что нужно запустить .bat-файл во время установки, не спрашивая его в конце, а затем удалить файл диска и bat-файл.

Возможно, как новичок, я не имею представления о реальном решении. Но есть ли решение?

(Я задал этот вопрос с помощью переводчика)
 

Andreo Fadio

Старожил
Это работает, но я не знаю, как заставить InnoSetup понять, что нужно запустить .bat-файл во время установки, не спрашивая его в конце, а затем удалить файл диска и bat-файл
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Tasks]
Name: "Tacsk1"; Description: "Применить"; GroupDescription: "Моя супер опция"; Flags: checkablealone checkedonce; Check: CheckFileBin

[Run]
Filename: "{src}\My_bat_file.bat"; Flags: skipifdoesntexist; Tasks: Tacsk1

[Code]
function CheckFileBin: Boolean;
begin
 if FileExists(ExpandConstant('{src}\My_bat_file.bat')) and
  FileExists(ExpandConstant('{src}\My_file_bin.bin')) then
  Result:= True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = ssPostInstall then
  begin
   if IsTaskSelected('Tacsk1') then
    begin
     if FileExists(ExpandConstant('{src}\My_bat_file.bat')) then
      DeleteFile(ExpandConstant('{src}\My_bat_file.bat'));
     if FileExists(ExpandConstant('{src}\My_file_bin.bin')) then
      DeleteFile(ExpandConstant('{src}\My_file_bin.bin'));
    end;
  end;
end;
 

first-s

Мимокрокодил
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Tasks]
Name: "Tacsk1"; Description: "Применить"; GroupDescription: "Моя супер опция"; Flags: checkablealone checkedonce; Check: CheckFileBin

[Run]
Filename: "{src}\My_bat_file.bat"; Flags: skipifdoesntexist; Tasks: Tacsk1

[Code]
function CheckFileBin: Boolean;
begin
if FileExists(ExpandConstant('{src}\My_bat_file.bat')) and
  FileExists(ExpandConstant('{src}\My_file_bin.bin')) then
  Result:= True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
  begin
   if IsTaskSelected('Tacsk1') then
    begin
     if FileExists(ExpandConstant('{src}\My_bat_file.bat')) then
      DeleteFile(ExpandConstant('{src}\My_bat_file.bat'));
     if FileExists(ExpandConstant('{src}\My_file_bin.bin')) then
      DeleteFile(ExpandConstant('{src}\My_file_bin.bin'));
    end;
  end;
end;
Я попробовал, не работает, но я скопировал ваш код и позаботился о замене ключевых слов.
Возможно, я делаю это неправильно, но при установке .bat не запускался вообще.

Кажется, я видел метод, в котором используется файл {tmp}, в котором есть другая dll arc.ini. Я не понимаю, как это работает, но я просмотрел скрипт iss из установки видеоигры, который извлекает файл .bin, и в коде нет никакого конкретного [RUN], который, кажется, выполняет извлечение, ни какого-либо CODE
 

first-s

Мимокрокодил

Вложения

Сверху