Как извлечь файлы, которые находятся в папке в ZIP-файле, с помощью Inno Setup?

#installation #zip #inno-setup

Вопрос:

Ну, у меня есть проект на Python, и сейчас я создаю установщик. Я добавил к этому файл проекта .exe и zip-файл . ZIP-файл содержит .exe-модули, данные и т.д. И его структура такова:

 example.zip: |---project-folder:  |----here will be the files.  |----here will be the files.  

Что я хочу, так это извлечь те файлы, которые находятся внутри project-folder . Чтобы файл .exe мог работать. У меня есть этот код для извлечения zip-файла:

 [Code]   procedure InitializeWizard; begin  ForceDirectories(ExpandConstant('{localappdata}folder-Aappfolder-B')) end;  const  SHCONTCH_NOPROGRESSBOX = 4;  SHCONTCH_RESPONDYESTOALL = 16;  procedure unzip(ZipFile, TargetFldr: variant); var  shellobj: variant;  SrcFldr, DestFldr: variant;  shellfldritems: variant; begin  if FileExists(ZipFile) then begin  if not DirExists(TargetFldr) then   if not ForceDirectories(TargetFldr) then begin  MsgBox('Can not create folder ' TargetFldr ' !!', mbError, MB_OK);  Exit;  end;    shellobj := CreateOleObject('Shell.Application');  SrcFldr := shellobj.NameSpace(ZipFile);  DestFldr := shellobj.NameSpace(TargetFldr);  shellfldritems := SrcFldr.Items;  DestFldr.CopyHere(  shellfldritems, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL); end;  procedure CurStepChanged(CurStep: TSetupStep); begin  if CurStep = ssPostInstall then   begin  unzip(ExpandConstant('{app}example.zip'),ExpandConstant('{app}'));  end; end;  

Результаты:

  • app.exe
  • unins.bat
  • unins.exe
  • example.zip (и я хочу, чтобы этот zip-файл был удален после извлечения)
  • project-folder (здесь я хочу, чтобы файлы находились в папках)

Чего я хочу:

  • app.exe
  • unins.bat
  • unins.exe
  • файлы… (файлы, которые находятся внутри project-folder )

Ответ №1:

Обратитесь непосредственно к вложенной папке:

 SrcFldr := shellobj.NameSpace(ZipFile   'project-folder');