Inno Setup ExtractTemporaryFile 导致向导冻结

2023-12-03

我制作了自定义页面来根据用户的选择来管理特定的 redist 工具安装。

如果用户想要或不安装这些工具,这些工具会链接到用户选中的复选框。 然后出现一个页面,向用户显示每个工具的安装进度。

我在这里遇到的问题是进度页面仅在第一次时显示ExtractTemporaryFile工具的设置已完成,显示最后一页就好像它已冻结一样。

我必须让进度页面在之前显示的唯一方法ExtractTemporaryFile发生的情况是放一个MsgBox在任何安装功能之前。 但即使在这种情况下,当ExtractTemporaryFile启动后,进度条动画被冻结,直到ExtractTemporaryFile已经完成了...

这是执行此操作的代码部分:

procedure CurPageChanged(CurPageID: Integer);
begin
  If CurPageID=PageInstallationPersonnalisee.ID then
    begin
      ProgressBarLabelPageInstPerso.Caption := 'Initialisation...';
      if InstallTool1 = True then
        begin
          ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool1...';
          F_InstallTool1();
        end;
      if InstallTool2 = True then
        begin
          ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool2...';
          F_InstallTool2();
        end;
      if InstallTool3 = True then
        begin
          ProgressBarLabelPageInstPerso.Caption := 'Installing InstallTool3...';
          F_InstallTool3();
        end;

      ProgressBarPageInstPerso.Style := npbstMarquee;
      //ProgressBarPageInstPerso.Style := npbstNormal;
      ProgressBarPageInstPerso.Position := 100;

      CancelWithoutPrompt:=True;
      WizardForm.Close;
    end;
end;

注意ExtractTemporaryFile()是在每个F_InstallTooln()功能。

设置和文件部分的其他部分可以帮助:

[Setup]
SolidCompression=no

[Files]
;Temporary redists
Source: "{#MyRessourcesPath}InstallTool1_Setup.exe"; DestDir: "{tmp}"; \
  Flags: deleteafterinstall noencryption dontcopy
Source: "{#MyRessourcesPath}InstallTool2_Setup.exe"; DestDir: "{tmp}"; \
  Flags: deleteafterinstall noencryption dontcopy
Source: "{#MyRessourcesPath}InstallTool3_Setup.exe"; DestDir: "{tmp}"; \
  Flags: deleteafterinstall noencryption dontcopy

在这里,页面PageInstallationPersonnalisee直到第一次才显示ExtractTemporaryFile已经完成了...

我知道ExtractTemporaryFile可能会导致一些延迟安装过程,但是为什么它会导致向导冻结呢?

所以我的问题是:在我的场景中,有没有办法强制向导刷新,以便他在任何操作之前出现ExtractTemporaryFile程序启动了吗?


The ExtractTemporaryFile确实挂了精灵形态。正如大多数代码所做的那样。

唯一允许强制 Windows 消息队列进行泵送的自定义页面是TOutputProgressWizardPage(由创建CreateOutputProgressPage).

你可以这样做:

function NextButtonClick(CurPageID: Integer): Boolean;
var
  ProgressPage: TOutputProgressWizardPage;
begin
  if CurPageID = wpReady then
  begin
    ProgressPage := CreateOutputProgressPage('Preparing installations', '');
    ProgressPage.Show;
    try
      ProgressPage.Msg1Label.Caption := 'Installing 1 ...';
      ProgressPage.SetProgress(0, 100);
      ExtractTemporaryFile('1.exe');
      Exec(...);

      ProgressPage.Msg1Label.Caption := 'Installing 2 ...';
      ProgressPage.SetProgress(33, 100);
      ExtractTemporaryFile('2.exe');
      Exec(...);

      ProgressPage.Msg1Label.Caption := 'Installing 3 ...';
      ProgressPage.SetProgress(66, 100);
      ExtractTemporaryFile('3.exe');
      Exec(...);

      ProgressPage.SetProgress(100, 100);
      ProgressPage.Hide;
    finally
    end;
  end;
  Result := True;
end;

尽管它在具有带有动画的精美进度条的现代 Windows 版本上也不能很好地工作,但如果您无法调用SetProgress频繁地。请注意,SetProgresscall 是在幕后泵送消息队列的。因此,即使它的参数没有改变,调用它也是有意义的。但你不能,因为ExtractTemporaryFile blocks.


