Wix 在主要升级时更改文件夹

Wix 在主要升级时更改文件夹,wix,wix3.7,Wix,Wix3.7,我有一个默认的安装目录: <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFiles64Folder"> <Directory Id="INSTALLFOLDER" Name="$(var.Manufacturer) $(var.ProductName)"></Directory> </Directory> </Directory&

我有一个默认的安装目录:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFiles64Folder">
    <Directory Id="INSTALLFOLDER" Name="$(var.Manufacturer) $(var.ProductName)"></Directory>
  </Directory>
</Directory>

在安装过程中,我允许用户更改目录。如果用户在主要升级过程中确实更改了目录,我是否必须手动检索目录并使用实际路径设置INSTALLFOLDER,或者是否有方法自动检测它?

Windows Installer不直接支持这一点;我想你是在找那个。该战略是:

在初始安装时,将INSTALLFOLDER的值保存到一个已知位置的注册表中。 启动升级时,从注册表中检索值并使用它。 创作过程如下所示:

<!-- Retrieve the property from the registry during AppSearch -->
<Property Id='REMEMBERME'>
  <RegistrySearch Id='RememberProperty'
                Root='HKCU'
                 Key='SOFTWARE\My Company\My App'
                Name='Remembered'
                Type='raw' />
</Property>

<!-- Save the value in the registry for future upgrades -->
<Component Directory='INSTALLFOLDER'>
    <RegistryValue Root='HKCU'
                    Key='SOFTWARE\My Company\My App'
                   Name='Remembered'
                  Value='[REMEMBERME]'
                   Type='string' />
</Component>

更详细地描述了这一点。

现在变得更复杂了,因为我发现了多篇关于如何设置自定义操作CostFinalize的帖子,但都不起作用。每次我在CostFinalize之后设置操作时,都会收到指向目录的错误51。因此,它必须在CostFinalization之前进行。一个主要的升级是一个单独的安装,因此,如果您允许用户像第一次用户那样更改目录,那么您就完成了。我想我不明白你的问题。是否希望执行主要升级的用户与第一次安装的用户有不同的体验?当用户安装软件升级时,我希望该升级转到安装以前版本的文件夹。如果在版本1安装期间将目录更改为非默认目录,则在升级期间,文件将转到默认目录,并且该问题可能会重复