在 WIX 中为 X64 系统调整 X86 目录结构

adapting X86 Directory structure for X64 system in WIX

我在让 WIX 安装程序检测它在 X86 或 X64 操作系统上是否 运行 时遇到问题。它需要检测它,因为目录结构需要一些小的调整。但是我使用的代码产生了以下错误:

没有 XML 开始标记打开。

我使用的代码:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="WindowsVolume">
    <Directory Id="Data" Name="Data" />
    <Directory Id="wheels" Name="wheels"/>

    <?if $(sys.BUILDARCH)=x64?>
      <Directory Id="ProgramFilesFolder(x86)">
    <?else?>
      <Directory Id="ProgramFilesFolder">
    <?endif?>

        <Directory Id="ActiveXControlPad" Name="ActiveX Control Pad" >
          <Directory Id="Setup" Name="Setup"/>
          <Directory Id="Refdocs" Name="Refdocs" />
        </Directory>
        <Directory Id="INSTALLFOLDER" Name="HM Machine Software" />
        <Directory Id="SPOKE" Name="SPOKE" />
        <Directory Id="MMI" Name="MMI" >
          <Directory Id="images" Name="images" />
        </Directory>
        <Directory Id="CommonFilesFolder" Name="CommonFilesFolder">
          <Directory Id="microsoftShared" Name="microsoft shared">
            <Directory Id="DAO" Name="DAO" />
            <Directory Id="SystemFolder">
            </Directory>
          </Directory>
        </Directory>
      </Directory>
    </Directory>
  </Directory>
</Directory>

我正在尝试使用 If 语句来检测构建体系结构并相应地调整 ProgramFilesFolder。因为当它检测到 X64 时,它应该将目录调整为 ProgramFiles(x86),并且应该从那里放置该结构中的以下目录。

我做错了什么?我不需要一个灵活的解决方案。它只需要检测 x86/x64 并采取相应的行动。

提前致谢,

您似乎希望此部分生成一个打开的目录元素:

<?if $(sys.BUILDARCH)=x64?>
  <Directory Id="ProgramFilesFolder(x86)">
<?else?>
  <Directory Id="ProgramFilesFolder">
<?endif?>

但是,processing instructions for WiX do not work like the C preprocessor, so your elements still need to be balanced for the XML to be valid. When processing the XML, WiX will ignore things on one side of your conditional. I've seen people <?define ?> 变量是两种方式之一,然后在单个非条件 Directory 元素中引用该变量。