WiX Burn - 根据条件设置 InstallFolder 变量
Posted
技术标签:
【中文标题】WiX Burn - 根据条件设置 InstallFolder 变量【英文标题】:WiX Burn - Setting InstallFolder variable based on a condition 【发布时间】:2013-12-12 20:50:43 【问题描述】:我正在使用 WiX 3.6(但如有必要可以升级到 3.8)并且有一个用 BURN 编写的引导程序,这几乎可以满足我的所有需求,除了这个问题;我似乎无法破解。
我有两个变量; Product_XYZ 和 Product_ABC。第一个包含通过注册表搜索填充的文件夹路径(因此,如果搜索未找到我的 reg 密钥,它可能是空白的),另一个是硬编码的(即“[ProgramFilesFolder]\ABC”)。
我只是(?)想将 InstallFolder 变量(以便它通过选项按钮显示在 UI 中)设置为 Product_XYZ 变量中的值(如果它不是空白的话)。如果为空,我想将 InstallFolder 设置为 Product_ABC 中的值。
即
If Product_XYZ <> "" then
InstallFolder = [Product_XYZ]
else
InstallFolder = [Product_ABC]
endif
但显然使用 BURN 逻辑!!
谁能帮帮我?
干杯,
克里斯。
【问题讨论】:
这可能会有所帮助:***.com/questions/10501995/… 感谢您的回复,但是在这种情况下这对我没有帮助。 【参考方案1】:我有同样的需求,通过查看 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' />
<Variable/>
元素定义了默认值。
<util:RegistrySearch/>
查找注册表值(如果找到,将其保存在名为 PreviousInstallFolder
的新变量中)。
<util:DirectorySearch/>
仅在找到注册表项时执行。它检查目录是否存在,如果存在则设置InstallFolder
。
注意,如果注册表值存在,但它指定的目录不存在,那么将使用默认值代替。
【讨论】:
马克,对不起,我从来没有回复你的答案——那是因为我从来不知道它在那里(以为我会收到来自这个网站的电子邮件?!)。今天我正要发布另一个关于我的引导程序的问题,但是当我进入这个主题时,它提示我提出了我提出的这个老问题,那时我注意到了你的回答。读完后,我认为这是对我最初所做的更好的解决方案;尽管我的解决方案有效,但我还是尝试了您的解决方案。它确实有效 - 但更好的是,它实际上解决了我要问的新问题!这么多,非常感谢!【参考方案2】:如果您设置正确并且可以通过属性更改安装位置,您应该测试您的 MSI(不带刻录) 根据您的目录设置,这只是一个示例:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder>
<Directory ID="INSTALLDIR" Name="FolderName" />
...
</Directory>
使用 msiexec 测试您的 msi,例如:
msiexec /i package.msi /qb+ INSTALLDIR="C:\Programs\ABC"
如果它没有安装在您指定的位置,那么首先您需要修复您的 WiX msi,以便它可以接受 INSTALLDIR。
在 Burn 中,有条件地设置变量 (InstallFolder) 后,您需要使用 MsiProperty
元素将其传递给 MSIpackage。例如
<MsiPackage Id="someid" Source="$(var.msi)Yourinstaller.msi">
<MsiProperty Name="INSTALLDIR" Value="[InstallFolder]" />
注意,当您将 INSTALLDIR 属性路径发送到 msi 时,它必须是完整路径。
【讨论】:
以上是关于WiX Burn - 根据条件设置 InstallFolder 变量的主要内容,如果未能解决你的问题,请参考以下文章