我正在使用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是否存在.
请注意,如果注册表值存在,但它指定的目录不存在,则将使用默认值.