如何修改长时间运行的脚本,使其不会冻结 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 可以添加用户定义的命令行参数 当我使用 HELP命令中未列出用户定义的参数 如何将带有描述的命令添加到 HELP window Inno Setup 6 0 支持HelpTextNote message http
  • 使用InnoIDE写入AppData目录?

    我需要写信给 C Users 用户 AppData Roaming AppName 安装过程中的文件夹 我使用 InnoIDE 程序进行设置 非常棒 然而 它似乎缺少一个 AppData 特殊文件夹来轻松访问该目录 例如 您可以使用 Des
  • 准备卸载,就像 Inno Setup 中的准备安装页面一样

    我需要检查多个 exe 文件是否正在运行 通过安装程序安装 然后提示用户关闭它们 如果它们正在运行 如果没有则取消卸载过程 有没有办法在安装中为卸载程序提供类似 准备 页面之类的内容 或者我该如何实施这样的检查 甚至一个消息框也将是完美的
  • Inno Setup TInputQueryWizardPage (CreateInputQueryPage) 上如何减小两个输入框之间的行距

    我有一个TInputQueryWizardPage具有 8 个用户输入的页面 这增加了向导页面 https stackoverflow com q 11778292 但所有值仍然不可见 有没有办法减少两个值之间的行距 以便所有值都以当前向导
  • 根据用户输入更改 AppID 和 AppName

    我想在同一系统上多次安装同一应用程序 例如两个用户使用两个不同的 Web 服务 每个都有自己的 在我的设置脚本中我想更改AppID and AppName基于用户的输入 例如我的默认值AppName Service App 应该改为AppN
  • Inno Setup 仅卸载部分组件

    我有一个通用的应用程序 例如媒体播放器 用于安装在同一文件夹中的每个不同的零售产品 即 C 程序文件 myapp 并且不同的内容 例如电影 都安装在同一个文件夹中 C 程序文件 myapp 电影 对于每个单独的安装 单独的零售产品 我只是创
  • 如何使用 Inno Setup 检查互联网连接

    我正在学习 Inno Setup 来制作一个简单的安装程序 在安装过程中我需要从网站下载文件 因此检查是否有互联网连接很重要 在安装过程中如何检查或采取一些警报以连接互联网 Thanks 最好的检查是尝试实际下载该文件 互联网 几乎不是一个
  • 如何将带有值的命令行参数传递给 Inno Setup 编译器,以便我可以在代码中使用它们?

    我有两种可能的构建选项 由于我不希望我的客户使用某些参数启动安装程序 因此我最好将它们传递给编译器并在我的代码中完成所有工作 假设我有变量UNION它可能有两个值 0 and 1 我必须在代码中分析该变量的值 并根据结果包含或不包含某些文件
  • Inno Setup 卸载进度条更改事件

    有没有类似的事件 函数CurInstallProgressChanged对于进度条CurProgress and MaxProgressInno Setup 中卸载表单中的值 对此没有本机支持 您可以做的是设置一个计时器并观察时间的变化Un
  • 安装到 {sys} 的文件/DLL 未出现在 C:\Windows\system32 中

    我不知道为什么 但是当我尝试将文件从安装目录复制到system32 尽管在 Inno Setup 中显示安装成功 但它未能执行此操作 这是我的代码 Files specifies what files will be included in
  • 在 Inno Setup 中添加 4 个许可证页面

    我遵循了马丁的回答here https stackoverflow com questions 34592002 how to create two licensefile pages in inno setup在我的 Inno Setup
  • 在 Inno Setup 中获取 MAC 地址

    我尝试使用下面的代码来获取 Inno Setup 中的 mac 地址 但出现错误 内部错误 ExtractTemporaryFile 找不到文件 ISID dll 我已经复制了ISID dll在应用程序文件夹中仍然出现上述错误 如果我遗漏了
  • Inno Setup 提示用户输入文件夹并存储值

    我有以下需求 Run run robocopy exe source dest OLD source contents options Where source必须由目标计算机上的用户指定 这可以根据物理平台进行更改 目的地将与用户定义的源
  • 在 Inno Setup 中实现脚本常量时出现“预期标识符”或“原型无效”

    因此 鉴于此功能 我在GetRoot ROOTPage Values 0 线 我希望它告诉我ROOTPage没有定义 const DefaultRoot C IAmGRoot Var ROOTPage TInputQueryWizardPa
  • 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 文件中某些设置的文件位置 但是 我想对所选文件的输入进行一些基本检查 而不是简单地接受用户提供的任何内容 例如 如果用户在内容无
  • 安装后执行批处理文件,并在 Inno Setup 中“完成”页面之前的自定义页面上显示其输出

    A cmd使用此解决方案可以在 Inno Setup UI 中显示输出 Inno Setup 安装程序中的嵌入式 CMD 在自定义页面上显示命令输出 https stackoverflow com q 56910906 850848 我的问
  • Inno Setup - 如何在安装过程中读取 INF 文件

    我需要知道如何在安装过程中从 INF 文件 inf 读取值 我希望安装程序检查我要更新的程序的版本 该程序版本不存储在注册表或任何其他文件中 仅存储在 inf 文件中 然后必须从中获取版本 我得到了你的答案 Trama 我无法使用 DLL
  • Inc 函数 Inno Setup

    这可能非常简单 但是当我尝试编译包含以下内容的程序时 Inc Count 在 Inno Setup 中我不断得到 未知标识符 Inc 我相信这就是在 Pascal 中递增整数的方式 并且对如何继续这里感到困惑 我正在使用 Inno Setu

随机推荐