如何基于捆绑包/独立场景动态设置WiX MSI的INSTALLFOLDER
基于WiX动态设置INSTALLFOLDER路径的解决方案
要实现根据运行场景动态调整INSTALLFOLDER的目标,只需通过属性绑定和默认值设置即可完成,无需复杂的自定义动作,具体步骤如下:
- 给APP属性设置默认值
在MSI中定义APP属性并赋予默认值Model,确保独立运行MSI时使用该默认值:
<Property Id="APP" Value="Model" />
- 动态绑定INSTALLFOLDER的目录名称
修改目录结构,将INSTALLFOLDER的Name属性绑定到APP属性,这样目录名称会随APP的值自动变化:
<Fragment> <StandardDirectory Id="ProgramFiles6432Folder"> <Directory Id="ROOTDIRECTORY" Name="!(bind.Property.Manufacturer)"> <Directory Id="INSTALLFOLDER" Name="[APP]" /> </Directory> </StandardDirectory> </Fragment>
- 验证场景匹配
- 独立运行MSI时,
APP使用默认值Model,最终INSTALLFOLDER路径为C:\Program Files (x86)\TODO Manufacturer\Model - 从捆绑包运行时,捆绑包传递的
APP=DesktopApp会覆盖默认值,INSTALLFOLDER路径变为C:\Program Files (x86)\TODO Manufacturer\DesktopApp
补充说明
WiX中默认属性允许被外部(如捆绑包、命令行)传入的值覆盖,因此上述方案无需额外处理属性的优先级问题,完全满足两种运行场景的需求。
内容的提问来源于stack exchange,提问作者Valerii Nozdrenkov
相关产品推荐
相关产品推荐

