在重大升级期间使用已安装应用程序的位置作为默认路径

Use installed app's location as a default path during a major upgrade

我有一个应用程序,我正在为其编写主要升级。
唯一持久的是 UpgradeCode。 我想要的是使用以前安装的版本的位置作为安装的默认路径。

我天真的解决方案是 运行 一个 CustomAction,它使用 AppSearch table.[=15= 获得的变量 APP_LOCATION 修改 INSTALLDIR ]

  1. 是否有传统的方法可以通过 MSI 或 InstallShield 实现?
  2. 如果 AppSearch table 中包含值,我可以使用 MSI table 中的条件来使用“APP_LOCATION”吗? 对于例子:INSTALLDIR = APP_LOCATION ? APP_LOCATION : MY_DEFAULT_INSTALL_DIR(语法是强调逻辑,idk if 有效)

您可以使用以下方法获取以前的安装位置:

Msi.GetProductInfo(之前安装的产品代码,“InstallLocation”);

要获取以前安装的产品代码,请使用主要升级设置的public 属性。这个 public 属性 例如 OLD_PRODUCT_DETECTED 属性 可以在 Upgrade table 的 ActionProperty 列中找到。它的值将设置为产品代码 ({GUID})。

确保在 FindRelatedProducts 操作后调用上述方法,如果找到以前的安装,它将 public 属性 的值设置为 {GUID}。