在 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
元素中引用该变量。
我在让 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
元素中引用该变量。