Inno setup 完成某个页面后,是否有办法在Inno安装程序中提取.zip文件?
所以我基本上在我的Inno setup 完成某个页面后,是否有办法在Inno安装程序中提取.zip文件?,inno-setup,Inno Setup,所以我基本上在我的{tmp}目录中有一个.zip文件,我想在{tmp}中提取它的内容,但只有当我的第三个表单完成它的工作时,而不是更早。原因是:因为在第三种形式中,我从internet下载了这个.zip,并将其保存到{tmp}中。现在,在此之后,我想将这些文件解压缩到{tmp}中,从中我将从解压缩的文件夹中获取文件,如发行说明、许可协议文件,以便在安装程序的其余表单中使用。意思是,已经在第三个表单之后,我正在使用提取的文件 我在任何地方都找不到在某种形式之后如何做到这一点。我只在运行部分找到了提
{tmp}
目录中有一个.zip文件,我想在{tmp}
中提取它的内容,但只有当我的第三个表单完成它的工作时,而不是更早。原因是:因为在第三种形式中,我从internet下载了这个.zip,并将其保存到{tmp}
中。现在,在此之后,我想将这些文件解压缩到{tmp}
中,从中我将从解压缩的文件夹中获取文件,如发行说明、许可协议文件,以便在安装程序的其余表单中使用。意思是,已经在第三个表单之后,我正在使用提取的文件
我在任何地方都找不到在某种形式之后如何做到这一点。我只在运行部分找到了提取是如何完成的。编辑:我描述的旧方法在某些Windows版本上无法正常工作。它可能会弹出一个对话框窗口,而不是默默地覆盖文件。谷歌很容易做到这一点: 新方式:
7za.exe
,您不需要DLL
#包括
; 语文组
; 包括Mitrich插件的其他语言
; #包括
[档案]
资料来源:“7za.exe”;DestDir:“{tmp}”;标志:deleteafterinstall;
[运行]
文件名:{tmp}\7za.exe;参数:“x”“{tmp}\example.zip”“-o”“{app}\”“*-r-aoa”;标志:runhidden runascurrentuser;
[守则]
程序初始化;
开始
idpAddFile('https://example.comt/example.zip,ExpandConstant({tmp}\example.zip');
{在“就绪”向导页面后下载}
idpDownloadAfter(wpReady);
结束;
如果您想在安装开始之前下载、解压缩和使用文件(例如,作为许可协议),我只能给出一般性的指导原则:
[设置]
中启用欢迎页面:禁用欢迎页面=否
idpDownloadAfter(wpWelcome)代码>。现在它在“欢迎”页面后立即下载
[Setup]
中有一个空的许可证文件:LicenseFile=license.txt
才能显示许可证页面。或者可能不是空的,但带有“加载许可协议…”文本过程CurPageChanged()
:如果当前页面是wplicence
,则调用Exec()
函数启动7zip并等待其终止。现在,[Run]
部分没有7zip。然后您可能会使用LoadStringFromFile()
函数从提取的文件中获取许可协议。然后把它放到UI中。可能WizardForm.licensemo.RTFText=…
会起作用。无论如何,用户界面是可访问的,如果您在设置文本时遇到问题,请就此单独提问unzipper.dll
的等效、更干净的方法是。不管怎样,它使用了有缺陷的Windows功能
#包括
; 语文组
; 包括Mitrich插件的其他语言
; #包括
[档案]
来源:“unzippers.dll”;标志:dontcopy
[守则]
程序初始化;
开始
idpAddFile('https://example.comt/example.zip,ExpandConstant({tmp}\example.zip');
{在“就绪”向导页面后下载}
idpDownloadAfter(wpReady);
结束;
程序解压缩(src,目标:AnsiString);
外部的unzip@files:unzipper.dll stdcall delayload';
程序提取器(src,目标:AnsiString);
开始
解压(ExpandConstant(src),ExpandConstant(target));
结束;
过程CurStepChanged(CurStep:TSetupStep);
开始
如果CurStep=ssPostInstall,则
开始
{在执行“完成安装”设置步骤时提取。}
{如果输出目录不存在,则提取崩溃。}
{如果是,请先创建:}
{CreateDir(ExpandConstant(…);}
ExtractMe({tmp}\example.zip',{app}\');
结束;
结束;
您可能可以尝试其他方法,而不是
wpredy
和ssPostInstall
。对于我的小拉链,这个效果很好。请展示一下您的小拉链。编辑您的帖子并添加Inno安装脚本的相关部分,让我们知道您使用的插件。我必须在周一这样做,因为在那之前我没有那台电脑。我没有任何用于提取的插件,只是通过互联网下载。请注意,使用unzipper.dll
是一种过度使用。您可以使用本机Pascal脚本代码实现相同的功能。看。@MartinPrikryl很好,谢谢。如果效果好,我会检查并编辑我的答案。@MartinPrikryl我发现CopyHere
可能会忽略某些Windows版本上的选项。我更新了我的答案,现在我只使用7zip。这些标志适用于Windows Vista和更新版本。我已将此添加到我的答案中。请确保在7za.exe
参数中的{tmp}
和{app}
周围添加双引号。