或者,您可以将部署留给[Files]部分并让安装程序从AfterInstall event.

[Files]
;Temporary redists
Source: "{#MyRessourcesPath}InstallTool1_Setup.exe"; DestDir: "{tmp}"; \
  Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install1
Source: "{#MyRessourcesPath}InstallTool2_Setup.exe"; DestDir: "{tmp}"; \
  Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install2
Source: "{#MyRessourcesPath}InstallTool3_Setup.exe"; DestDir: "{tmp}"; \
  Flags: deleteafterinstall noencryption dontcopy; AfterInstall: Install3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Inno Setup ExtractTemporaryFile 导致向导冻结 的相关文章

  • 如何在包更新之间保留数据文件?

    我正在使用data files的论证setuptools setup 将配置文件安装到 etc和用户主目录 但是更新包pip install
  • Google Cloud SDK 安装程序无法在 Windows 7 上完成组件安装

    在安装过程中我收到一条消息 不幸的是 组件安装没有成功完成 请检查详细日志以获取错误消息 我尝试安装到所有用户 单个用户 许多目的地和名称 Details 输出文件夹 C Program Files x86 Google Cloud SDK
  • 创建 MSI 的最佳工具[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我是设置项目创建的新手 现在我正在使用 Visual Studio 2008 为我的项目创建安装文件 msi 我对在安装向导中创建自己的自
  • 由于符号链接错误,无法在 Mac OSX 10.8.1 中安装 ruby​​-1.9.2

    首先 我尝试了常见的rvm安装 rvm安装1 9 2 但是 显示了以下错误 The provided compiler usr bin gcc is LLVM based it is not yet fully supported by r
  • Windows7上python3.5无法安装BeautifulSoup4

    我已经从下载了 beautifulsoup4 4 5 3 tar gzhttps www crummy com software BeautifulSoup bs4 download 4 5 https www crummy com sof
  • 安装python启动文件

    我如何安装pythonstartup文件 以便它在命令上运行 例如python myfile py 我尝试将其安装到我的 home myuserUbuntu的目录 但它说我没有足够的权限 此外 不同的地方交替说它应该全部大写或全部小写 前面
  • 为什么.NET Framework 4.0安装程序的大小小于3.0/3.5?

    我看到 Net Framework 4 0的beta2安装程序只有55MB 而 Net 3 5的安装程序有200 MB 这是怎么回事 NET 3 5 之所以这么大 是因为它在同一个包中包含 x64 版本的框架 2 0 3 0 软件包针对 x
  • Mac OS X - 使钥匙串证书可供 Atlassian Bamboo 使用

    我有一个构建包的 Bamboo 计划 我想用我的开发者证书签署该包 在我的构建脚本中 我有这个 productsign sign Name of my certificate input pkg output pkg 从命令行运行此脚本可以
  • Netbeans 未安装在 MacOS Big Sur 上

    我已在 MacBook Air 上安装了 Big Sur Java 已安装 但 Netbeans 安装显示未找到 Java JDK 有人有这个问题的解决方案吗 我通过安装 JDK15 和 Apache Netbeans 12 2 仅限 12
  • 用于检查和安装先决条件的安装项目与引导程序项目

    这是我的情况 我创建了一个普通的 WiX 安装项目 然后我尝试检查一些先决条件 例如是否安装了 NET 框架 我似乎无法从 WiX 安装项目中执行此操作 所以我创造 WiX Bootstrapper 项目 我能够检查并安装它们 先决条件 我
  • MAMP Pro 3“安装失败。”

    我刚刚购买了 MAMP Pro 3 的升级版 下载了文件 MAMP MAMP PRO 3 0 5 pkg 并继续安装 不幸的是 经过三次尝试 我无法完成安装 文件被写入 最后我收到一条错误消息 安装失败 安装程序遇到错误 导致安装失败 请联
  • 当 Inno Setup 中的注册表值仅使用默认名称时,如何获取该值?

    我正在尝试使用 Inno Setup 的 Pascal 脚本从 Windows 注册表 本例中为 Google Sketchup 获取应用程序的安装目录 以便我可以在那里安装插件 该注册表项没有名称 在 Regedit 中只有 默认 我试过
  • 仅运行一组嵌入式安装程序的 Inno Setup 安装程序

    我正在 Inno Setup 中创建一个安装程序 该安装程序将仅运行一组嵌入式安装程序 它本身不安装任何文件 编译安装程序时 我收到此错误 您必须输入带驱动器号的完整路径 例如 C APP 或 UNC 路径 例如 server share
  • 如何使用 Inno Setup 脚本创建 IIS 应用程序和应用程序池

    我正在尝试使用 Inno Setup 部署 ASP NET 应用程序 我需要执行以下任务 创建 IIS 应用程序 创建一个新的 IIS 应用程序池并将其 NET 版本设置为 4 将新应用程序的应用程序池设置为新的应用程序池 我找到了一个创建
  • 运行“bundle install”失败并要求我运行“bundle install”

    事实上 当从我从 git 存储库克隆的现有 Rails 应用程序内部运行时 所有与 gem 相关的命令都会导致相同的错误消息 bundle install Could not find tzinfo 0 3 27 in any of the
  • python setup.py install 更改脚本解释器

    我有一个 Python 包 其中包含一些脚本scripts 文件夹 我的setup py文件包括 usr bin env python from distutils core import setup scripts script1 scr
  • 如何使用Python distutils?

    我用 python 编写了一个快速程序 将 gtk GUI 添加到 cli 程序中 我想知道如何使用 distutils 创建安装程序 因为它只是命令行应用程序的 GUI 前端 所以它只能在 nix 中工作 所以我不担心它是跨平台的 我的主
  • 一键安装 Safari 扩展

    当用户下载插件 Firefox 例如 时 下载完成后插件安装就会开始 在 Safari 中是否有可能实现同样的目标 即用户单击链接下载插件 下载后会自动开始安装 我认为这不可能在任何其他域上执行 除了extensions apple com
  • 检测 Inno Setup 中按钮/控件何时聚焦

    当控件 按钮 聚焦时 我需要触发一个事件 例如更新标签 Inno Setup 中有什么技巧可以做到这一点吗 由于缺乏OnEnterInno Setup API 中的事件 有第 3 方 Inno Setup 克隆确实具有此功能 但我不建议使用
  • 无法下载应用程序 - 此时无法下载“APP”

    我的应用程序有 PLUS 版本和常规版本 我使用不同的目标对它们进行存档 我将 ipa 上传到 TestFlight 也上传到我的曲棍球服务器 PLUS 版本总是下载得很好 但普通版本总是给我 无法下载应用程序 错误 我根本没有更改两个版本

随机推荐

  • Azure 移动服务 Web Api 上的 SignalR CORS

    我有一个运行 Web Api 和 c 的 Azure 移动服务 并按照中的建议启用了 CORS在 Azure 移动服务 NET 后端启用 CORS然而我现在开始将 SignalR 添加到其中 SignalR 工作正常 但我无法找到如何启用
  • 触发器中的 pragmaautonomous_transaction

    我在一个表上编写了一个触发器 该触发器根据条件从其他表中删除数据 触发器具有 pragmaautonomous transaction 并且触发器按预期工作 但是 我确实想知道将来是否会出现任何问题 比如说数据是否由多个用户 源同时插入等等
  • 防止 D3 中的文本剪切(Javascript 图表)

    我正在 D3 中绘制饼图 但文 本剪辑本身遇到问题 这是我的绘图函数 pie function config var width config width 840 height config height 520 radius Math m
  • jQuery mobile:URL 查询字符串不改变

    我正在使用 jQuery Mobile 并遇到了一些 对我来说 奇怪的行为 我有一堆链接 每个链接都指向同一个 jQM 页面 otherpage 但 URL 查询字符串具有不同的值 例如 otherpage q foo otherpage
  • 如何检测 RichTextBox 中的多行粘贴

    目前我正在开发一个简单的语法荧光笔 但有几个问题 你能帮我一下吗 我有一个类库 其中有一个组件类 一切都在 VB NET 中 这只是一个文件 所以你可以在这里看到它https gist github com 2366507 第 92 行有
  • php hook 核心函数

    我想在执行 或替换标准核心函数之前挂钩 例如我要阻止这两者include and require访问任何脚本 有什么方法可以在没有任何额外的 dll 的情况下实现它吗 或者另一个案例is array myarr 我会勾住array myar
  • Swing 重叠组件

    我在框架中有两个 AWT 组件 面板 A 和面板 B 我希望面板 A 的大小适合框架的高度宽度 并在调整框架大小时保持该大小 但我希望面板 B 与 A 重叠 B 将处于固定位置 0 0 以使其更容易 具有固定的高度和宽度 我不确定需要什么样
  • 实例化一个派生自 MonoBehaviour 的类[重复]

    这个问题在这里已经有答案了 有没有办法实例化从 MonoBehaviour 派生的类 例如下面的示例 而不会收到警告 您正在尝试使用 new 关键字创建 MonoBehaviour 这是不允许的 MonoBehaviours 只能使用 Ad
  • 如何删除/切换元素上的悬停类(单击时翻译)而无需再次移动鼠标?

    如果您单击但不移动鼠标 您将看到按钮的颜色保持为红色 我想要完成的是在您单击并且不移动鼠标后它仍然会删除 切换 hover class jsFiddle 上的示例 function var Btn button Btn hover func
  • CosmosDB + 分组依据

    我需要使用 GROUP BY 条款Azure 数据资源管理器但我认为是不支持的 有人有解决或避免分组的想法吗 此致 最后 Azure Cosmos DB 目前支持GROUP BY在 NET SDK 3 3 或更高版本中 目前尚不支持其他语言
  • Twilio webhook 短信响应格式

    我在我的应用程序中使用 Twilio 并且我有 SMS Webhooks 其中我的 SMS 号码配置了 URL 一切正常 除了 Twilio 在每个请求的日志中向我发送错误 我认为我的应用程序的响应格式不正确 但我在文档中找不到如何使用 J
  • 扩展函数原型

    我希望能够扩展javascript中的函数原型 也就是说 向所有函数添加一个函数 目的是将其转换为一种格式 以便在另一种语言 即 ruby 它只能通过字符串进行通信 在这种特定设置中 之间进行交换 我已经有了一个系统 因此我可以通过定义一个
  • 在 iPhone SDK 中获取我所在位置的海拔高度(距海平面的高度)

    我正在尝试在我的应用程序中获取我所在位置的海拔高度 但每次我尝试altitude的财产CLLocation我得到的对象0 00结果 我用谷歌搜索我的查询 得到了类似的问题here and here 该链接表示 如果我通过 wifi 或手机信
  • 如何使用 JavaScript 打开带有打印对话框的文件

    我想使用 JavaScript 打开一个 Word 文档 并为该打开的文档窗口打开打印对话框 这是我的代码 window open http www tizaq com window print 它可以工作 但是打印对话框是为当前窗口打开的
  • 有什么方法可以使用 4 个点而不是 3 个点来绘制图像(透视扭曲)

    Graphics DrawImage 很好地支持绘制平行四边形 Bitmap destImage new Bitmap srcImage Width srcImage Height using Graphics gr new Graphic
  • Google App Engine app.yaml PHP 脚本参数

    在我的 GAE PHP app yaml 中 我尝试这样做 application myapp version 1 runtime php api version 1 threadsafe yes handlers url sitemap
  • 如何在 tkinter 中使无声异常变得更响亮?

    如果我从终端运行以下代码 我会在终端中收到一条有用的错误消息 import Tkinter as tk master tk Tk def callback raise UserWarning Exception b tk Button ma
  • bind_param() 仅对用户输入的值有用还是全部?

    我一直在阅读 SQL 注入 但找不到这个问题的答案 我明白如果我有这样的查询 prepare SELECT id foo bar FROM table WHERE username 那我应该使用bind param s username 以
  • 在哪里保存 Firefox 插件的文件?

    我正在开发一个 Firefox 插件 它可以生成网站的缩略图以供插件使用 到目前为止 我一直使用简单存储通过图像数据 URL 来存储它们 这样做有两个问题 存储空间有限 并且发送很长的字符串似乎不是最佳选择 我假设浏览器已经优化了加载图像文
  • Inno Setup ExtractTemporaryFile 导致向导冻结

    我制作了自定义页面来根据用户的选择来管理特定的 redist 工具安装 如果用户想要或不安装这些工具 这些工具会链接到用户选中的复选框 然后出现一个页面 向用户显示每个工具的安装进度 我在这里遇到的问题是进度页面仅在第一次时显示Extrac