Wix修复安装在默认路径中,而不是安装应用程序的位置
我有这个财产:Wix修复安装在默认路径中,而不是安装应用程序的位置,wix,windows-installer,repair,installation-path,Wix,Windows Installer,Repair,Installation Path,我有这个财产: <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER"/> 我的目录: <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="LocalAppDataFolder"> <Directory Id="LocalAppDataCompany" Name="Company"> <Direc
<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
的值),但它不起作用。编辑:哇,在回答之前,我真的需要阅读完整的问题。刚刚注意到您将此值存储在注册表中。我仍将保留我的答案,因为它可能有用
您需要实现“记住我”模式,以便您的安装可以拾取在初始安装期间可能已修改的属性。install dir可能是您应该记住的最频繁修改的属性。有许多安装程序没有正确执行此操作,您会注意到,如果您正在升级,它们总是会被删除默认安装目录的错误不在您以前安装的位置,这可能会很烦人 很好地解释了“记住我”模式的概念。在大多数情况下,您可以通过简单的实现逃脱 要点是,您需要存储修改后的install dir的值(通常在注册表中),然后在以后每次运行安装程序时尝试获取它 对于INSTALLFOLDER属性,您只需要添加两个内容,一个注册表搜索和一个注册表项 首先,我们需要添加一个带有registrykey的新组件,以将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>
现在,修复时,安装程序应找到此注册表项,然后修复正确的目录。此外,在升级期间,安装位置将设置为与当前安装的产品相同的位置
请注意,如果您有一个非静态的产品名称或制造商,则只需输入静态文本,而不是“[Manufacturer]”和“[ProductName]”在注册表路径中。您可以共享问题中的RegistrySearch和RegistryValue组件吗?这是一种方法,这样我就可以怀疑某些内容编写错误。感谢您的回答。我会尝试一下,使用注册表执行“记住我”模式时可能遗漏了一些内容:)