WIX:我可以根据WIX中的另一个属性定义属性吗?

时间:2014-07-03 01:45:12

标签: wix

我可以这样做吗?

    <?if ISTEST="0"?>
    <?define SkyLibFolder = "Prod"?>
    <?else ?>
    <?define SkyLibFolder = "Test"?>
    <?endif ?>

我需要一个变量FolderPath,然后在WIX中使用。

2 个答案:

答案 0 :(得分:2)

您需要创建一个51类自定义操作来设置属性,您应该使用SetProperty Element

<SetProperty Action="SetSkyLibFolderA" Id="SkyLibFolder" Before="InstallFiles" Value="Prod"><![CDATA[ISTEST=0]]></SetProperty>
<SetProperty Action="SetSkyLibFolderB" Id="SkyLibFolder" Before="InstallFiles" Value="Test"><![CDATA[ISTEST=1]]></SetProperty>

内部文字(xs:字符串) 确定是否已设置属性的条件。如果条件的计算结果为false,则跳过Set。

编辑:Type 51 Custom Action从格式化的文本字符串中设置属性。简单来说,51类自定义操作基本上只是赋值语句(abc =“xyz”) 在设置时 。例如,考虑您要根据目标计算机上的注册表项更改安装位置。我们需要赋值语句,因为在我们开始安装之前,安装位置是未知的。

<!-- Find install path from registry -->
<Property Id="XYZFOLDER">
  <RegistrySearch Id="XyzRegistry"
                  Root="HKLM"
                  Key="SOFTWARE\MyXYZ\XyzProduct"
                  Name="InstallDir"
                  Type="raw" />
</Property>

<!-- Set the property -->
<CustomAction Id="SetXYZLocation"
              Property="XyzLocation"
              Value="[XYZFOLDER]xyz.exe" />

现在应该在InstallExecuteSequence中正确安排CustomAction(SetXYZLocation)。

使用SetProperty元素,自定义操作和自定义操作的计划由内部的Wix代码处理。

答案 1 :(得分:0)

是的,适用于WiX预处理器变量。 是的,对于Windows Installer属性。

目前尚不清楚应该使用哪种。

WiX产品设置生成Windows Installer程序包(MSI)。除了提供您可能选择使用的一些自定义操作(一种Windows Installer扩展)之外,WiX不参与实际安装。因此,如果您希望在安装时更改某些内容,则必须使用Windows Installer构造。