如何确定以前的WIX Install安装程序的文件夹

时间:2011-09-12 14:24:49

标签: wix

我们产品的现有安装程序不会向注册表写入任何信息,也不会编写任何自定义环境变量。允许用户在安装程序的UI中更改安装目录。当我进行升级时,如何找到以前版本安装到哪个文件夹?

我需要知道该文件夹,以便找到以前的配置文件&从中复制值。新版本的配置文件有新标签和新结构,所以我不能只保留以前的文件和文件。重用它。

3 个答案:

答案 0 :(得分:3)

MSI没有直接获得该信息。 (MSI包可以有多个“根”目录,因此无法确定开发人员可能需要哪一个。)如果您在注册表中有该目录,请使用RegistrySearch。否则,您可以在自定义操作中使用MsiGetComponentPath

答案 1 :(得分:1)

我已经对此做了一些研究,这是我提出的解决方案:

安装程序完成安装后,会在路径

下的注册表中创建一个节点
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<Product ID>

用于32位操作系统上的32位安装或64位操作系统上的64位安装,或

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\<Product ID>

在64位操作系统上进行32位安装。

此节点包含一个名为InstallLocation的值,该值为您提供安装可执行文件的路径。

不幸的是,我们安装程序的先前版本没有设置此属性,因此我无法使用它。但我们的安装程序会创建一个服务。我在注册表中找到了该服务的节点路径。从那里,我可以检索ImagePath值的值,并从服务的.EXE文件名中提取路径。

所以我的解决方案是:

  1. 修复新安装程序,使其设置InstallLocation值。
  2. 仅从先前版本升级时,它将检索服务的注册表节点&amp;使用服务的ImagePath密钥。
  3. 如果从任何更高版本升级,我们将检索Uninstall节点并使用InstallLocation键。

答案 2 :(得分:0)

msiexec保留了上次安装时msi的副本,因此它将处理卸载以前只需包含InstallExecuteSequence部分所需的版本

<InstallExecuteSequence>
  <RemoveExistingProducts After="InstallValidate" />
</InstallExecuteSequence>

只有在产品元素中使用相同的UpgradeCode属性时,才能使用此功能。

祝你好运!