You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:06:02