0

当我得到这样的建筑类型时:

<Property Id="PLATTFORM">
            <RegistrySearch Id="myRegSearchPalttform"
                Root="HKLM"
                Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
                Name="PROCESSOR_ARCHITECTURE"
                Type="raw">
            </RegistrySearch>
</Property>

并想检查它是否是这样的“AMD64”:

<?define myPlattform = [PLATTFORM] ?>  
<?if $(var.myPlattform) = AMD64 ?>
some stuff
        <?else ?>
some stuff
        <?endif ?>

它失败。当我将值设置为静态时:

<?define stest = AMD64 ?>  
        <?if $(var.stest) = AMD64 ?>

它在真实范围内。那么为什么注册表中的值(有值 AMD64)与我的证明字符串不一样????

提前缴费

4

1 回答 1

0

<?define myPlattform = [PLATTFORM] ?>

可能是因为 myPlattform 是一个预处理器变量,并且在 PLATTFORM 属性有值之前被赋值。如果你想有条件地安装不同的组件,你可以试试这个方法:如何在 WiX 的特性中使用条件?

这个问题可能与Is there a way to set a preprocessor variable to the value of a property? .

更新:如果您的目标是根据体系结构设置安装位置,并且您的体系结构由“PLATTFORM”属性使用您指定的注册表搜索确定,那么您可以尝试以下操作:

<Property Id="PLATTFORM">
  <RegistrySearch Id="myRegSearchPalttform"
      Root="HKLM"
      Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
      Name="PROCESSOR_ARCHITECTURE"
      Type="raw">
  </RegistrySearch>
</Property>

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLFOLDER" Name="SomeValue" />
  </Directory>
</Directory>

<ComponentGroup Id="ProductComponentGroup">
  <Component Id="ProductComponent" Guid="INSERT-GUID-HERE" Directory="INSTALLFOLDER">
    <File Id="TestTextFile.txt" Source=".\TestTextFile.txt" KeyPath="yes"/>
  </Component>
</ComponentGroup>

<Feature Id="ProductFeature" Level="1">
  <ComponentGroupRef Id="ProductComponentGroup"/>
</Feature>

<SetDirectory Id="INSTALLFOLDER" Value="[ProgramFilesFolder]\SomeOtherValue">
  PLATTFORM="AMD"
</SetDirectory>

注意:看到我使用了 SetDirectory 元素。我通常会下载 WiX 每周版本,并且在测试上述示例之前从未使用过该元素。因此,我不确定 SetDirectory 是第一次引入的版本。

于 2012-02-20T02:57:33.100 回答