当我得到这样的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提前
答案 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。