如何修改长时间运行的脚本,使其不会冻结 Inno Setup GUI?

2024-01-28

我有一个 Inno Setup 安装,它执行一些耗时的“AfterInstall”操作。当执行此操作时,安装 GUI 完全冻结(似乎它的主事件循环未处理)。这不是一个愉快的最终用户体验,所以也许这个操作可能不冻结 GUI?就像在单独的线程中执行它或定期调用类似的东西handleGuiEventLoop()?

对于“操作”,我从 .dll 调用我的函数,该函数发出许多 HTTP 请求并将响应作为文件写入应用程序安装文件夹。这不是 CPU 密集型操作,但可能需要几秒钟的时间。或者,如果互联网连接很弱/没有可用的互联网连接,则可能需要一两分钟。并且安装程序 GUI 一直处于冻结状态。


The 输出进度页面 http://www.jrsoftware.org/ishelp/topic_isxfunc_createoutputprogresspage.htm旨在提供有关长时间运行的操作的反馈。

但为了使其有效,您必须能够通过定期调用此页面上的方法来让 Inno 更新您当前的进度。

有一个图书馆可以让你将 Inno 脚本函数作为回调传递给 DLL http://www.sherlocksoftware.org/page.php?id=54,这可能有用。您可能还想考虑使用同一站点的 ITDownload 脚本,它允许您从 Inno 本身内部进行 HTTP 访问,从而避免中间人。

然而 Inno 本质上是单线程和 GUI 线程仿射的,因此直接调用阻塞操作将始终阻塞 UI,无需特殊规定。从单独的线程中运行代码是可能的(但只能在 DLL 中,并且您必须very小心);其他选项包括仅进行异步调用,或内部维护 GUI 更新的调用,例如Exec.

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

如何修改长时间运行的脚本,使其不会冻结 Inno Setup GUI? 的相关文章

  • 如何使用 Inno Setup 连接到 MS SQL Server?

    我想在安装过程中连接到 MS SQL Server 2008 有一个类似的问题 https stackoverflow com q 2171199 960757 它提供了一个解决方案 使用isql exe工具 与 SQL Server 20
  • 如何在 Inno Setup 中将 VCL 样式应用到基于 DLL 的表单?

    我正在将 Inno Setup Unicode 与我在 Delphi XE2 中编写的一组 DLL 一起使用 DLL 具有在安装向导 安装过程中显示的 VCL 形式 我已经尝试过实施 VCL 样式 https code google com
  • 在已安装应用程序的情况下运行 inno setup 时卸载

    我刚刚开始使用 inno setup 看起来效果很好 但是 当我运行已安装的应用程序的安装程序时 它会重新安装 我想给用户卸载 这可能吗 如果可以 该怎么做 具体来说 我为家庭作业编写了一个游戏 我使用 inno setup 制作了一个安装
  • 如何在 Inno Setup 中为控件卷出设置动画

    我想在我的安装程序中制作控件滚动的动画 你可以看这个视频 https drive google com file d 1H0HKTPXg9BdYD4HQWqCWHlGSTIHlcJa view 您可以使用计时器来为控件设置动画 Code f
  • Inno Setup 无法导入 DLL

    我没有运气将 Delphi DLL 导入 Inno Setup Unicode 该DLL有一个简单的过程 procedure Foo stdcall begin end exports Foo 该 DLL 包含在安装程序源中 并添加到文件列
  • 如何使用 Inno Setup 在安装过程中检查端口是否可用?

    我正在尝试创建一个安装文件 以便在安装过程中它将检查端口 例如 9000 并让用户知道端口状态 我是 Inno Setup 的新手 想知道这是否可行 以及如何检查这一点 谢谢 您可以使用我的功能来检查端口是否可用 see function
  • 从 Inno Setup 项目内部调用 MySQL

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

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

    如何在 Inno Setup 安装过程中设置 Windows 安全组 我似乎想不出正确的文本来谷歌来弄清楚 也许暗示要搜索什么就足够了 好的 我找到了一些东西 我可以使用 net localgroup Windows 命令 http tec
  • Inno Setup:仅在不是 VERYSILENT 的情况下安装

    仅当安装程序未以非常安静的方式运行时 我才想安装并注册某个文件 我不知道我怎样才能做到这一点 我当前的线路是 Source M sqlite36 engine dll DestDir sys Flags uninsneveruninstal
  • 在 Inno Setup 中单击“下一步”按钮时验证自定义页面上的数据

    我已经设法获得一个基本脚本来显示向导 使用CreateInputFilePage 供用户识别我用来更新 XML 文件中某些设置的文件位置 但是 我想对所选文件的输入进行一些基本检查 而不是简单地接受用户提供的任何内容 例如 如果用户在内容无
  • 欢迎页面未显示,SelectDir 页面首先显示

    我正在尝试使用 Inno Setup 来制作安装程序 我想先显示欢迎页面 然后显示 SelectDir This is CurPageChanged示例代码 procedure CurPageChanged CurPageID intege
  • 使用 Inno Setup 更快地创建安装程序

    当我在大量文件 gt 2GB 上运行 Inno Setup 时 需要很长时间才能运行 我相信它把时间花在了压缩上 这应该是 CPU 限制的 但它只使用了几个 CPU 有没有办法将其分散到 许多 更多核心 具体来说 我正在处理这个提升发布存储
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 在 Inno Setup 中编译安装程序时跳过不存在的源文件

    In the Files 部分 我必须通过尝试编译一个不存在的文件来实现这一点 编译器不会失败并遵循其过程 例如在这段代码中 Files Source D pais modulo IMG image png DestDir userdocs
  • 在 Inno Setup 中使用 {AppVersion} 作为函数的参数

    所以我有一个正在更新一些 XML 的函数 我想传递 AppVersion 已设置在 Setup 脚本的一部分作为该函数的常量 我努力了 MyFunction ExpandConstants AppVersion 但这给了我一个错误 如何正确
  • Inno Setup:使用缩进保存 XML 文档

    我正在尝试在 Inno Setup 中向 XML 文件添加一个新节点 节点添加正确 但下一个标记之前的换行符被删除或未添加换行符 这是我的添加节点代码 NewNode XMLDoc createElement Test XMLDoc set
  • Inno Setup:有条件地删除用户主文件夹中的非空目录

    我正在通过 Inno Setup 为我的 Windows 应用程序创建安装程序 应用程序本身将一些配置数据写入用户主文件夹及其自己的子目录中 现在 在卸载过程中 我希望允许用户选择一个选项来删除该文件夹 该文件夹最初不是由 Inno Set
  • 如何在 Inno Setup 中静默安装 Microsoft VC++ 可再发行组件?

    如何在 Inno Setup 中静默安装 Microsoft VC 可再发行组件 我使用了以下代码 除了安装进度窗口之外 大部分安装部分都是静默的 这是我的 Run 部分代码 Run Filename app bin vcredist x8
  • 使用 InnoSetup 创建 NLog 日志文件文件夹

    我遇到一个问题 我需要我的用户能够在没有管理员权限的情况下运行我的应用程序 但同时 我需要 NLog 能够创建它的日志文件 它需要管理员权限才能在应用程序安装在同一文件夹中 我正在尝试在应用程序目录下创建一个目录 名为Logs 并给ever

随机推荐