2015-10-20 69 views
0

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

没有打开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并采取相应的行动。

在此先感谢,

回答

0

它看起来像你期望这部分产生一个开放目录元素:

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

然而,processing instructions为WiX的不喜欢C预处理工作,所以你的元素仍然需要权衡XML的有效性。处理XML时,WiX会忽略条件的一方。我见过人们<?define ?>两种方式中的一种,然后在单个非条件Directory元素中引用该变量。

+0

为什么wix中的每件事都会更加困难。它真正的快速变得非常烦人。 anayway,我该怎么定义?像<?定义PlatformProgramFilesFolder =“Program Files(x86)”?>?以及如何将其引用到目录元素?我已经一直在尝试萌芽的事情,但它不起作用。 –

+0

我似乎有参考工作,但它总是选择错误的(32bit的)。所以我认为它不读取检测它是否是64位操作系统的系统变量。有什么建议么? –

相关问题