在重大升级期间,如何在 InstallScript 中找到应用程序的先前安装位置?

How can I find the previous install location of an application in InstallScript during a major upgrade?

我正在更新一个用 InstallShield 编写的安装程序来执行应用程序的主要升级,并让自定义操作调用 InstallScript 函数来备份和恢复应用程序目录中的一些文件。我有使用硬编码的先前安装目录的脚本,但需要找到应用程序安装的实际位置。

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

MsiGetProductInfo(PRODUCT_GUID, INSTALLPROPERTY_INSTALLLOCATION, savedInstallDir, bufferSize);

但是如果我将 PRODUCT_GUID 更改为之前安装的产品代码的硬编码值,那么我会在 savedInstallDir 中得到一个空字符串:

MsiGetProductInfo("{my-previous-product-code}", INSTALLPROPERTY_INSTALLLOCATION, savedInstallDir, bufferSize);

您确定已为安装的旧版本保留安装位置吗?当你从 VBScript 尝试时你得到了什么(当然更新你自己的产品 G​​UID):

Dim installer : Set installer = CreateObject("WindowsInstaller.Installer")
MsgBox installer.ProductInfo("{9B061D60-4E2C-4987-BFFD-423E3D477660}","InstallLocation")

我检查了所有已安装的软件包,只有大约十几个(几百个软件包中的)保留了这条路径。 Script to check all installed packages.


在注册表中:在位置:

下查找值 "InstallLocation"
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\PACKEDGUIDHERE\InstallProperties

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{REGULARGUIDHERE}

GUIDS: