[英]Wix repair installs in default path, not where the app is installed
我有这个属性:
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER"/>
我的目录:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="LocalAppDataFolder">
<Directory Id="LocalAppDataCompany" Name="Company">
<Directory Id="INSTALLFOLDER" Name="Product" />
</Directory>
</Directory>
</Directory>
它编译成功。 当我运行 .msi 时,它会按预期将文件安装在C:\\Users\\[CurrentUser]\\AppData\\Local\\Company\\Product
中。
但问题是:
Product2
...\\AppData\\Local\\Company\\Product2
C:\\Users\\[CurrentUser]\\AppData\\Local\\Company\\Product C:\\Users\\[CurrentUser]\\AppData\\Local\\Company\\Product2
如何修复修复,重新安装文件(修复期间) ...\\AppData\\Local\\Company\\Product2
(或最初安装应用程序的任何地方)?
我曾尝试使用注册表搜索(因为我将INSTALLFOLDER
的值INSTALLFOLDER
在注册表中),但它不起作用。
编辑:哇,我真的需要在回答之前阅读完整的问题。 刚刚注意到您将此值存储在注册表中。 我仍然会保留我的答案,因为它可能有用。
您需要实现记住我的模式,以便您的安装可以选择在初始安装期间可能已修改的属性。 安装目录可能是您应该记住的最常修改的属性。 有很多安装程序没有正确执行此操作,您会注意到,如果您要升级它们,它们总是默认为默认安装目录,而不是您以前安装的位置,这可能很烦人。
这很好地解释了“记住我”模式的概念。 在大多数情况下,您可以使用简单的实现。
要点是您需要存储更改的安装目录的值(通常在注册表中),然后每次运行安装程序时尝试获取它。
对于 INSTALLFOLDER 属性,您只需添加两件事,一个注册表搜索和一个注册表项。
首先,我们需要添加一个带有注册表项的新组件,以将 INSTALLFOLDER 的值写入注册表
<Component Id="InstallFolderRegistry" Directory='INSTALLFOLDER'>
<RegistryValue Root='HKCU' Key='SOFTWARE\[Manufacturer]\[ProductName]'
Name='InstallFolder' Value='[INSTALLFOLDER]'
Type='string' KeyPath="yes" />
</Component>
如果您只想删除“KeyPath="yes"”,您也可以将此注册表值附加到另一个组件中。
这将在安装期间将 INSTALLFOLDER 属性的值放入注册表中。
现在我们需要尝试读取这个值,如果它在启动时存在,以便在升级或修复期间我们将获得用户选择安装的正确位置。
<Property Id='INSTALLFOLDER'>
<RegistrySearch Id='InstallFolderRegSearch' Root='HKCU'
Key='SOFTWARE\[Manufacturer]\[ProductName]'
Name='InstallFolder' Type='raw' />
</Property>
现在,当您修复安装程序时,应该找到此注册表项,然后修复正确的目录。 同样在升级期间,安装位置将设置为与当前安装的产品相同的位置。
请注意,如果您有一个非静态的 ProductName 或 Manufacturer,您可以在注册表路径中输入静态文本而不是“[Manufacturer]”和“[ProductName]”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.