我们产品的现有安装程序不会向注册表写入任何信息,也不会编写任何自定义环境变量。允许用户在安装程序的UI中更改安装目录。当我进行升级时,如何找到以前版本安装到哪个文件夹?
我需要知道该文件夹,以便找到以前的配置文件&从中复制值。新版本的配置文件有新标签和新结构,所以我不能只保留以前的文件和文件。重用它。
贝
答案 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文件名中提取路径。
所以我的解决方案是:
贝
答案 2 :(得分:0)
msiexec保留了上次安装时msi的副本,因此它将处理卸载以前只需包含InstallExecuteSequence部分所需的版本
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallValidate" />
</InstallExecuteSequence>
只有在产品元素中使用相同的UpgradeCode属性时,才能使用此功能。
祝你好运!