【问题标题】:Can an MSI that was kicked off programmatically be cancelled without user interaction?是否可以在没有用户交互的情况下取消以编程方式启动的 MSI?
【发布时间】:2015-02-25 17:48:53
【问题描述】:

假设我使用如下命令启动 MSI:“msiexec.exe /qb /i mypackage.msi”,然后 MSI 开始执行此操作。是否可以自动“取消”以这种方式启动的 MSI,而无需用户手动单击“取消”按钮?

MSI 窗口显示为这样,我想知道是否有任何方法可以让 MSI 自动到达此场景,而无需用户单击现在灰显的“取消”按钮。

注意:有人声称他们没有点击“取消”按钮,我认为他们确实做到了。我只是想知道是否有人确定如果发生错误或发生某些事情,MSI 调用是否会自行取消。

【问题讨论】:

  • 您能解释一下您的用例吗?这是为了取消测试还是什么?

标签: windows-installer cancellation


【解决方案1】:

FWIW,/qn 不会有任何 UI。屏幕截图显示 /qb! (基本用户界面和禁用取消按钮)

我 99% 确定 MSI 不会公开用于请求取消正在运行的 MSI 的 API。也许如果您有一个使用 API 启动安装事务的自定义 EXE,那么您可以调用 API 来取消它。

【讨论】:

  • 我不想取消它。我只需要知道 MSI 本身是否有可能触发取消,或者是否必须由用户通过单击取消按钮来完成。基本上,有人声称他们没有点击取消按钮,我认为他们确实做到了。
  • 您是否记录了安装?看看事件查看器?我可以想到许多会导致安装程序无法启动或停止并回滚的场景(UAC 提升提示、安装程序失败、自定义操作返回用户退出)。但这并不意味着有人点击了取消按钮。
  • 如果它正在回滚,它会显示“Canceling ...”吗?
  • 不确定如何触发它进行回滚。有什么想法吗?
  • 必须有自定义操作 - 这将是非常不寻常的,即使您没有添加,也可能会生成一些。查看原始 MSI 文件的 CustomAction 表。言归正传,如果 CA 返回 ERROR_INSTALL_USEREXIT,那么它将显示为已被用户取消。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2012-10-24
相关资源
最近更新 更多