字符串比较条件

时间:2012-02-17 12:25:32

标签: wix wix3.6

当我得到这样的achitecture类型时:

<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)与我的证明字符串????

不一致

Tanx提前

1 个答案:

答案 0 :(得分:0)

  

<?define myPlattform = [PLATTFORM] ?>

可能是因为myPlattform是一个预处理器变量,并且在PLATTFORM属性具有值之前被赋值。如果您想有条件地安装不同的组件,可以尝试这种方式:How to use conditions in features in 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。