![](/img/trans.png)
[英]How to add installed program to the All Programs folder list in Wix Toolset
[英]How to determine the folder that a previous WIX Install installed a program in
我们产品的现有安装程序不会向注册表写入任何信息,也不会编写任何自定义环境变量。 允许用户在安装程序的UI中更改安装目录。 当我进行升级时,如何找出以前版本安装到哪个文件夹?
我需要知道该文件夹,以便我可以找到以前的配置文件并从中复制值。 新版本的配置文件有新标签和新结构,因此我不能只保留以前的文件并重复使用它。
托尼
MSI没有直接获得该信息。 (MSI包可以有多个“根”目录,因此无法确定开发人员可能需要哪一个。)如果您在注册表中有该目录,请使用RegistrySearch 。 否则,您可以在自定义操作中使用MsiGetComponentPath 。
我已经对此做了一些研究,这是我提出的解决方案:
安装程序完成安装后,会在路径下的注册表中创建一个节点
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文件名中提取路径。
所以我的解决方案是:
托尼
msiexec保留了上次安装时msi的副本,因此它将处理卸载以前只需包含InstallExecuteSequence部分所需的版本
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallValidate" />
</InstallExecuteSequence>
这仅在您在Product Element中使用相同的UpgradeCode属性时才有效。
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.