Windows installer 查找以前安装的版本的INSTALLDIR

Windows installer 查找以前安装的版本的INSTALLDIR,windows-installer,installshield,Windows Installer,Installshield,我正在尝试使用InstallShield对我们的产品进行重大升级。只要用户没有选择将其安装到自定义位置,它就可以正常工作。如果有,则找不到我创建的用于备份和还原用户设置(.Net config文件条目)的代码,因为自定义操作正在默认位置查找。它对原始安装的位置一无所知。卸载可以从该安装中发现INSTALLDIR并将其卸载。FindRelatedProducts显示: FindRelatedProducts: Found application: {E881D894-B624-4B8B-8A02-

我正在尝试使用InstallShield对我们的产品进行重大升级。只要用户没有选择将其安装到自定义位置,它就可以正常工作。如果有,则找不到我创建的用于备份和还原用户设置(.Net config文件条目)的代码,因为自定义操作正在默认位置查找。它对原始安装的位置一无所知。卸载可以从该安装中发现INSTALLDIR并将其卸载。FindRelatedProducts显示:

FindRelatedProducts: Found application: {E881D894-B624-4B8B-8A02-36E2425E3928}
但是,除了在专有注册表位置下之外,我在任何地方都找不到该项,该位置没有任何有用的内容:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield Uninstall Information\{E881D894-B624-4B8B-8A02-36E2425E3928}
E881D…
是我正在升级的安装的产品代码。我在任何地方都找不到升级代码,无论是按照该顺序还是使用MS编码/打包格式

在我看来,能够找到您正在升级的软件包的安装位置应该是一个非常基本的功能,因为在升级应用程序时,用户可能希望将其放回原来的位置。很明显,由于ARP和升级安装程序能够成功地删除应用程序,所以这些信息在某些地方是可用的


另外,在主要升级期间,是否有任何方法可以从原始安装访问SecureCustomProperties的值?我很确定我知道答案…

您可以使用组件搜索。查找安装在该INSTALLDIR位置(我假定是主应用程序文件夹)的文件的组件guid并使用该guid。在InstallShield中,我认为这是一个系统搜索。它将返回该组件安装位置的路径,并要求该文件是该组件的关键路径

作为将来的参考,您至少可以通过两种方式对此进行准备

  • 如果INSTALLDIR是位置,只需在您选择的位置创建一个注册表项(使用标准IDE),并给它值[INSTALLDIR],当该项写入注册表时,它将解析为实际位置

  • 另一个有用的技巧是将Type51自定义操作设置为[INSTALLDIR]的值,我不确定是否有InstallShield接口,但它不需要代码。这导致安装位置位于卸载注册表项中,但这基本上是一个实现细节。给定ProductCode和INSTALLPROPERTY\u INSTALLLOCATION的API MsiGetProductInfo(及等效项)将返回主应用程序文件夹位置


  • 谢谢我喜欢ARP解决方案,即使它过于复杂。作为安装人员的新手,我从未想到MSI不会自动完成这种基本功能。我不希望它出现在IS中,这是我20多年来使用的最大的POS软件。我真的很后悔没有从一开始就开始学习WiX。我现在当然不得不采用组件搜索的方法,但我会在将来修复这个安装程序。所以我需要部分收回我以前的一些评论。似乎InstallShield实际上有一个自定义操作类型51,用于设置ARPSInstallLocation。我通过尝试添加自己命名的setarpsinstalllocation发现了这一事实,巧合的是,它恰好与所选的名称相同。因为他们并没有记录它或其他任何东西(继续搜索“InstallShield APRINSTALLLOCATION”)。或者提供了一种利用它的方法。典型的半途而废是实现。