WiX Burn - 根据条件设置InstallFolder变量

Tal*_*yke 2 wix burn

我正在使用WiX 3.6(但如果需要可以升级到3.8)并且有一个用BURN编写的启动器,这几乎可以完成我需要的一切,除了这个问题; 我似乎无法破解.

我有两个变量; Product_XYZ和Product_ABC.第一个包含通过注册表搜索填充的文件夹路径(因此如果搜索没有找到我的reg密钥,它可能是空白的),另一个是硬编码的(即"[ProgramFilesFolder]\ABC").

我只是(?)想要将InstallFolder变量(通过Options按钮显示在UI中)设置为Product_XYZ变量中的值(如果它不是空白).如果它是空白的,我想将InstallFolder设置为Product_ABC中的值.

If Product_XYZ <> "" then
    InstallFolder = [Product_XYZ]
else
    InstallFolder = [Product_ABC]
endif 
Run Code Online (Sandbox Code Playgroud)

但显然使用BURN逻辑!!

谁能帮帮我吗 ?

干杯,

克里斯.

小智 13

我有同样的需求,通过查看WiX自己的捆绑包找到了解决方案:

    <Variable
      Name='InstallFolder'
      Type='string'
      Value='[ProgramFilesFolder]WiX Toolset v$(var.WixMajorMinor)' />
    <util:RegistrySearch
      Id="PreviousInstallFolderSearch"
      Root='HKLM'
      Key='SOFTWARE\Microsoft\Windows Installer XML\$(var.WixMajorMinor)'
      Value='InstallFolder'
      Variable='PreviousInstallFolder' />
    <util:DirectorySearch
      Path='[PreviousInstallFolder]'
      Variable='InstallFolder'
      After='PreviousInstallFolderSearch'
      Condition='PreviousInstallFolder' />
Run Code Online (Sandbox Code Playgroud)

<Variable/>元素定义的默认值.

<util:RegistrySearch/>会查找注册表值(和,如果发现,将其保存在一个名为新变量PreviousInstallFolder).

<util:DirectorySearch/>只执行,如果注册表项被发现.它检查目录是否存在并设置InstallFolder是否存在.

请注意,如果注册表值存在,但它指定的目录不存在,则将使用默认值.