windows安装程序-MSI安装:取消不起作用



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

如果我点击"取消"按钮,有时我可以看到"你想取消设置吗"对话框,有是或否选项。

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

如果我只在第一阶段结束时单击"取消"按钮,我就会看到这个问题。状态消息为"正在复制新文件"。

"复制新文件"是延迟操作。为什么这个信息在第一阶段显示?

您确定它确实在运行"复制新文件"操作,还是在之后不发布任何进度更新的操作?如果这是一个自定义操作,请注意它会做以下两件事之一:

  • 从不调用MsiProcessMessage(或等效程序(
  • 注意MsiProcessMessage的返回代码,并适当地处理cancel

如果该操作从不调用MsiProcessMessage,则Windows安装程序将处理该操作的取消,但不能在操作进行到一半时取消该操作。如果该操作调用MsiProcessMessage(具有特定的eMessageType值(,则Windows安装程序假定该操作将处理取消,并且该操作必须返回ERROR_INSTALL_USEREXIT,否则Windows安装程序会感到困惑。

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

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

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

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