有没有办法在完成某个页面后在 Inno Setup 中提取 .zip 文件?

2024-04-23

所以我基本上有一个 .zip 文件{tmp}目录,并希望将其内容提取到{tmp}但只有当我的第三种形式完成它的工作时,而不是更早。原因是:因为在第三种形式中我从互联网上下载了这个.zip并将其保存到{tmp}。现在,在此之后我想将这些文件提取到{tmp}我将从提取的文件夹中获取文件,例如发行说明、许可协议文件,以在安装程序的其余表单中使用。意思是,在第三个之后的表格中,我正在使用提取的文件。

我无法在任何地方找到如何在某种形式之后执行此操作。我只在运行部分找到了如何完成提取。


EDIT:事实证明,我描述的旧方法在某些 Windows 版本上效果不佳。它可能会弹出一个对话框窗口,而不是默默地覆盖文件。这个很容易谷歌一下:CopyHere 忽略选项 https://www.google.com/search?q=CopyHere%20ignores%20options.

新方式:

  • Mitchich Inno 下载插件 https://bitbucket.org/mitrich_k/inno-download-plugin
  • 7zip http://www.7-zip.org/download.html

新的方式使用7zip 独立控制台版本 http://www.7-zip.org/download.html。这是一个单一的7za.exe,您不需要 DLL。

#include <idp.iss>

; Languages section
; Includes for Mitrich plugin's additional languages
; #include <idplang\Russian.iss>

[Files]
Source: "7za.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall;

[Run]
Filename: {tmp}\7za.exe; Parameters: "x ""{tmp}\example.zip"" -o""{app}\"" * -r -aoa"; Flags: runhidden runascurrentuser;

[Code]
procedure InitializeWizard;
begin
  idpAddFile('https://example.comt/example.zip', ExpandConstant('{tmp}\example.zip'));
  { Download after "Ready" wizard page }
  idpDownloadAfter(wpReady);
end;

如果您想下载,在安装开始之前解压缩并使用文件(例如,作为许可协议),我只能给出一般指导:

  1. 启用欢迎页面[Setup]: DisableWelcomePage=no.
  2. Use idpDownloadAfter(wpWelcome);。现在它会在“欢迎”页面之后立即下载。
  3. 您需要一个空的许可证文件[Setup]: LicenseFile=license.txt显示许可证页面。或者可能不为空,但带有“正在加载许可协议...”文本。
  4. 你实施procedure CurPageChanged(): 如果当前页面是wpLicense然后你打电话Exec()函数来启动 7zip 并等待它终止。没有7zip[Run]现在部分。那么你可能会使用LoadStringFromFile()函数从提取的文件中获取许可协议。然后将其放入UI中。大概WizardForm.LicenseMemo.RTFText = ...应该管用。无论如何,用户界面是可访问的,如果您在设置文本时遇到困难,请就此提出单独的问题。

The 老马车方式:

  • Mitchich Inno 下载插件 https://bitbucket.org/mitrich_k/inno-download-plugin
  • Inno解压插件 http://www.scriptkitties.com/innounzip/

一种等效的、更干净的方式,无需unzipper.dll is 此处描述 https://stackoverflow.com/questions/6065364/how-to-get-inno-setup-to-unzip-a-file-it-installed-all-as-part-of-the-one-inst/40706549#40706549。无论如何,它使用了 buggyCopyHere https://www.google.com/search?q=CopyHere%20ignores%20optionsWindows 功能。

#include <idp.iss>

; Languages section
; Includes for Mitrich plugin's additional languages
; #include <idplang\Russian.iss>

[Files]
Source: "unzipper.dll"; Flags: dontcopy

[Code]
procedure InitializeWizard;
begin
  idpAddFile('https://example.comt/example.zip', ExpandConstant('{tmp}\example.zip'));
  { Download after "Ready" wizard page }
  idpDownloadAfter(wpReady);
end;

procedure unzip(src, target: AnsiString);
external 'unzip@files:unzipper.dll stdcall delayload';

