【问题标题】:MSI installation : cancel is not workingMSI 安装:取消不起作用
【发布时间】:2011-07-06 20:06:54
【问题描述】:

CANCEL 按钮在默认安装程序 UI 中究竟是如何工作的?

如果我点击取消按钮,有时我可以看到带有是或否选项的“你要取消设置”对话框。

但在某些情况下,此弹出窗口不会出现,安装会继续。

我看到这个问题,如果我只在第一阶段结束时单击取消按钮。状态消息是“正在处理新文件”。

“处理新文件”是延迟操作。这个消息怎么会在第一阶段显示?

【问题讨论】:

    标签: windows-installer


    【解决方案1】:

    您确定它实际上是在运行“复制新文件”操作,还是在此之后的操作不发布任何进度更新?如果是自定义操作,请注意它执行以下两项操作之一:

    • 从不调用 MsiProcessMessage(或等效项)
    • 注意MsiProcessMessage的返回码,并适当处理cancel

    如果该操作从不调用 MsiProcessMessage,则 Windows Installer 将处理该操作的取消,但不能在操作中间取消它。如果该操作调用 MsiProcessMessage(eMessageType 具有某些值),则 Windows Installer 假定该操作将处理取消操作,并且该操作必须返回 ERROR_INSTALL_USEREXIT,否则 Windows Installer 会感到困惑。

    【讨论】:

    • 几乎所有自定义操作,在开始实际任务之前,调用 MsiProcessMessage 设置状态。返回类型未正确处理。
    【解决方案2】:

    “取消”按钮在默认安装程序 UI 中究竟是如何工作的?他们使用多个线程,例如 WindowsForms .NET 中的 BackgroundWorker。一个线程用于 UI,一个线程用于安装,如果您单击取消(UI),它将尝试在某个时间点停止另一个线程(安装)。

    【讨论】:

    • 我错过了什么吗?仅当我在第一阶段结束时单击取消按钮时才会出现此问题,其中 ui 上显示的状态消息是“正在处理新文件”。
    【解决方案3】:

    MSI 安装过程的执行顺序分为两个阶段:

    1. 首先所有应该执行的动作都写在一个临时安装脚本中。这是即时的,它总是显示取消弹出窗口。
    2. 第二阶段运行该脚本并实际执行安装。它按延迟运行。根据您按下取消的确切时间,可能会显示也可能不会显示弹出窗口。

    例如,当提交动作开始执行时,不能再取消安装。

    【讨论】:

    • 此问题处于第一阶段。如果我在第二阶段单击取消按钮,我会收到取消弹出窗口。但只有第一阶段结束时的问题。一个重要的注意事项是,如果我在第二阶段直接单击取消按钮,我可以看到弹出窗口。但是如果我点击第一阶段结束,我看不到......如果我在第二阶段再试一次,我冷看不到取消弹出窗口(安装跳过进一步的取消按钮点击)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多