如何使用 Inno Setup 提取 ZIP 文件中文件夹中的文件?
How to extracts files that are in folder within a ZIP file with 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-A\app\folder-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
内的文件)
直接引用子文件夹:
SrcFldr := shellobj.NameSpace(ZipFile + '\project-folder');
嗯,我有一个 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-A\app\folder-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
内的文件)
直接引用子文件夹:
SrcFldr := shellobj.NameSpace(ZipFile + '\project-folder');