procedure ExtractMe(src, target : AnsiString);
begin
  unzip(ExpandConstant(src), ExpandConstant(target));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then 
  begin
    { Extract when "Finishing installation" setup step is being performed. }
    { Extraction crashes if the output dir does not exist. }
    { If so, create it first: }
    { CreateDir(ExpandConstant(...)); }
    ExtractMe('{tmp}\example.zip', '{app}\');
  end;
end;

你也许可以尝试其他事情而不是wpReady and ssPostInstall。对于我的小拉链来说,这个效果很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在完成某个页面后在 Inno Setup 中提取 .zip 文件? 的相关文章

  • 为什么我们不能在 inno-setup [代码] 中声明局部 const 变量?

    你知道为什么在声明时局部常量变量 脚本无法编译 抱歉 我对 pascal 知之甚少 无法弄清楚为什么这不起作用 这个例子 见函数圆面积 表明我的语法应该没问题 http www tutorialspoint com pascal pasca
  • 注册表部分的脚本功能

    我们的软件支持一系列 70 文件关联 用户可以选择与我们的应用程序关联 直接在Registry安装程序部分并使用标志来控制卸载期间的行为以及Check标志来控制是否应将其写入注册表 用户可以通过自定义页面控制要设置的关联CheckListB
  • Inno Setup:如果程序文件夹中存在文件,则关闭安装程序向导

    我正在尝试创建一个演示安装程序 如果它检测到该文件close txt在程序文件夹中 然后它会关闭向导或中止安装 我正在运行一个计划任务 该任务会在两天后自动卸载该应用程序 初次安装时close txt文件安装在程序文件夹中 然后自动卸载后c
  • 如何使用 Inno Setup 更改可执行文件权限?

    我通过 InnoIDE 中的向导创建了一个非常简单的 inno 脚本 但是 普通用户可以运行部署的可执行文件 如何强制用户必须通过脚本以管理员身份运行它 Setup AppId 03E6645E 2C53 4E90 967B D0833A8
  • 在inno setup中如何设置unins000.exe的产品名称、产品版本和版权属性[重复]

    这个问题在这里已经有答案了 我已经使用 inno setup 创建了一个安装程序 一切正常 但安装后将生成 unins000 exe 该 exe 没有设置产品名称 产品版本和版权属性 任何人都可以解释一下如何构建安装程序 以便 unins0
  • Inno Setup 自定义页面

    我想在选择安装位置的页面之后创建一个自定义向导页面 我已经了解了如何创建自定义页面并将其添加到向导中InitializeWizard程序 我的问题是 当我创建自定义页面时 安装位置选择的默认页面不再出现 我必须使用哪些选项来保留默认页面 安
  • Inno Setup:选择组件的功能

    我有一个小问题 我需要当您选择一个或两个组件时显示一个页面 但其他的并不是只用单一的组件似乎就有效果 我留下了我正在工作的代码 Setup AppName My Program AppVerName My Program v 1 2 Def
  • Inno Setup 查找子文件夹

    是否有办法获取目录中的所有 或仅第一个 子文件夹 我正在尝试将文件安装到具有动态名称的子目录中 它不是 Inno Setup 可用的常量之一 有办法找到这个子目录名吗 那么 要获取某个文件夹中第一个找到的子文件夹的名称 无论它是哪个 您可以
  • 我的安装程序如何有选择地删除一些最初并非创建的文件?

    我将所有程序的设置存储在 appdata 目录 appdata MyProgram 中 当出现问题而用户必须重新安装时 我想询问是否删除该目录中的数据 我正在使用 Inno Setup 并添加了一个自定义页面来提示用户 if DirExis
  • 将用户定义的命令行参数添加到/?窗户

    使用 Inno Setup 可以添加用户定义的命令行参数 当我使用 HELP命令中未列出用户定义的参数 如何将带有描述的命令添加到 HELP window Inno Setup 6 0 支持HelpTextNote message http
  • 使用InnoIDE写入AppData目录?

    我需要写信给 C Users 用户 AppData Roaming AppName 安装过程中的文件夹 我使用 InnoIDE 程序进行设置 非常棒 然而 它似乎缺少一个 AppData 特殊文件夹来轻松访问该目录 例如 您可以使用 Des
  • “ProgramData”目录的 Inno 设置常量

    我希望我的安装程序将一些文件复制到 Windows 中ProgramData目录中 我看到大多数 Windows 目录都有已在 Inno Setup 文档中定义的预定义常量 但是我看不到一个ProgramData 因此我计划使用类似的东西
  • Inno Setup 仅卸载部分组件

    我有一个通用的应用程序 例如媒体播放器 用于安装在同一文件夹中的每个不同的零售产品 即 C 程序文件 myapp 并且不同的内容 例如电影 都安装在同一个文件夹中 C 程序文件 myapp 电影 对于每个单独的安装 单独的零售产品 我只是创
  • 尝试在 Inno Setup 代码中检测锁定文件时出现“未知标识符‘FileOpen’”

    我正在尝试使用FileOpen在 Inno Setup 代码中 但是 Inno Setup 编译器不断向我抛出以下错误 未知标识符 文件打开 这是示例代码 function IsFileLocked pathFile string Bool
  • 将 AppMutex 与静默 Inno Setup 一起使用

    我在 Inno Setup 脚本中使用 AppMutex 来确保产品在安装更新时不再运行 这基本上工作得很好 但是 当使用 verysilent 命令参数运行此设置时 会显示一个对话框 尽管非常安静 表明程序仍在运行 应该关闭 由于程序本身
  • Inno Setup 无法导入 DLL

    我没有运气将 Delphi DLL 导入 Inno Setup Unicode 该DLL有一个简单的过程 procedure Foo stdcall begin end exports Foo 该 DLL 包含在安装程序源中 并添加到文件列
  • Inno Setup:如何在选中的复选框上显示(隐藏/取消隐藏)密码

    我在输入查询页面中添加了一个复选框 以便在选中时使用它向我显示未发现的密码 但我不知道该怎么做 我已经创建了以下过程 但这个过程并没有改变我添加输入时的 true false 值 此过程添加了我完成这项工作的新文本框 请你帮助我好吗 pro
  • 从 Inno Setup 项目内部调用 MySQL

    我正在为一些使用 MySQL 的软件编写安装程序 我正在尝试运行 sql用于在安装时设置数据库的脚本 唉 我目前在执行它时遇到了很大的问题 这个问题似乎是由于这样一个事实而产生的 当你设置一条通往 sql文件内的 execute SOURC
  • Inno-Setup:在消息框中使用自己的按钮文本

    良好的 GUI 设计中的常见做法是不使用是 否消息框 而是为按钮提供真实名称 例如保存或丢弃 我们如何在显示的消息框中实现这一点MsgBox在 InnoSetup 中 至少对于我们在代码部分中显示的那些 The MsgBox http ww
  • Inno Setup:仅在不是 VERYSILENT 的情况下安装

    仅当安装程序未以非常安静的方式运行时 我才想安装并注册某个文件 我不知道我怎样才能做到这一点 我当前的线路是 Source M sqlite36 engine dll DestDir sys Flags uninsneveruninstal

随机推荐