WIX Installer读取.ini文件路径设置ROOTDRIVE实现自定义安装路径
核心错误说明
- 你编写的CustomAction只是将MY_PROPERTY的值赋值给了无意义的
MyAction属性,没有和安装目录关联,完全没有生效 - 直接用DirectoryRef指向MY_PROPERTY是错误的,MY_PROPERTY是存储路径值的属性,不是预先定义的目录节点ID
正确配置步骤
1. 保留Ini文件搜索配置
这部分你原有逻辑基本正确,可补充默认值避免找不到ini文件时报错:
<Property Id="MY_PROPERTY" Secure="yes"> <IniFileSearch Id="myIniSearch" Name="localtest.ini" Section="ENVIRONMENT" Key="LocalDirectory" Type="raw"> <DirectorySearch Id="SPIniFilePath" Path="C:\"> <FileSearch Id="SPIniFile" Name="localtest.ini"/> </DirectorySearch> </IniFileSearch> <!-- 找不到ini文件时的默认安装路径,可自行修改 --> <![CDATA[C:\DefaultInstallPath]]> </Property>
2. 替换无效的CustomAction,使用SetDirectory绑定安装路径
通过SetDirectory动作,将读取到的路径值赋值给安装目录ID,需要同时覆盖UI序列和执行序列,保证静默安装和UI安装都生效:
<!-- 执行序列赋值 --> <SetDirectory Id="INSTALLFOLDER" Value="[MY_PROPERTY]" Sequence="execute" After="AppSearch" /> <!-- UI序列赋值,保证安装界面显示的路径和实际安装路径一致 --> <SetDirectory Id="INSTALLFOLDER" Value="[MY_PROPERTY]" Sequence="ui" After="AppSearch" />
3. 编写标准目录结构
不需要关联MY_PROPERTY属性,正常定义目录节点即可:
<Fragment> <Directory Id="TARGETDIR" Name="SourceDir"> <!-- INSTALLFOLDER会被SetDirectory自动赋值为ini读取到的路径 --> <Directory Id="INSTALLFOLDER" Name="!(bind.property.ProductName)"> <!-- 可继续添加子目录,比如你的业务目录SimpleWebApp --> <Directory Id='INSTALLDIR_SimpleWebApp' Name='SimpleWebApp' /> </Directory> </Directory> </Fragment>
注意事项
- 不需要手动修改ROOTDRIVE属性,直接设置INSTALLFOLDER的路径更稳妥
- 如果你的安装包带有UI界面,需要确认界面上的安装路径输入框绑定的是INSTALLFOLDER属性,避免显示和实际路径不一致
- 排查问题时可在执行安装包时加
/l*v install.log参数生成安装日志,查看MY_PROPERTY是否读取到正确值、INSTALLFOLDER是否被正确赋值
内容的提问来源于stack exchange,提问作者user3422209
相关产品推荐
相关产品推荐

