Вы даже не можете извлечь один ZIP-файл.
Так что сначала пошагово, а потом ...
Код не полный.
Так что можно только догадываться, чего не хватает или что нет.
Для проверки правильности функционирования процедуры unzip
вы должны использовать простую стандартную программу inno-setup.
Если это работает, вы можете добавить дополнительные функции, а затем найти ошибку проще.
Также используемые константы "src" и "target" не видны.
Как они построены?
unzip(ExpandConstant(src), ExpandConstant(target));
Следует избегать использования различных типов данных.
AnsiString против PAnsiChar
procedure unzip(ZipFile, TargetFldr: PAnsiChar);
....
end;
procedure ExtractSomething(src, target : AnsiString);
begin
unzip(ExpandConstant(src), ExpandConstant(target));
end;
Я подозреваю, что использование {tmp} будет сделано при загрузке #include idp.iss
.
Этот код также не существует.
Мы смоделируем это и будем использовать известный zip-файл из известного каталога. Поэтому нам не нужна загрузка файлов.
Информация также не наносит вреда, но облегчает поиск неисправности.
Для этого я использовал MsgBox ().
Простая процедура для начала следующего.
- Скопируйте файл HLNJ.zip в C: \ HLNJ.zip
и найдите часть имени файла или папки в
HLNJ.zip
так что мы можем проверить извлечение.
- Я использую здесь файл с именем
atext.txt
, который является частью моего HLNJ.zip
CreateOleObject
нужны варианты, поэтому используйте их.
[Files]
; Simulate the download of HLNJ.zip is ok
; On the development PC .. on the client PC.
Source: "C:\HLNJ.zip"; DestDir: "{tmp}";
; Now "HLNJ.zip" is in the {tmp} folder so we can use it.
Source: "{tmp}\HLNJ.zip"; DestDir: "{userappdata}\ccc"; Flags: external deleteafterinstall
[Code]
const
SHCONTCH_NOPROGRESSBOX = 4;
SHCONTCH_RESPONDYESTOALL = 16;
....
procedure unzip(ZipFile, TargetFldr: variant);// <--- variant instead of PAnsiChar
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);
if FileExists(TargetFldr+'\atext.txt') then MsgBox('ZipFile '+ZipFile+
' extracted to '+TargetFldr, mbInformation, MB_OK);
end else MsgBox('ZipFile '+ZipFile+' does not exist', mbError, MB_OK);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
unzip(ExpandConstant('{userappdata}\ccc\HLNJ.zip'),ExpandConstant('{userappdata}\ccc\extracted'));
end;
end;