有没有办法将预处理器变量设置为属性的值?

时间:2010-01-29 14:44:19

标签: wix xsd wix3

我有一个包含以下代码的WiX包含文件

<Fragment Id="PropertyFragment">
  <Property Id="DynamicLanguageCode" Value="[SystemLanguageID]" />
  <?define productLanguage = [DynamicLanguageCode]?>
</Fragment>

现在在我的WiX脚本中的Product标签中,我想将Language属性设置为productLanguage的值,因为它只需要可本地化的整数。有没有办法让我的变量被分配属性值?

由于

2 个答案:

答案 0 :(得分:25)

关于wix变量和Windows安装程序属性之间的区别,你的想法似乎很混乱。

wix变量可以引用为$(var.foo)。可以通过将-d命令行参数传递给candle.exe来定义此类变量。它也可以由<?define foo="bar"?>语法定义。 wix变量是仅在构建设置时才存在的概念。在其他任何事情发生之前,它由wix预处理器填充,就像C ++中的#define语句一样。

Windows安装程序属性是在安装期间填写的内容。定义属性的一种方法是将它们放在MSI文件的Property table中。这就是wix Property元素的作用。 Windows安装程序数据库中使用的某些(但不是全部)data types允许您使用[FOO]语法引用此类属性。支持此数据类型的一个示例是Shortcut数据类型,由wix Shortcut元素的Target属性使用。 Language数据类型支持此功能!

答案 1 :(得分:2)

没有争论为什么,这可以这样做:

<Property Id="DynamicLanguageCode" Value="$(var.SystemLanguageID)" />