从环境变量动态设置 WiX 中的安装目录

Ark*_*niK 1 windows-installer wix environment-variables

我是 MSI 开发(使用 WiX 或其他方式)的新手,我正在尝试读取环境变量的值并将其用作安装目录。我的 msi 也没有 GUI,并且不允许用户选择覆盖路径。

我可以使用以下命令成功读取 var:

<SetProperty 
    Id="TARGETINSTALLDIR" 
    Value="[%MY_ENV_VAR]\My\Install\Path" 
    After="LaunchConditions" 
    Sequence="first"  />
Run Code Online (Sandbox Code Playgroud)

我可以在 msi 日志中看到检索到的正确路径。

我已尝试以下方法来设置返回的路径:

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="APPLICATIONROOTDIRECTORY" Name="[TARGETINSTALLDIR]"/>
</Directory>
Run Code Online (Sandbox Code Playgroud)

还,

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="APPLICATIONROOTDIRECTORY" Name="TARGETINSTALLDIR"/>
</Directory>
Run Code Online (Sandbox Code Playgroud)

如果失败,我还尝试读取根目录中的目录路径,如下所示

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ROOT" Name="[%MY_ENV_VAR]">
      <Directory Id="My" Name="My">
        <Directory Id="Install" Name="Install">
          <Directory Id="APPLICATIONROOTDIRECTORY" Name="Path"/>
        </Directory>
      </Directory>  
    </Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)

我是否缺少一些语法,或者我从根本上误解了应该如何完成此操作?

Ark*_*niK 6

是的,我明白了。

我应该使用 SetDirectory 元素,而不是使用 SetProperty 元素。标记很简单;

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="APPLICATIONROOTDIRECTORY"/>
</Directory>
<SetDirectory Id="APPLICATIONROOTDIRECTORY" Value="[%MY_ENV_VAR]\My\Install\Path" Sequence="first"  />
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助其他人。