如何在wxi文件中的变量中使用ProgramFilesFolder值

mic*_*mer 8 wix wix3.7

在我的wxi文件中,我想设置一个包含Program Files目录的变量.我希望它选择Program Files的本地化值.

 <?define MyDirectory="!(wix.LocalizedProgramFilesFolder)\MyFiles"?>
Run Code Online (Sandbox Code Playgroud)

我已将LocalizedProgramFilesFolder定义为:

<WixVariable Id="LocalizedProgramFilesFolder" Value="[ProgramFilesFolder]"/>
Run Code Online (Sandbox Code Playgroud)

但是在安装过程中,MyDirectory选为:

"[ProgramFilesFolder]\MyFiles".
Run Code Online (Sandbox Code Playgroud)

它不会扩展ProgramFilesFolder.如何在我的wxi文件中的变量中使用ProgramFilesFolder值?

Tom*_*get 7

不确定为什么要使用MyDirectory变量.正如WixVariable文档所说:

WiX变量不会持久存储在msi/msm/pcp文件中,因此在安装MSI文件时无法使用它们.这是一个仅限WiX的概念.

它的值以文本形式写入您使用它的任何位置.因此,如果您希望值在安装时替换属性,则必须仅在此类上下文中使用它.

ProgramFilesFolder的典型用法是Directory/@ Id,它可以具有后代目录,例如MyFiles.注意:Directory/@ Id也是一个属性,因此可以这样使用.

  <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
          <Directory Id="INSTALLFOLDER" Name="MyFiles" />
      </Directory>
  </Directory>
Run Code Online (Sandbox Code Playgroud)

INSTALLFOLDER用来代替MyDirectory.您可以使用任何您想要的但是项目模板中的默认值.全部上限,使其成为公共财产.公共属性值可以从UI或使用msiexec或其他程序(例如引导程序)传递到安装程序序列中.