【问题标题】:What do I need to check to ensure that an Uninstall is being run?我需要检查什么以确保正在运行卸载?
【发布时间】:2011-05-07 14:55:52
【问题描述】:

我需要在我的安装程序中设置启动条件,以防止用户直接运行 MSI 文件,除非他们正在运行卸载。 (所有其他类型的安装都应从引导应用程序运行,以确保满足所有先决条件。)

我需要什么条件来检查这个?我尝试了REMOVE="ALL" OR BOOTSTRAPBOOTSTRAP 是我的引导应用程序在启动 MSI 时在命令行中定义的属性),但这也会触发修复安装,这是我不想要的。

【问题讨论】:

  • 你试过MaintenanceMode="Remove"吗?
  • 从控制面板(或直接)启动 MSI 以进行删除安装时,这不起作用。

标签: windows-installer uninstallation wise launch-condition


【解决方案1】:

就我个人而言,我采用了不同的方式。我希望用户可能会运行 MSI 而不是 SETUP.EXE,所以我故意使用 AppSearch 和 LaunchConditions 在 MSI 中复制我的所有引导程序先决条件检查。这样,如果他们跳过引导程序或者它以某种方式失败,我的 MSI 仍然可以发现问题。

我还遵循在我的条件下附加“或已安装”的做法,这样缺少的 prereq 就不会妨碍卸载。

【讨论】:

  • 这对于一个简单的安装程序来说很好。然而,我的更复杂。它安装了一套程序,引导程序不仅要确保安装了 prereqs,它还必须收集所有信息,例如用户想要安装的内容(以便引导程序可以确定需要哪些 prereqs)以及要安装的各种配置信息。除了卸载,我的安装程序必须通过引导程序。
  • 我发现它也适用于非常复杂的安装程序。我的典型引导程序有几十个 COTS\GOTS 包,加起来高达几 GB。我通过一个可重复使用的基准支持多个产品,大约 100 个包 (25GB) 可以包含在一个产品中。
  • 就我而言,套件中的每个产品都有一组不同的前置条件,我们不想安装任何不需要的前置条件。由于安装程序无法启动另一个安装程序,因此用于从用户那里获取所有信息的任务和 GUI 将由引导程序负责。
  • 我用了几种不同的方法。有了 InstallShield,他们就有了 setup prereq 和 feature prereq 的概念。功能先决条件与安装程序中的功能相关联,并且只有在安装该功能时才会安装。基本上,UI 序列交还给 setup.exe,由它完成工作,然后执行正常内容的执行序列。
  • 另一种方法是不使用 LaunchConditions。我创建了一个名为 CustomFeatureConstraints 的东西,它会等到选择了功能之后才能强制执行所需的先决条件。像这样我可以做的事情总是需要.NET,但只有在安装功能 WS 时才需要 IIS。
【解决方案2】:

据我所知,到目前为止,似乎没有办法阻止在直接启动 MSI 时运行修复安装,所以我不得不将OR REINSTALL="ALL" 添加到我的启动条件中。如果有人知道一种只允许通过引导程序完成修复的方法,我们将不胜感激。

【讨论】:

  • 这将是公认的答案,除非并且直到出现一些真正做我想做的事情。
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 2020-10-12
  • 2012-10-18
  • 2020-08-30
相关资源
最近更新 更多