【问题标题】:Inno Setup: Controls disappear (installer freezes) while installation is rolling backInno Setup:安装回滚时控件消失(安装程序冻结)
【发布时间】:2016-05-16 09:17:29
【问题描述】:

当我确认程序的安装取消时,Inno Setup 会终止或隐藏一些常用和自定义控件(标签、单选按钮等)。是否可以在 WizardForm 存在期间保持它们可见?

我使用 VCL Inno Styler 自定义窗口和控件样式:

这是日志文件的内容:

 2016-05-16 13:50:01.225   Message box (Yes/No): Are you sure you want to close the installer? You won't be able to recover the data.
 2016-05-16 13:50:02.322   User chose Yes.
 2016-05-16 13:50:02.404   User canceled the installation process.
 2016-05-16 13:50:02.404   Rolling back changes.
 2016-05-16 13:50:02.408   Starting the uninstallation process.
 2016-05-16 13:50:02.408   Uninstallation process succeeded.
 2016-05-16 13:50:03.916   Deinitializing Setup.
 2016-05-16 13:50:11.176   Failed to remove temporary directory: C:\Users\AATASH~1\AppData\Local\Temp\is-N7DAL.tmp

【问题讨论】:

  • 我猜你的意思是OnCancelButtonClick,对吧?
  • 另外我假设控件没有隐藏。他们只是可能无法绘制,因为安装程序停止处理 Windows 消息(=停止响应)。为什么?你在做一些回滚吗?第二个屏幕截图实际上显示了什么?那里发生了什么?
  • @MartinPrikryl 是的,OnCancelButtonClick。那里发生了什么:我正在尝试在实例运行时重新安装(出于测试目的)程序。当我尝试通过单击关闭窗口按钮并确认取消来中断安装时,大多数标签、复选框和单选按钮都会消失,几秒钟后窗口就会关闭。问题是当控件消失时,窗口看起来很混乱
  • 好的,但是在这“几秒钟”期间发生了什么?您是在做某事还是 Inno Setup 本身在做某事?它是什么?您可以通过检查安装程序日志来判断吗?
  • 好的,时间戳说明了什么? “几秒钟”的差距在哪里?

标签: inno-setup


【解决方案1】:

Inno Setup 中的“回滚”实现远非完美。

Inno Setup 在卸载过程中不处理窗口消息队列。它甚至明确冻结了 1500 毫秒,“以便用户有时间阅读“回滚更改”消息”

由于没有抽出消息队列,因此在 Windows 中,某些控件(尤其是高级控件)通常会消失,因为它们不处理“绘制”请求。由于您无法让 Inno Setup 处理队列,因此您无法对其做任何事情。

一些部分解决方案:

  • 自己隐藏您的高级控件并重新显示WizardForm.StatusLabel(显示“正在回滚更改...”消息)。当消息队列未抽出时,“标签”不会消失。
  • 使用WizardForm.Hide取消安装程序时隐藏整个窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多